iptables
iptablesはパケットフィルタリング機能を提供するプログラムで、ファイアーウォールの構築などに利用できる。非常に多機能で奥の深いプログラムだが、とりあえず必要最小限と思われる設定をおこなう。
まず、さくらのVPSにiptablesがインストールされていることを確認する。インストールされていた以下のように表示される。
$ yum list installed | grep iptables iptables.x86_64 1.4.7-9.el6 @anaconda-CentOS-201303020151.x86_64/6.4 iptables-ipv6.x86_64
インストールされていない場合は、以下を実行する。
$ yum install iptables
インストールされていたら、現在の設定を確認する。
$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
上記が表示されたら何も設定されていないことになるので、改めて設定をおこなう。
iptablesのフィルタ設定
iptablesが未設定の状態からSSH、HTTPだけに限定してポート解放し、後は利用しないようにする。SSHについては22もしくは変更したポート、HTTPは80番を使用する。 ※セキュリティを考えてSSHは変更したポート(Port)番号にする方がよい。
iptablesの設定は/etc/sysconfig/iptablesに対して記述する。初期状態ではこのファイルが存在しないので新規作成する。root権限の必要な場所に保存するのでrootになるかsudoで作成する。
$ sudo vi /etc/sysconfig/iptables
ファイルの内容は以下のようになる。
*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, HTTP -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport xxxxx -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
SSHポート番号以外は、汎用な設定になっていると思う。ファイルの編集が完了したらescキーでコマンドモードに戻り、:wqで保存する。
再起動と設定の確認
設定ファイルが作成されたので、iptablesを再起動する。rootになるかsudoで/etc/rc.d/init.d/iptables restartでおこなえる。設定が適切ならば、以下のように出力される。
$ sudo /etc/rc.d/init.d/iptables restart iptables: ファイアウォールルールを消去中: [ OK ] iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ] iptables: モジュールを取り外し中: [ OK ] iptables: ファイアウォールルールを適用中: [ OK ]
最後に、設置がどのように反映されているかを確認しておく。
$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain RH-Firewall-1-INPUT (2 references) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere icmp any ACCEPT esp -- anywhere anywhere ACCEPT ah -- anywhere anywhere ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns ACCEPT udp -- anywhere anywhere udp dpt:ipp ACCEPT tcp -- anywhere anywhere tcp dpt:ipp ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:xxxxx ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
設定がバッチ反映されている。