[WordPress General] wp-login.php への不正アクセスを防ぐ

wp-login.php への不正アクセスは常態化しているので、その対策を調べてみました。

ログインを知らせる

Crazy Bone

管理画面からログイン履歴を確認できる。
「ユーザー – ログイン履歴」から利用する。

WP Security Login Notification

ログインが完了すると、メールでお知らせしてくれる。
「設定 – 一般」に設定しているメールアドレスに送られる。

ログインをロックする

Limit Login Attempts

一定期間内に一定回数以上のログイン失敗が起こった場合に、一定期間ログイン不可にする。
同様のプラグインもいくつかある。
* Simple Login Lockdown
* Login LockDown

/?author=1 でわかるユーザー名を隠す

テーマから削除しても、/?author=1 といった形式でアクセスするとユーザー名が分かってしまうので、これを隠してみる。
mod_rewrite を使って 404.php にリダイレクトするよう .htaccess を編集する

# WordPress author req to 404
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ /404.php? [L,R=301]

ログインURLを隠す

いっそのこと、ログイン時以外は wp-login.php の名前を変えておいた方が良いかもと思い、ruby の勉強もかねてスクリプトを書いてみた。
[gist]https://gist.github.com/6402900[/gist]
wp-login.php の入っているディレクトリを初期設定し、スクリプトを実行するとランダムな文字列を付けたファイル名にリネームしてくれる。

$ ruby rename-wp-login.rb
found
./wp-login.php
result
./UAPuiHtRLNJ6_wp-login.php

もう一度実行すると、wp-login.php にファイル名が戻るようトグルになっている。

$ ruby rename-wp-login.rb
found
./UAPuiHtRLNJ6_wp-login.php
result
./wp-login.php

ruby 2.0.0p247 で確認しました。

Basic 認証で制限する