前々回にwp-login.phpへのアタックのネタをやってから、過去最高のアクセス数が出た!というところまでは良かったのだけど、アタックまで増えてしまったw
という事で一気に制限しちまおうと思ったのでIPアドレスの抽出作業から始めた。
今回の作業はユーザー権限でできるので是非やろう。
cat /var/log/httpd/access_log-20130819 /var/log/httpd/access_log-2013082[0-4] | grep wp-login.php | awk '{ print $1}' | sort | uniq -c | sort | awk '{ print $2 }' > ip.txt
こんな感じで、IPアドレスまたはホスト名だけ引っこ抜いて、ip.txtというファイルに記述してやる。
アクセスログのファイル名は各環境に合わせて変えてください。
ユーザー権限でできるって書いたけどアクセスログが見れるレンタルサーバーじゃないとできないなあ。
.htaccessで使うためにIPの先頭にdeny fromを挿入する。
cat ip.txt | sed -e 's/^/deny from /g' > ip2.txt
これでリストは出来上がった。このリストに上がってるのはwp-login.phpにアクセスしてきたホストだから、まるっとアクセス制限してもいいんだけど、一応JPドメインは外しておいた。
それとテストしたりしてて自分のIPアドレスが入ってる場合もかもしれないので、ちゃんとチェックしよう。
自分のIPアドレスが入ってたらサクじょー。
あとは.htaccessをviで編集するなり、そのままコピペしたり、catの>>で追記したりとかで完了。
うまく動作してたらレンタルサーバーの場合はForbiddenの表示になるはず。
テストで自分のIPアドレスも入れてみてうまく動作しているかチェックしよう。
ちなみにたけけんの環境で、8月19日から24日途中までのwp-login.phpへのアクセスがあったアクセス元IPアドレスは500個以上、実際のアクセスはもっともっと多いので、同じ踏み台から何度もやってきてるみたい。
踏み台になっているIPアドレスを制限するということでセキュリティを上げることにもなるかなーなんて思います。
何個かホームページを運営してる人だったら、このアクセス制限.htaccessはサーバーのドキュメントルートに設置して、前々回にやった自分のIPアドレスだけを許可する.htaccessファイルをワードプレスが入ってるドキュメントルートに設置します。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR] RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ RewriteCond %{REMOTE_ADDR} !^111\.222\.333\.444$ ←自分のIPアドレスに変えよう。 RewriteRule ^(.*)$ - [F] </IfModule>
とりあえずこんな感じです。
ここからはroot権限があるサーバーの話になる、というか自分の環境で起こった話w
403エラーの画面に飛ばすに何故かApacheテストページになってしまうという現象がおこっていて、ちょっとググっていたら/etc/httpd/conf.d/welcome.conf
の記述が問題らしい。
たけけんはコメントアウトしてやりました。
てな感じで。
参考サイト
Read it later.
.htaccessで、IPによるアクセス制限をかけたら、「Apache 2 Test Page」が表示される。