BASIC 認証を使って WordPress サイトをブルートフォースアタックから守る対策を紹介します。
この WordPress ブログもセキュリティーには気をつけています。きちんとしたプラグインのみを使い、WordPress の安定版がリリースされたり、プラグインの互換性を確認したらすぐにアップデートを心がけています。
しかし、去年辺りから Brute Force 攻撃が盛んになってきました。Login Security Solutions というプラグインを入れていて、攻撃があるときは知らせてくれるんですが、その通知メールが尋常ではなくなってきたので、ログイン画面からアクセス制限をかけることにしました。
WordPress でも、BASIC 認証をかけることができるプラグインが存在しますが、それだと、負荷がかかります。なので、ちょっと面倒ですが、.htaccess ファイルをサーバーに直において対策をするほうが良いと思い。その対策を行いました。
ログインページにBASIC認証を付けて、Brute Force 攻撃をさせないようにしているつもりだったんだけど、なぜか攻撃が続いていて、先週末の CMS Fun の時に、20分で1000アタックとかされてて、「BASIC 認証破られたのかな〜」と思ってたんだけど、アクセスログを見てたら xmlrpc.php への Brute Force アタックだった。
早速 .htaccess で xmlrpc.php もBASIC認証設定しました。(xmlrpc.php 自体を BASIC 認証する意味はあまりないのですが、なんか今後、使う時があればと思って、BASIC 認証にしました。)
WordPress のルート・ディレクトリで設定している .htaccess
.htpasswd ファイルの作成方法は Google 検索するといろいろでてきます。パスワードファイルへのパスは、HTML で記述するパスではなく、サーバー上のパスとなるので、記述方法が違います。レンタルサーバーのマニュアルに作成方法が載っているかもしれないので、そちらを参考にしてください。
# wp-login.php basic auth AuthUserFile [パスワードファイルへのパス]/.htpasswd AuthGroupFile /dev/null AuthName "WordPress" AuthType Basic <Files ~ "(wp-login.php|xmlrpc.php)$"> require valid-user </Files>
/wp-admin/に設置している .htaccess
AuthUserFile [パスワードファイルへのパス]/.htpasswd AuthGroupFile /dev/null AuthName "WordPress" AuthType Basic require valid-user
ちなみに concrete5 はデフォルトで IP ブロック機能とかついていたりします。concrete5 は良い CMS ですね〜(ステマ)
以上