WordPress xmlrpc.phpへのDDoS攻撃対策

by ysawa

今日、起きて眠たい目をこすりながら作業していたのですが、サーバへの負荷が最高潮に達していて、なんぞ。今回は、その報告と、対策方法を書いていきます。

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.53191.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 運用では必要ないので、アクセスできないようにしておきましょう。

この記事を読んだあとに

ysawa

エヌ次元株式会社代表取締役
東京工業大学工学部計算工学専攻卒業
符号理論の応用に関する研究
在学中よりフリーランスエンジニアとして活動
「持続可能な設計」を得意領域とする
会社設立後も設計からアプリ制作や
Webサイトのコーディングまでを幅広く担当
セキュリティスペシャリスト

 このブログについて

このブログは、プログラマやエンジニアのためになる情報を垂れ流しています。
ちょっと異端的なものも含まれているかもしれません。