サイトへのIP直アクセスを禁止する

WP Super Cacheのキャッシュディレクトリに知らないドメイン名のディレクトリができてました。不正アクセス?なにこれ怖い!ということで、気になるところがあったので対策してみました。
supercache_otherdomain

原因を突き止める

どうしてディレクトリができるのかを調査します。まず所有者がapacheとなっていることからroot権限を悪用されたわけでは無く、WordPressの動作として作成されていると思われます。次にアクセスログを調べるとディレクトリが作成された時間と同じタイミングでアクセスがあるのは分かりました。少なくとも不正アクセスではなさそうです。

そしてディレクトリを削除しては作成されるタイミングを調べてみると、サイトアクセス時のドメイン(IPアドレス)を判断してディレクトリが作成されることがわかりました。マルチドメイン用の挙動だと思われます。

ではなぜ中華っぽいドメインでアクセスがあるのか?現在の名前解決の逆引きではwww.riscascape.netしか出てこないため、おそらくこのドメインからriscascapeが変数として呼び出されたのではないかと考えています。

対策「サイトへのIP直アクセスを禁止する」

原因が分かれば対策はそう難しくありません。www.riscascape.net以外へのアクセスを禁止すればいいはずです。そこでapacheのバーチャルホストを使ってServerName www.riscascape.netへのアクセス以外に対する制御を追加します。

具体的な方法としては、NameVirtualHostを宣言し、ServerName www.riscascape.netがある<VirtualHost *:80>の前にダミーの<VirtualHost *:80>を配置します。403/404どちらが良いのかはお好みで。設定後httpdを再起動します。

# vi /etc/httpd/conf/httpd.conf#NameVirtualHostを有効化する
+ NameVirtualHost *:80

#www.riscascape.net以外への通信を404にしたいとき
+ <VirtualHost *:80>
+        ServerName any
+        DocumentRoot /var/www/dummy
+ </VirtualHost>

#www.riscascape.net以外への通信を403にしたいとき
+ <VirtualHost *:80>
+        ServerName any
+        <Location />
+              Order deny,allow
+              Deny from all
+        </Location>
+ </VirtualHost>

<VirtualHost *:80>
 DocumentRoot /var/www/html
 ServerName www.riscascape.net
 ServerAlias riscascape.net
・・・# service httpd restart

効果を確認

設定後にIPアドレスでサイトにアクセスするとForbiddenが発生することを確認。そしてWP Super CacheのキャッシュディレクトリにIPアドレスなディレクトリが作成されないことを確認しました。
supercache_mydomainonly