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

security

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

どんな調査をしていたかといえば、access_logの中で
自分以外では本来アクセスしそうにないページにアクセスしているログを抽出した。
こんな感じ。

$ 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

左の数字はアクセス数、右のファイル名は直接アクセスされたページ。
wp-login.phpなんか、モロにアタックされてる感じだよね。
特に上位3つはWordPressでは頻繁にアタックされるページらしい。
と、言うわけで上位3ファイルと
セキュリティ上アクセスされない方が良さそうな「wp-config.php」は
.htaccessでアクセス拒否設定を行う。
ただし、wp-login.phpとwp-cron.phpは自宅マシンとElastic IPのアドレス、localhostだけはアクセス可能にしておく。

#アクセス制限
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>

さて、よからぬ事を考える人はあの手この手でアタックをしかけてくるだろうから、
そう言う人はIPアドレスでフィルタリングしておきたい。
いちいちaccess_logを見るのは億劫なので、
ログイン時に怪しいアクセスをしてきたIPアドレスを自動で表示するようにしてみた。
具体的には「xmlrpc.php」「wp-login.php」「wp-cron.php」の3ファイルに
複数回アクセスしているIPアドレスをaccess_logから抽出するようにした。
こんな感じ。

$ 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

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

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

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


この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL