数日前にWordPressを狙ったDDos攻撃を受けてサーバがダウンしていました。
とりあえず復旧したので備忘録として対策をまとめておきます。
問題の検知
サイトにアクセスするとWordPressの「データベース接続エラー」の表示が発生。
AWSのEC2でInstanceの状況をチェックしたところ、Status Checks>Instance Status Checksに「Instance reachability check failed」のエラーが発生していた。
また、AWS>EC2>Instance>Instance Setting>Get System Logを確認
Out of memory: Kill process 27074 (httpd) score 30 or sacrifice child
どうやらメモリ不足?で落ちているっぽい?
暫定対策
AWS>EC2>Instance>Instance Stateで、restartをすると、Instance Status Checksのエラーは消えたがWebへのアクセスはできず。
更に、Stop&Startをした結果、一瞬だけアクセス可能になるが1分ほどで再度アクセス不可能な状態に。
ログを確認するために、サーバにsshを試みるも、高負荷によるタイムアウトでログインできず。
しょうがないので、いったんEC2のInstanceをStop。
Instance Setting>Change Instance Typeで、一時的に容量を拡大して、Instanceを再起動した結果、Webもsshもアクセスできるようになる。
原因調査
sshにサーバに入ってログを確認
/etc/httpd/logs/error_log
zend_mm_heap corrupted
Cannot allocate memory: fork: Unable to fork new process
などのログが発生していた。やはりサーバのメモリを使いきっている模様。
/etc/httpd/logs/access_log
185.103.252.170 – – [27/Apr/2016:23:41:28 +0000] “POST /xmlrpc.php HTTP/1.0” 500 263 “-” “Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)”
アクセスログを見ると、ロシア、ウクライナ、フランスなどから、「xmlrpc.php」に対して大量なアクセスを受けていることが判明。
どうやら、リモートで記事を投降するための、「xmlrpc.php」を悪用したDDos攻撃を受けていた模様。
対策1:.htaccessアクセス制限
リモート記事投稿は使っていいないため、xmlrpc.phpへのアクセスをブロックすることに。
/var/www/html/.htaccessに追記
<Files "xmlrpc.php">
order deny,allow
deny from all
</Files>