世界中で頻発する、WordPressを狙った不正なアタック。
その手口の多くは、「ブルートフォースアタック」と呼ばれる、パスワードの総当たり攻撃です。
数さえ打てばいつかは当たるとばかりに、WordPressのログイン画面である「wp-login.php」に、執拗にアクセスしてきます。
いい迷惑ですね。ホントやめて欲しいです。
パスワードがバレなかったとしても、不正アタックのたびにWordPressが何度も起動するため、サイトのパフォーマンスが大きく低下してしまいます。
実際に、このサイトもブルートフォースアタックの被害に逢いました。実は、昨日、そのことが原因で、サーバ運営会社から一時的にCGI/PHPが制限されてしまったんです。
その時にサーバの管理画面に表示されていたメッセージがこちら。
何だコレ?
調べてみると、世界中から、このサイトの「wp-login.php」にアタックされているようです。
トルコ、イスラエル、フィリピン、アメリカ。
いまさらながら、インターネットって怖いですね。
でも、あたふたしているだけじゃ仕方がないので、WordPressと.htaccessの設定を急遽見なおして、なんとか危機を回避することができました。
手順は3段階。次のとおりです。
- 世界中からアタックされている現状を知る
- wp-login.phpのURLを変更する
- REMOTE_HOSTが、自分が使用しているプロバイダと一致する場合にのみ、ログイン画面へのアクセスを許可する
ステップ1:世界中からアタックされている現状を知る
まずは、自分のサイトがどのくらいの頻度で攻撃を受けているのか、知る必要があります。
私の場合は、WordPressのプラグイン「Limit Login Attempts」をインストールしています。
このプラグインのメインの機能は、同一IPアドレスからのログインが一定回数以上失敗した場合、しばらくの間、そのIPアドレスからの接続にロックをかけるというものです。それだけでも便利なんですが、このプラグインには、補助機能として、ロックしたIPアドレスの履歴を見ることができるんです。
世界中から繰り返されるアタック。
記録されたIPアドレスが、どの国のものかを知りたいときには、例えば、次のサイトを使います。
IPひろば
ちなみに、Limit Login Attemptsで特定のIPアドレスからの攻撃にロックをかけたとしても、WordPress自体はその都度起動しています。ですから、アタックが集中すると、サーバ運営会社によっては、一時的にCGI/PHPが制限されてしまうかもしれません。
ステップ2:wp-login.phpのURLを変更する
WordPressのログイン画面のURLって、デフォルトでは、「(サイトのURL)/wp-login.php」となっていますよね。
このURLを変更し、ログイン画面を隠してしまいます。
使うのは、「Login rebuilder」というプラグイン。
手軽に、ログイン画面のURLを変更することができます。
ただ、WordPressのプラグインでURLを変更しているわけですから、ステップ1のLimit Login Attemptsと同様に、wp-login.phpへのアタックを受けるたびにWordPressが起動することには変わりありません。
これを解決するには、やはり.htaccessでどうにかするしかありません。その方法が、次のステップ3になります。
ステップ3:REMOTE_HOSTが、自分が使用しているプロバイダと一致する場合にのみ、アクセスを許可する
WordPressへの攻撃は、様々な国のコンピュータから行われています。日本からの攻撃も中にはありますが、数で言えば、海外からの方が圧倒的に多いです。
そうすると、自分が普段使用しているプロバイダと、それらの攻撃に使われているコンピュータのプロバイダが同じものである可能性って、かなり低いのではないでしょうか。
そこで、REMOTE_HOSTが、自分が使用しているプロバイダと一致する場合にのみ、ログイン画面へのアクセスを許可することにします。
まずは、自分のプロバイダのREMOTE_HOSTを調べます。
例えば、株式会社シーマンが提供している、コチラのページで調べることができます。
このページを開いた時に、「あなたのホスト名(REMOTE_HOST)」という欄に表示されている英数字が、REMOTE_HOSTです。例えば、YahooBBを使っている場合は、「xxxxxx.bbtec.net」となるようです。(私が使っているのは、他のプロバイダですが。)
REMOTE_HOSTの前半部分は、その都度変わる可能性がありますが、後半部分、先ほどの例で言うところの「.bbtec.net」の部分は基本的には変わりません。
ですから、REMOTE_HOSTの後半部分が、自分のものと一致すれば、ログイン画面を表示すればいいわけです。
具体的には、.htaccessをいじります。
例えば、REMOTE_HOSTの後半部分が「.bbtec.net」で、ステップ2で作成したログイン画面のファイル名が「mypage.php」の場合。
.htaccessに以下を追記します。
order deny,allow
deny from all
allow from .bbtec.net
</Files>
なお、.htaccessは、バックアップをとるなどして慎重に扱ってください。
.htaccessの書き方については、ミケネコの htaccess リファレンスが分かりやすいです。
まとめ
私の環境では、この設定は、かなりの効果をあげています。
いまのところ、Limit Login Attemptsでブロックした履歴はゼロです。昨日までは1,000件近くブロックしていたにもかかわらずです。
WordPressに到達する前に.htaccessが攻撃を防いでくれているのだと思います。おかげで、余計なリソースを食うことがなくなりました。
設定が簡単なわりに、効果は大きいですよ。
この記事についてのご感想などをお寄せください。
サイト運営の参考にさせていただきます。
頂いたコメントには、2〜3日以内にメールアドレス宛に回答いたします。(詳細)
メールアドレスの入力ミスにご注意ください。
なお、頂いたコメント及びその後のメール等でのやり取りは、この欄でご紹介させていただく場合がございます。