アクセス制限:wp-login.phpへのアクセスで404 Not Foundを返す
なんだか最近、WordPressをインストールしているディレクトリの「wp-login.php」に対する攻撃が頻繁なんですよ。 おそらくセキュリティホールを見つけてアクセスしてきてるんでしょう。
210.48.154.90 - - [04/Nov/2013:10:30:49 +0900] "POST /hoge/wp-login.php HTTP/1.1" 403 480 "http://my.example.com/hoge/wp-login.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36" 210.210.178.20 - - [04/Nov/2013:11:12:54 +0900] "POST /hoge/wp-login.php HTTP/1.1" 403 480 "http://my.example.com/hoge/wp-login.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36" 72.29.71.247 - - [04/Nov/2013:11:12:56 +0900] "POST /hoge/wp-login.php HTTP/1.1" 403 480 "http://my.example.com/hoge/wp-login.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36" 198.136.54.104 - - [04/Nov/2013:11:12:58 +0900] "POST /hoge/wp-login.php HTTP/1.1" 403 480 "http://my.example.com/hoge/wp-login.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36"
403では止まらないwp-admin.phpへのアクセス
で、最初はアクセス制限で「order deny, allow」「deny from all」等を使ってレスポンスコード「403」を返してたんですが、1週間経った後でもアクセスが一向に止まらない。 「いつかアクセス制限が外れて攻撃できる時が来るかもしれないぜ…hehehe」なんて思っているのでしょうか。
まぁ、それは考えすぎかもしれませんが、403というコードは「wp-login.php」が存在することを暗に示しているわけで、その認識自体を改めさせる必要があります。 つまり「wp-login.php」は無いよ、というレスポンスコード「404」を返す必要があります。
特定のIPアドレス以外は404を返す
そこで今回は mod_rewriteで404を返すことにしました。 もちろん、特定のIPアドレスからは管理用としてアクセスOKにしないといけないので、RewriteCondで特定のIPアドレスでは制限をかけません。
wp-login.php と同じディレクトリに .htaccess ファイルを配置し、次のように記述します。
<FilesMatch "wp-login.php$"> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REMOTE_ADDR} !^192.168.1.10$ RewriteCond %{REMOTE_ADDR} !^192.168.1.12$ RewriteRule ^.*$ - [R=404,L] </IfModule> </FilesMatch>
これで諦めてくれるでしょう。
2013-11-04