Debian(stretch)でのiptables設定について、調べたことをまとめてみます。
以前は、以下のようなスクリプトを /etc/network/if-pre-up.d/
に置いて、iptables設定を行っておりました。
(外部からは、IPアドレスが「192.168.1.2」の管理用PCからと、httpとhttpsの通信のみを許可する例です。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/bin/sh iptables -F iptables -X ## Deafult Rule ################################################## iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP ## OUTPUT ######################################################## iptables -A OUTPUT -j ACCEPT ## INPUT ######################################################### ## ALLOW ESTABLISHED and RELATED iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -m state --state RELATED -j ACCEPT ## loopback iptables -A INPUT -i lo -j ACCEPT ## trusted ip iptables -A INPUT -s 192.168.1.2 -j ACCEPT ## http, https iptables -A INPUT -p tcp -m multiport --dports http,https -j ACCEPT ## Others iptables -A INPUT -j DROP |
しかし、インターフェースが複数ある場合に、同じ設定が2重に設定されるという状況になってしまいました。
Debian 管理者ハンドブックの「14.2.4. 起動時にルールを適用する」 を見てみたところ、 /etc/network/interfaces
に設定する方法が推奨されていたので、その方法で設定することにしました。
まず、上のスクリプトを /usr/local/etc/iptables.sh
に置きます。このとき、置くディレクトリは任意の場所、ファイル名は任意のもので構いません。
次に、以下のように、 /etc/network/interfaces
の中の最後のインターフェースのところに「up /usr/local/etc/iptables.sh
」と書きます。
1 2 3 4 5 6 7 8 9 |
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet dhcp up /usr/local/etc/iptables.sh |
以上で設定は終わりです。
この設定に変えてからは、同じ設定が2重に設定されることはなくなりました。
NetworkManagerなどを利用している場合は、設定方法が変わりますので、NetworkManagerのマニュアルなどを調べる必要がありそうです。