今日、起きて眠たい目をこすりながら作業していたのですが、サーバへの負荷が最高潮に達していて、なんぞ。今回は、その報告と、対策方法を書いていきます。
DDoS攻撃を受けている。
本日(2017/03/13)、サーバへの負荷が最高潮に達しました。
$ top
コマンドで、どのプロセスが悲鳴を上げているのが見ていきます。
すると、一番上の方に、 httpd
のプロセスがズラッと並びます。月曜日の落ち着いた午前中、検収中でもデプロイ前でもあるまいし、そんなことあるかなと思って、続きまして、 httpd のログを見ていきます。
# tail -f /var/log/httpd/*access.log
191.96.249.53 - - [13/Mar/2017:12:26:21 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:21 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:21 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:21 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:21 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:12 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.53 - - [13/Mar/2017:12:26:21 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:23 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.53 - - [13/Mar/2017:12:26:21 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:23 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:23 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:24 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
191.96.249.54 - - [13/Mar/2017:12:26:14 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370
すると、 191.96.249.53
と 191.96.249.54
から、ぞくぞくと、 /xmlrpc.php
への POST
アクセスが連打されていますね。
調べると、チリからのアクセスでした。
まずファイヤウォールの設定
xmlrpc.php
が何かを調べている暇はないので、 firewalld
で、アクセスを遮断します。
/etc/firewalld/zones/public.xml
を編集して、
<rule family="ipv4">
<source address="191.96.249.0/24"/>
<reject/>
</rule>
をルールとして追加。そして、 firewalld をリロードします。
# service firewalld reload
これで、 Apache への DDoS が攻撃が止まったことを、
# tail -f /var/log/httpd/*access.log
で確認します。問題なさそうです。不要なアクセスがピタッと止まりました。
続いてxmlrpc.phpの設定
上記の対策は、 191.96.249.0/24
へのアクセスを遮断しただけなので、根本的な解決にはなっていません。
続いて、 /xmlrpc.php にアクセスがそもそもDDoS攻撃ができないように対策をしなくてはいけません。
xmlrpcとは
調べてみると XML-RPC
という技術を使って、 WordPress は WordPress API
というリモートで操作が可能となっているようです。
ピンバックとかも、これで可能になるようですが、今回のブログでは全く必要のない機能でした。
xmlrpc.phpへのアクセスを遮断
Apache2 の設定に、
<Files "xmlrpc.php">
order deny,allow
deny from all
</Files>
を加えることで、二度とアクセスできなくしてしまいましょう。
一応、確認してみます。
ちゃんと Forbidden
がでますね。設定も問題なさそうです。
まとめ
xmlrpc.php は通常の WordPress 運用では必要ないので、アクセスできないようにしておきましょう。
この記事を読んだあとに
- 書いた人のツイッター – Follow me!
- 『売上を3年連続20%成長させた18の秘訣』
- 運営しているアクションゲーム