access_logを眺めていたら、世界中からアタックされていたと言う話

security WordPress

security
以前アタックを受けてた事が発覚してから、定期的にaccess_logをチェックするようにしていたら、
思った以上に頻繁にアタックを受けている事がわかった。
これまでもあったんかなー。

どんな調査をしていたかといえば、access_logの中で
自分以外では本来アクセスしそうにないページにアクセスしているログを抽出した。
こんな感じ。
[code lang=”bash” gutter=”off”]
$ sudo grep -v <自宅マシンのIPアドレス> /etc/httpd/logs/access_log|awk ‘{gsub("[?&].*", "", $7); gsub(".*/", "", $7); print $7}’|grep \.php|sort|uniq -cd|sort -nr|head
4330 wp-login.php
374 xmlrpc.php
302 wp-cron.php
88 wp-comments-post.php
40 index.php
30 dl-skin.php
25 upload.php
25 admin-ajax.php
24 download.php
10 content-summary.php
[/code]
左の数字はアクセス数、右のファイル名は直接アクセスされたページ。
wp-login.phpなんか、モロにアタックされてる感じだよね。
特に上位3つはWordPressでは頻繁にアタックされるページらしい。
と、言うわけで上位3ファイルと
セキュリティ上アクセスされない方が良さそうな「wp-config.php」は
.htaccessでアクセス拒否設定を行う。
ただし、wp-login.phpとwp-cron.phpは自宅マシンとElastic IPのアドレス、localhostだけはアクセス可能にしておく。

[code lang=”xml”]
#アクセス制限
Options -Indexes
<files ~ "(wp-config.php|xmlrpc.php)">
order deny,allow
deny from all
</files>
<files ~ "(wp-login.php|wp-cron.php)">
order deny,allow
deny from all
allow from <自宅マシンのIPアドレス>
allow from <Elastic IPのアドレス>
allow from 127.0.0.1
</files>
[/code]

さて、よからぬ事を考える人はあの手この手でアタックをしかけてくるだろうから、
そう言う人はIPアドレスでフィルタリングしておきたい。
いちいちaccess_logを見るのは億劫なので、
ログイン時に怪しいアクセスをしてきたIPアドレスを自動で表示するようにしてみた。
具体的には「xmlrpc.php」「wp-login.php」「wp-cron.php」の3ファイルに
複数回アクセスしているIPアドレスをaccess_logから抽出するようにした。
こんな感じ。
[code lang=”bash” gutter=”off”]
$ sudo grep -v <自宅マシンのIPアドレス> /etc/httpd/logs/access_log|grep "xmlrpc.php\|wp-login.php\|wp-cron.php"|tail -1000|awk ‘{print $1}’|sort|uniq -cd|sort -nr|head
604 46.119.125.xxx
333 195.154.250.xxx
12 52.193.226.xxx
2 103.28.192.xx
[/code]

後はここに出てきたIPアドレスをフィルタリングするように設定する。
フィルタリングは.htaccessでやるとサーバ負荷になってしまうので、
ここいら辺を参考にAWSのネットワークACLで設定する。

AWSのEC2+ELBで、ロードバランサへのアクセス時点で特定IPからのアクセスを弾く

こうやってせっせとフィルタリングした結果、
サイトのアクセス数が半分になってしまったと言うオチ。
orz…

コメント

タイトルとURLをコピーしました