iptablesで、httpとhttpsの接続を許可する設定
VirtualBoxで CentOSの仮想環境を構築した時に行った設定。iptablesの設定を変更して、httpとhttpsでアクセスできるようにした。
1.現在の設定の確認
$ sudo /sbin/iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
-L
オプション現在の設定一覧を表示する。--line-numbers
オプションで、各ルールに番号がつく。
2.httpとhttpsの接続許可の設定
$ sudo /sbin/iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo /sbin/iptables -I INPUT 6 -p tcp -m tcp --dport 443 -j ACCEPT
-I
でチェインと番号を指定すると、指定したチェインの指定した番号にルールを挿入する。指定した番号以降のルールは、それぞれ一つ下にずれる。番号をつけない場合は、先頭(1番)にルールを挿入する。
ここでのポイントは、挿入する場所をREJECTのルール(上記の場合は5のルール)より前にすること。そうしなければ、挿入したルールが適用される前にREJECTのルールが適用され、接続が拒否される。
3.変更内容の確認
$ sudo /sbin/iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT tcp -- anywhere anywhere tcp dpt:http
6 ACCEPT tcp -- anywhere anywhere tcp dpt:https
7 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
設定一覧を再度表示し、設定内容が意図した形で反映されているか確認する。上記の場合5番と6番が手順2で挿入したルールになる。
その後、ブラウザでhttpとhttpsでアクセスし、実際にページが表示されるか確認する。
4.変更内容の保存
$ sudo service iptables save
$ sudo cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue Sep 10 18:35:35 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41:5316]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
このままでは、サーバを再起動すると設定が元の状態に戻る。再起動時に現在の設定を反映するために、iptablesの起動スクリプトを使ってルールを保存する。
設定内容は/etc/sysconfig/iptables
に保存される。当該ファイルを直接開いて、設定内容が反映されているか確認する。