WordPress の管理画面を IP アドレスで制限する

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 アドレスのチェックを行ってください。
こんな感じです。


コメントを残す

メールアドレスが公開されることはありません。