WordPressをブルートフォースアタックから守るために、最低限やっておきたい.htaccessの設定

wordpress

世界中で頻発する、WordPressを狙った不正なアタック。
その手口の多くは、「ブルートフォースアタック」と呼ばれる、パスワードの総当たり攻撃です。
数さえ打てばいつかは当たるとばかりに、WordPressのログイン画面である「wp-login.php」に、執拗にアクセスしてきます。

いい迷惑ですね。ホントやめて欲しいです。
パスワードがバレなかったとしても、不正アタックのたびにWordPressが何度も起動するため、サイトのパフォーマンスが大きく低下してしまいます。

実際に、このサイトもブルートフォースアタックの被害に逢いました。実は、昨日、そのことが原因で、サーバ運営会社から一時的にCGI/PHPが制限されてしまったんです。

その時にサーバの管理画面に表示されていたメッセージがこちら。

wp-login.php の過負荷により、CGI/PHPが制限されています。

何だコレ?
調べてみると、世界中から、このサイトの「wp-login.php」にアタックされているようです。
トルコ、イスラエル、フィリピン、アメリカ。
いまさらながら、インターネットって怖いですね。

でも、あたふたしているだけじゃ仕方がないので、WordPressと.htaccessの設定を急遽見なおして、なんとか危機を回避することができました。

手順は3段階。次のとおりです。

  1. 世界中からアタックされている現状を知る
  2. wp-login.phpのURLを変更する
  3. REMOTE_HOSTが、自分が使用しているプロバイダと一致する場合にのみ、ログイン画面へのアクセスを許可する

ステップ1:世界中からアタックされている現状を知る

まずは、自分のサイトがどのくらいの頻度で攻撃を受けているのか、知る必要があります。
私の場合は、WordPressのプラグイン「Limit Login Attempts」をインストールしています。

Limit Login Attempts


このプラグインのメインの機能は、同一IPアドレスからのログインが一定回数以上失敗した場合、しばらくの間、その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を変更することができます。

Login rebuilder


ただ、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に以下を追記します。

<Files ~ "^(mypage|wp-login)\.php$">
order deny,allow
deny from all
allow from .bbtec.net
</Files>

なお、.htaccessは、バックアップをとるなどして慎重に扱ってください。
.htaccessの書き方については、ミケネコの htaccess リファレンスが分かりやすいです。

ミケネコの htaccess リファレンス

まとめ

私の環境では、この設定は、かなりの効果をあげています。

いまのところ、Limit Login Attemptsでブロックした履歴はゼロです。昨日までは1,000件近くブロックしていたにもかかわらずです。
WordPressに到達する前に.htaccessが攻撃を防いでくれているのだと思います。おかげで、余計なリソースを食うことがなくなりました。

設定が簡単なわりに、効果は大きいですよ。

コメント

この記事についてのご感想などをお寄せください。
サイト運営の参考にさせていただきます。
頂いたコメントには、2〜3日以内にメールアドレス宛に回答いたします。(詳細
メールアドレスの入力ミスにご注意ください。
なお、頂いたコメント及びその後のメール等でのやり取りは、この欄でご紹介させていただく場合がございます。