Nginxで運用しているWordPressがDos攻撃された時の対処法

      2017/01/29


先日、このブログが急にアクセス不能になりました。表示された画面には504 error、Bad gatewayの文字が。


いろいろ原因を調べようとgoogle検索していたら「まずはアクセスログを調べてみるべし」というアドバイスにたどり着きました。

ということで、以下のコマンドでアクセスログを調べてみました。

sudo cat /var/log/nginx/access.log

すると、このようなログが1秒間に大量に吐き出されていました。

191.96.249.xx - - [dd/Dec/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 
191.96.249.xx - - [dd/Dec/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0"
191.96.249.xx - - [dd/Dec/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0"
191.96.249.xx - - [dd/Dec/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0"
191.96.249.xx - - [dd/Dec/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0"
191.96.249.xx - - [dd/Dec/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0"

このログについて調べてみると、XML-RPCというサービスにPOSTしまくっていることがわかりました。

このXML-RPCとはMarseditなどの外部アプリがアクセスするために公開されているサービスです。

なぜかここに大量にアクセスされているわけです。調べてみると、これはDos攻撃というものだとわかりました。

こんな零細ブログに攻撃してくるなんて、、、。

DoS攻撃(ドスこうげき)(英:Denial of Service attack)は、情報セキュリティにおける可用性を侵害する攻撃手法で、ウェブサービスを稼働しているサーバやネットワークなどのリソース(資源)に意図的に過剰な負荷をかけたり脆弱性をついたりする事でサービスの正常な動作を侵害する攻撃を指す。

DoS攻撃 - Wikipedia

試行錯誤してなんとか解決できたので、今回はDdos攻撃の対策を紹介します。

XML-RPCへのアクセス制限

なんといっても効果的な対処法はアクセス制限です。
ということで、nginxの設定ファイルに以下のように記載します。

通常、nginxの設定ファイルは/etc/nginx/nginx.confにあります。

ここでnginx.confファイルのserverブロックに以下を記述します。

<server> {
...省略...
# xmlrpc.php攻撃対策
location = /xmlrpc.php {
deny all;
access_log /dev/null;
error_log /dev/null;
}
...省略...
}

ちなみにnginxの設定はこちらのサイトが勉強になります。

Nginx設定のまとめ - Qiita

「MarsEdit」や「するぷろ」など外部アプリを使用しない人はこの設定がベストだと思います。

しかし、僕のようにモブログする人には、外部アプリから一切の接続ができないのは不便で仕方ありません。

プラグインを設置する

実は、Dos攻撃にはもっと悪質なDDos攻撃というものがあります。こちらは、自分のサーバーを踏み台にされて別のサーバーを攻撃してしまうというもの。

これはWordPressのピンバックという機能を利用しています。

DDos攻撃の対策には、Disable XML-RPC Pingback — WordPress PluginsというプラグインをインストールすることでXML-RPCのピンバック機能のみを無効にしてくれます。

僕はこちらのプラグインをインストールしました。

IPアドレスを遮断する

xmlrpcへのアクセスを制限しても、Dos攻撃中のサーバーへの負担は大きいままなのでページは重たいままです。なのでそもそものアクセスも遮断したいと思います。

具体的なアプローチは、IPアドレスを特定してiptablesでアクセスを遮断するというものです。

もう一度、アクセスログを調べてみて、アクセス元のIPアドレスを調べます。

sudo cat /var/log/nginx/access.log

僕の場合、
191.96.249.xx - - [dd/Dec/2016:YY:MM:SS +0900] “POST /xmlrpc.php HTTP/1.0”

というログが残っていたので、191.96.249.xxからのアクセスを遮断しました。

# 遮断したいIPを設定します
 sudo iptables -I INPUT -s <制限したいIPアドレス> -j DROP

# 設定した内容を保存します
 sudo /etc/init.d/iptables save

# 設定した内容を反映します
 sudo /etc/init.d/iptables restart

これで僕は自分のサイトにアクセスできるようになりました。

以下のサイトを参考にさせていただきました。

WordPress DoS/DDoS攻撃 (xmlrpc.phpへの大量アクセス) - ex1-lab

ただ、攻撃のたびにアクセス元のIPアドレスを調べて付け焼き刃的にアクセスを遮断するのもどうかと思います。

そこで、今後の対策としてiptablesの表記を「もし、1秒間に何回以上アクセスがきたら遮断」というように修正することを検討しています。

以下のサイトで勉強中ですが、対策が済んだら報告しようと思います。

» 「WordPressのxmlrpc.phpに注意」結果的にDDos攻撃受けサーバを何度も落とされた

さいごに

1日以上試行錯誤しましたが、とりあえず復旧しました。

レンタルサーバーでブログを運用しているといろいろと勉強になりますね。

今回参考にさせてもらったサイトを紹介して終わりたいと思います。

おすすめ記事

1
2016年買って良かったモノを紹介します!

2016年もあとわずか。毎年恒例の買って良かったモノシリーズ、2016年版を紹介 ...

2
英語ができなかった僕がバイリンガルになるまでの5つの英語上達プロセス

英語ができなかった僕がバイリンガルと呼ばれるようになるまでに経験した過程を5つに分けて紹介します。

 - WordPress ,