wp-login.phpへのアクセスが大量にある場合
ここ数日、このブログのサーバーの負荷が高くなっています。
原因を調べてみたところ、WordPressのログイン画面へ、海外のホストが大量にアクセスしていることがわかりました。
対策としては、WebサーバーであるApcheの設定ファイル .htaccess
にアクセスを拒否する設定を追加しました。
アクセスログを確認してわかったのは、とあるホストが最初から決めうちでPOSTしてきています。つまりログイン画面を表示せずに、いきなりログインを試みているのです。
どんなユーザーIDとパスワードがPOSTされているのか不明ですが、こういう単純な攻撃をブルートフォース攻撃とよぶのだそうです。参考サイト → https://wpdocs.osdn.jp/ブルートフォース攻撃 (余談ですが、リ-ダ-ズ英和辞典第2版によると”Brute Force”の意味は「暴力」だそうです)
今回のケースでは、あるホストがwp-login.phpへ大量にアクセスしていると思ったら、翌日は別のホストが同様に大量にアクセスしています。ころころとホストが変わってしまうので、特定のホストだけ拒否する方法では効果がありません。
さらに他にもログインを試みるホストは回数は少ないものの存在します。
対応策は何通りか考えられるのですが、今回はアクセスできるホストを制限することにします。自分が利用しているプロバイダーのホストはアクセスできるように許可し、それ以外は拒否することにします。
wp-login.php があるのと同じディレクトリの .htaccess
に次の設定を追加します。
<Files wp-login.php>
order deny,allow
Deny from all
Allow from .example.com
</Files>
.example.com の部分を、自分のホスト名と置き換えてください。xxxx.hoge.jp の場合、ドメイン名である .hoge.jp と記載しておけば、xxxxの部分が変っても接続できます。
自分のホスト名は、Geo IP Tool( https://geoiptool.com )へアクセスすれば、わかります。
許可したいプロバイダーが複数ある場合は、Allo from の行を追加してください。
また念のため /wp-admin
ディレクトリにも .htaccess を作成して似たような設定を追加しておきました。
<Files "*.php">
order deny,allow
Deny from all
Allow from .example.com
</Files>
この対策の問題点は、別の.hoge.jp のユーザーからのアクセスは防げない点ですが、現状は海外からの不正アクセスが防止できればいいということでよしとします。
また問題があれば、このブログで報告します。