はじめに
CentOS 6.x に iptables の設定を行います。
iptables は IPv4 用のパケットフィルターになります。
目次
設定の確認
以下のコマンドを実行して、iptables が 3:on になっていることを確認します。3:on になっていると起動時に実行されるようになります。
# chkconfig iptables --list iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
もし、3:off になっていた場合は、以下のコマンドで 3:on にします。
# chkconfig iptables on
iptables の汎用設定
iptables の汎用設定をします。
設定は、直接 iptables のファイルを編集します。
# vi /etc/sysconfig/iptables
以下の内容をコピー&ペーストしてください。余計な改行や空白が入るとうまく動作しないようなので注意してください。また、サーバー側で SSH サービスのポートを 10022 に設定しています。
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH(22,10022,22->delete after), HTTP, HTTPS -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
設定を有効にします。
# service iptables restart
Nmap によるポートスキャン
ポートが正しく設定されているかどうか、Nmap を使用してポートスキャンを行い確認します。
# nmap -p 1-10022 hostname Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-18 07:00 JST Nmap scan report for hostname (133.242.xxx.xxx) Host is up (0.037s latency). Not shown: 10017 filtered ports PORT STATE SERVICE 22/tcp closed ssh 80/tcp open http 443/tcp open https 631/tcp closed ipp 10022/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 29.18 seconds
Http, HTTPS, SSH(unkown) のポートが開いていることが分かります。逆に言えば、それ以外のポートの開放は不要ということになります。
最低限の iptables の設定
Nmap のポートスキャン結果を受けて、最低限の iptables の設定を以下のようにします。SSH の22番ポートが削除されてるので、使用する場合はご注意ください。
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH(22,10022,22->deleted), HTTP, HTTPS -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
設定を有効にします。
# service iptables restart
Nmap によるポートスキャン
再度、Nmap によるポートスキャンを実施し、設定が正しいか確認します。
# nmap -p 1-10022 hostname Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-18 06:52 JST Nmap scan report for hostname (133.242.xxx.xxx) Host is up (0.039s latency). Not shown: 10019 filtered ports PORT STATE SERVICE 80/tcp open http 443/tcp open https 10022/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 48.28 seconds
最低限必要なポートだけ空いているので、問題ないと判断できます。
まとめ
iptabels の設定を行う記事はネット上に多いですが、実際にポートスキャンを行って設定が正しく行われているか確認する記事が少ないことが気になっています。
Nmap を使用するのは、正直敷居が高いかもしれませんが、ポートスキャンを行って設定が正しいか確認することをお勧めします。
最低限必要な CentOS セキュリティ設定
最低限必要な CentOS セキュリティ設定を以下の記事にまとめていますので、こちらもどうぞ。
コメント
# chkconfig iptables –list
の出力がip6tablesのになってますね
コメントありがとうございます。
遅くなりましたが記事を修正しました。