WordPress の管理画面を IP アドレスで制限することは Brute Force Attack に対して有効です。
たとえば Nginx を使っている場合、以下のような設定で許可された IP アドレス以外からのログインを拒否することができます。
server { location /wp-admin { allow 192.168.0.1; deny all; : } location = /wp-admin/admin-ajax.php { allow all; : } location = /wp-login.php { allow 192.168.0.1; deny all; : } }
また、IP アドレスによるログイン制限を行うプラグインもいくつかあるようです。
ただし、これらの方法だとリバースプロキシ配下のサーバの場合、期待した動作になりません。
# リバースプロキシサーバからは、実際にアクセスしてきたクライアントの IP アドレスは http ヘッダ X-Forwarded-For にセットされて来るため
そこで、簡単な PHP スクリプトを書いて対応しました。
IP アドレスをチェックする PHP スクリプト
同じディレクトリにある .allowed_ip ファイルを読み込んで、許可されている IP アドレスからのアクセスかどうかをチェックするスクリプトを gist で公開しました。
.allowed_ip には、以下のように許可したい IP アドレスを列挙します。
IP アドレスはマスク指定もできます。
192.168.0.1 192.168.1.0/24 192.168.2.1-192.168.2.254
これらを wp-config.php の先頭で読み込んで、ダッシュボードへのリクエストの場合は IP アドレスのチェックを行ってください。
こんな感じです。