【wordpress】ブログに504 Gateway Time-outで繋がらない!原因はDOS攻撃だった

先日ブログを編集中に突然サイトに繋がらなくなった。いくらページを更新しても504 Gateway Time-outのエラーが出てしまう。

504_Gateway-timeout

調べてみると504 Gateway Time-outとはクライアントからのリクエストを受けたサーバが更に別サーバにリクエストを送信した際に、別サーバからの応答が一定時間以内に返って来ていないことを表しているのだそう。

なんでだ?回線の調子が悪いのか?このままサービス停止が続くとアフィリエイトにも関わるぞ..と焦りながら解決方法をひたすら検索。

まずはサーバーの基本情報を確認

このサイトは自宅サーバーで運用している。

OSはUbuntu ServerでNginxとphp-fpm(FastCGI Process Manager)、MYSQL、wordpressでサイトを構築している。

最初に試したこと

回線の調子が悪いならTimeoutする時間設定をいじってやれば良いのではと思い同じ症状が報告されていたブログの解説記事に従ってphp-fpmとnginxの設定ファイルを書き換えてみるも効果なし。

php-fpm+nginxで「504 Gateway Time-out」が出た時の対処法

なんでだろう..。それよりさっきからサーバーのファンが唸ってるのが気になる

原因はDOS攻撃だった

ここでサーバーの運用に協力している別のメンバーが原因はDOS攻撃だと気づく。

DOS攻撃とは..?

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

要するにサーバーに捌ききれないほどの大量のデータを送りつけて意図的に通信障害を起こすということ。

さっきからファンが唸っていたのもサーバーへの過剰アクセスによってCPUが悲鳴をあげていたからか..!

大量のアクセスログ

nginxのアクセスログを確認してみるとそこには大量のアクセス記録が。

これがアクセスログの一部。191.96.249.53以外にも複数のipアドレスから攻撃を受けていた。

191.96.249.53 - - [26/Aug/2016:03:23:52 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [26/Aug/2016:03:23:54 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [26/Aug/2016:03:23:54 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [26/Aug/2016:03:23:54 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [26/Aug/2016:03:23:56 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [26/Aug/2016:03:23:58 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [26/Aug/2016:03:23:59 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [26/Aug/2016:03:24:00 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
.......
....
(以下略)

ログを見てみるとxmlrpc.phpに大量のPOSTを試みていることがわかる。このxmlrpc.phpは標準の管理画面以外からも記事の投稿ができるようにするためのAPIを提供している。wordpressのアプリで投稿が編集できるのはこのAPIを使っているからだ。

おそらく攻撃者はxmlrpc.phpにアクセスして総当たりでパスワードを割り出し乗っ取りを行おうとしていたのだろう。早く気付けて幸運だった。

とりあえずの対処法

初めてのことでどう対処すれば正解なのか分からなかったが攻撃を受けているのはxmlrpc.phpなのでそこへのアクセスをとりあえず全て遮断すれば良いだろうと考えた。

location = /xmlrpc.php {
    deny all;
    access_log off;
    error_log off;
}

この設定でxmlrpc.phpへのアクセスを遮断できる。これをnginxのserverコンテキストが含まれる設定ファイルに書き込めば良い。

自分の環境では/etc/nginx/sites-available/defaultが設定ファイルだった。

server{

  location = /xmlrpc.php {
    deny all;
    access_log off;
    error_log off;
  }

}

このようにserver{…}で囲われた中に書き込む。

まとめ

とりあえずこれらの対応でブログは元どおりアクセスできるようになった。(弊害としてwordpressアプリからの編集ができなくなってしまった)

今回の件で対策しないことの恐ろしさを知りセキュリティに関する不勉強さを反省した。自分のサーバーが攻撃されることなんてないだろうと考えていた。

これはブログを運用している人なら誰にでも起こりうることなので注意してもらいたい。

特に自宅サーバーな人は要注意だ。

より安全な対処法が分かれば随時記事にする予定。最後までお読みいただきありがとうございます。