[WordPressメモ]結構アタックがあるのでプラグインでの防御だけでなくウェブサーバ側でもアクセス制御したほうがいいと思う
ちゃんと確認してみると結構毎日の様に激しくWordPressにログインアタックされていたりします。
Crazy Bone (狂骨)
不正アクセスの痕跡を確認するには、Crazy Boneというプラグインを入れるとよく分かります。下記の記事で紹介しています。
WordPressにログイン履歴プラグイン『Crazy Bone』を入れてみた結果 | KUMA TYPE
Captcha
それで、コメントスパム対策用にCaptchaと言うプラグインを入れています。コメントするときに簡単な四則演算を要求されるようになるプラグインです。それをログイン画面にも表示するようにしています。最初の画像の下のほうがそれです。
これで、ある程度は不正アクセスを防げていると思います。
しかし、下の画像のように不正アクセスの痕跡が下の場合は13ページですが、多い時には数十ページにわたって残っています。1日でです。
いくら不正アクセスを防ぐことが出来ても、これだけ短時間にアタックされるとサーバーに負荷がかかってしまいます。
そういうわけで、
Limit Login Attempts
Limit Login Attemposというプラグインを入れてみました。これはアクセスに指定回数失敗するとしばらくログインできなくなるというプラグインです。同じようなプラグインに「Login LockDown」というプラグインがあります。
最初の画像に、ERRORと出ていると思いますが、これは指定回数ログインに失敗したので3分待ってから再試行しろとエラーが出ているところです。テスト用に3分と設定していますが、デフォルトは20分くらいだったと思います。
これで、対策は万全です。
実際ロックアウトのメールが来ます。
しかし、ログイン履歴にはやっぱり数十ページ分のアクセスログが残っていました。
考えてみたのですが、Captchaをログイン画面にも表示すると、そもそもログインのエラーの前にCaptchaのエラーに引っかかってしまって、何度も再試行しているのかもしれません。
不正アクセスの防御という点では大成功ですが、サーバーへの負荷対策は不十分です。
また、自分で、わざとログインエラーをくりかえてみたのですが、けっか、「Limit Login Attempos」の場合、ロックされた状態でも、ログインの試行自体は出来ます。エラーになりますけど、試行自体はできるわけです。アタックを減らすことは出来ません。やっぱり負荷対策としては不十分です。
それに、botネットのように大量のIPアドレスを使ってログインアタックされた場合はやっぱり負荷がかかるわけです。
やっぱり、Webサーバレベルでのアクセス制御を/wp-admin/やwp-login.phpに対して行ったほうがより安全でサーバーも安定動作が期待できると思います。
特に共用レンタルサーバーの場合、負荷がかかると追いだされたりしますから、対策するに越したことはないです。
apacheの場合は、以下のようにしてwp-login.phpを自分のリモートホストのIPやアドレス範囲を設定しています。
<Files "wp-login.php">
order deny,allow
deny from all
allow from deny from nnn.nnn.nnn.nnn/11
</Files>
nginxの場合は、/etc/nginx/conf.d/default.confに以下のようにしてwp-login.phpと/wp-admin/へのアクセスを制限しています。proxy_passの設定は、これがないとurlにアクセスするとファイルがダウンロードされしまうので必要なのですが、自分でもよくわかってないのです。(‘∀`;)
アクセス制限したurlにアクセスするとファイルがダウンロードされてしまうので、しばらく悩んでつけたら上手く行ったので、こうしています。proxy_passの部分は環境によって変わってくると思います。nginxの設定は簡単なようで難しかったりするので一度ちゃんと勉強しないといけないなーと思っています。
location ~* /wp-(admin|login.php) {
allow nnn.nnn.nnn.nnn;
deny all;
proxy_pass http://unix:/var/run/nginx.sock;
}
そんなわけで、上手くアクセス制御出来たので、これで様子を見てみたいと思います。
今回のnginxのアクセス制御の設定がうまく行かなくて(単にdenyとallowの設定方法を書いてあるサイトはいっぱいあるのですが)調べている時に見つけたのが下の記事ですが
iptabelsのburstと同じように同一IPからのアクセス回数を制限する機能があるみたいなので、それも面白そうです。固定IPの人ってそんなにいないと思うので、頻繁にIPアドレスが変わる環境の人は、下記の方法が使えそうです。
Block bruteforce attack on WordPress wp-login.php with Nginx only
タグ : apache, nginx, WordPress, WordPressメモ