さくらVPSでセキュリティ関連の設定をする(ファイヤーウォール編)
SSHの設定に引き続き、ファイヤーウォール(iptables)の設定をする。
1. iptablesの設定
以下のサイトの説明がわかりやすいので、その通りにした。設定ファイルの場所は、/etc/sysconfig/iptables。
さくらのVPS を使いはじめる 3‐iptables を設定する
流れとしては、以下のようになる。
SSH, HTTP, FTP1, FTP2, MySQLのパケットを許可(ACCEPT)した。その後、iptablesがOS起動時に自動起動する設定になっているかを確認するために、以下のコマンドを実行する。
$ chkconfig --list iptables iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off # ランレベル2〜5のonを確認
もし上記のようになっていなければ、以下のコマンドで設定する。
$ sudo chkconfig iptables on # OS起動時に自動で起動するように設定
2. iptablesが効いているか確認
(1) ポートをスキャンするためのツールnmapをインストールする
さくらVPSのOSはCentOSなので、yumコマンドでインストールする。
$ yum list installed | grep nmamp # インストール済みでないことを確認(このコマンドで何も表示されない) # sudo -i # yum -y install nmap # yum の -y オプションは「すべてYESで答える」
(2) ポートをスキャンしてみる
以下のコマンドを実行すると、SSHとSMTPのポートだけが開いていることがわかる。「え? さっきiptablesの設定でACCEPTした他のポートはどうして開いていないの?」と思ったら、以前の記事をご覧いただきたい。ポートは、そのポートを使うアプリケーションが起動されていないと開かない。
# nmap localhost # ポートスキャンを実行 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2011-11-07 00:22 JST Interesting ports on localhost.localdomain (127.0.0.1): Not shown: 1678 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp Nmap finished: 1 IP address (1 host up) scanned in 0.061 seconds
ただ、この方法でポートをスキャンするだけだったら、iptablesの設定が効いているかどうかは判別できない。
(3) ブラウザでアクセスしてみる
「nmap localhost」のコマンドでは、iptablesが機能しているかどうかがわからないので、ブラウザを使ってパケットが届くかどうか試してみる。
まず、Apache*1を起動した状態で、ブラウザでVPSのURL(http://wwwXXXXXX.sakura.ne.jp)にアクセスする。
Apacheのページが表示される。
nmapコマンドを実行すると、80番ポート(HTTP)が開いていることがわかる。
# nmap localhost # ポートスキャンを実行 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2011-11-10 01:34 JST Interesting ports on localhost.localdomain (127.0.0.1): Not shown: 1677 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http Nmap finished: 1 IP address (1 host up) scanned in 0.140 seconds
次に、iptablesの設定ファイルを編集して、80番ポートへのパケットを拒否するようにしてみる。
$ sudo vi /etc/sysconfig/iptables # 設定ファイルを編集する ... -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 80 -j ACCEPT # ポート80をACCEPTしない -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited # ACCEPTしていないパケットをすべて拒否 $ sudo /etc/rc.d/init.d/iptables restart # iptablesを再起動する
この状態では、ブラウザでVPSのURLにアクセスしても、Apacheのページが表示されない。iptablesにより、ポート80番のパケットが破棄されているからである。
ポートは開いているが、このポートに入ってくるパケットはちゃんとブロックされている。
# nmap localhost # ポートスキャンを実行 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2011-11-10 01:34 JST Interesting ports on localhost.localdomain (127.0.0.1): Not shown: 1677 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http Nmap finished: 1 IP address (1 host up) scanned in 0.140 seconds
*1:Apacheのインストール方法は、「さくらVPS設定その2 Apache+MySQL+WordPress」のページを参考にさせていただいた。