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
を確認すると、内容が更新されていることがわかります。