iptables のファイアウォールにルールを追加する – iptables-persistent での設定保存

前回の記事 iptablesによるファイアウォール構築 in Debian/Ubuntu では、Linux サーバーで iptables によるファイアウォールを構築しました。

その例では、HTTP 接続のポート80と HTTPS 接続のポート443 は開放しましたが、メール関連のポートは閉じられています。

今回は、前回の例に追加して、iptables でメール関連のポートを開放します。

実行環境 Ubuntu 14.04 LTS

I. IPv4 での iptables にメールの標準ポートを追加する

前回の記事での IPv4 での有効化された iptables を見てみると、INPUT、FORWARD、OUTPUT、fail2ban-ssh と大きく4段に分かれています。INPUT のルールは10行あって、6行目が http、7行目が https になっています。また、8行目は ESTABLISHED です。

この直後にメールの標準ポートである、25、465、587、110、995、143、993の各ポートを開放するルールを付け加えていきます。

最初は8行目にポート25のルールを追加します。


$ sudo iptables -I INPUT 8 -p tcp --dport 25 -j ACCEPT

この時点で、8行目がポート25の行になり、ESTABLISHED の行は9行目になります。

ですから、次に追加するポート465の行は9行目になります。


$ sudo iptables -I INPUT 9 -p tcp --dport 465 -j ACCEPT

以下同様に、


$ sudo iptables -I INPUT 10 -p tcp --dport 587 -j ACCEPT
$ sudo iptables -I INPUT 11 -p tcp --dport 110 -j ACCEPT
$ sudo iptables -I INPUT 12 -p tcp --dport 995 -j ACCEPT
$ sudo iptables -I INPUT 13 -p tcp --dport 143 -j ACCEPT
$ sudo iptables -I INPUT 14 -p tcp --dport 993 -j ACCEPT

これでメールの標準ポート7つが開放されました。

iptables を確認してみます。


$ sudo iptables -L

Chain INPUT (policy DROP)
target     prot opt source               destination
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  127.0.0.0/8          anywhere             reject-with icmp-port-unreachable
ACCEPT     icmp --  anywhere             anywhere             state NEW icmp echo-request
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:urd
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imap2
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables_INPUT_denied: "
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain FORWARD (policy DROP)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables_FORWARD_denied: "
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

前回の記事での iptables と比較して、CHAIN の8~14行目にメール関連の7ポートが追加されています。

II. IPv6 での iptables (ip6tables)にメールの標準ポートを追加する

前回の記事での IPv6 での有効化された iptables(ip6tables) を見てみると、INPUT、FORWARD、OUTPUT と3段に分かれており、また、INPUT のルールは8行あって、4行目が http、5行目が https、6行目が ESTABLISHED です。

6行目以降にメールの標準ポートである、25、465、587、110、995、143、993の各ポートを開放するルールを付け加えていきます。


$ sudo ip6tables -I INPUT 6 -p tcp --dport 25 -j ACCEPT
$ sudo ip6tables -I INPUT 7 -p tcp --dport 465 -j ACCEPT
$ sudo ip6tables -I INPUT 8 -p tcp --dport 587 -j ACCEPT
$ sudo ip6tables -I INPUT 9 -p tcp --dport 110 -j ACCEPT
$ sudo ip6tables -I INPUT 10 -p tcp --dport 995 -j ACCEPT
$ sudo ip6tables -I INPUT 11 -p tcp --dport 143 -j ACCEPT
$ sudo ip6tables -I INPUT 12 -p tcp --dport 993 -j ACCEPT

これで、IPv6でメールの標準ポート7つが開放されました。

ip6tables を確認してみます。


$ sudo ip6tables -L

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all      anywhere             anywhere
REJECT     all      localhost            anywhere             reject-with icmp6-port-unreachable
ACCEPT     ipv6-icmp    anywhere             anywhere
ACCEPT     tcp      anywhere             anywhere             tcp dpt:http state NEW
ACCEPT     tcp      anywhere             anywhere             tcp dpt:https state NEW
ACCEPT     tcp      anywhere             anywhere             tcp dpt:smtp
ACCEPT     tcp      anywhere             anywhere             tcp dpt:urd
ACCEPT     tcp      anywhere             anywhere             tcp dpt:submission
ACCEPT     tcp      anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp      anywhere             anywhere             tcp dpt:pop3s
ACCEPT     tcp      anywhere             anywhere             tcp dpt:imap2
ACCEPT     tcp      anywhere             anywhere             tcp dpt:imaps
ACCEPT     all      anywhere             anywhere             state RELATED,ESTABLISHED
LOG        all      anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "ip6tables_INPUT_denied: "
REJECT     all      anywhere             anywhere             reject-with icmp6-port-unreachable

Chain FORWARD (policy DROP)
target     prot opt source               destination
LOG        all      anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "ip6tables_FORWARD_denied: "
REJECT     all      anywhere             anywhere             reject-with icmp6-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

前回の記事での ip6tables と比較して、CHAIN の6~12行目にメール関連の7ポートが追加されています。

III. iptables の設定変更を保存する

この時点で、メール標準ポートの開放を追加した iptables によるファイアウォールは確立されていますが、Linux サーバーを再起動したときにその設定は保存されません。

iptables-persistent を利用しているので、新たな設定の保存は以下のコマンドで行います。


$ sudo /etc/init.d/iptables-persistent save

iptables-persistent の設定保存ファイルである


/etc/iptables/rules.v4
/etc/iptables/rules.v6

を確認すると、内容が更新されていることがわかります。