Pingback DDoSアタックを受けてWordPressが500エラーを出した時の対処法 

先日、エックスサーバーで運営しているWordPressのサイトが断続的に500エラーになってしまい、サイトにアクセスできないというトラブルにみまわれました。今回は、そのトラブルを解決するまでの一連の流れをまとめます。

基本情報

使用サーバー:エックスサーバー
契約プラン:X10プラン
運営サイト:WordPress4.2 2つ

ある日突然の500エラー

ブログを更新しようとしていたところ、こんな画面になってしまいました。

500エラー。
m_150512-0018

500 Internal Server Error CGIやPHPなど内部参照におけるエラーの為、目的のページが表示できなかったことを意味します。
以下の様な原因が考えられます。

断続的に発生する場合
・CGIの負荷が大きい(CGIプロセスが多数動作している)。
常に発生する場合
・CGIのパーミッション設定に誤りがある。
・CGIのソースコードに問題がある。
・.htaccessの記述に誤りがある。

何回かリロードすると直ったりもしたので、どうやら今回は「断続的に発生する場合」パターンの模様。

いや、でも、CGIの負荷が大きいっていっても、WordPress2つだけだし、特殊なテーマやプラグインを使用しているわけではないし、アクセスだって大したこと無い(3000PV/日)し、いったい何が原因だ?と、正直さっぱりわかりませんでした。

とりあえず、エックスサーバーのヘルプに聞いてみることに。すると。

「負荷が多すぎて、アカウント単位でリソース制限をかけているかも。次のような対策をして、内部を見なおしてみてね☆(以下略)」

的な回答を得ることができました。エラーログを見てみても、確かにResource temporarily unavailableとのこと。うーん、やっぱり内部的な問題なのかぁ……。

原因は何だ!

ってことで、トラブル発覚前日に更新した、重めのブログ記事(っていっても87000文字くらい)をいくつかのページに分けて様子をみることに……。

m_150512-0018

はい、ざんね~ん!!!

その後、テーマ・プラグインを変えたり、停止したり、パーミッション設定を見なおしたり、.htaccessを見なおしたりいろいろやってみたのですが……

m_150512-0018

無情に表示される哀しみの500。

この時期は一日中トラブルの事で頭がいっぱいでした。

もう一度冷静に考えてみることに。

そもそも、同時アクセス1000とかいっても、びくともしなかったエックスサーバーのサービスでリソース制限かけられるって、普通じゃない。何か新しいものを追加したり、変更を加えたわけでもないのに、なぜ突然負荷が大きくなってしまったのか。

また、エラーが起こる時間もアクセスが落ち着いているはずの朝方に集中している。これも絶対におかしい。

果たして本当に、内部的なエラーなのだろうか?

というわけで、今まで確認していなかった、アクセスログを確認してみることに。

m_150515-0001

「あっ……(察し)」

ポストアタック、されてました。

1時間におよそ6000回。こんなのが一日数時間にわたって繰り返されていたら、そりゃぁ制限されますよ。えぇ。すみません。

いわゆるDDoS Attacksってヤツですね。中でも今回はWordPressの機能であるピンバックを悪用するパターンの攻撃。私はその踏み台に利用されていました。

どう考えても「これだ!」という原因がわかったので、早速、以下の様な対策をとりました。

★追記★
2015年5月19日から、エックスサーバーが
・WordPressの「XML-RPC」機能に対するセキュリティ向上を目的とした国外IPアドレスからのアクセス制限
・『XML-RPC API アクセス制限』機能追加
サービスを開始しました。
エックスサーバーをお使いの方は、下記の設定を行うことなく、
初期設定のまま今回のアタックを防ぐことができます!やったね!
(あと半月早ければッ!!!!)
(対策をされていないサーバでWordPressを運営されている方は、参考にしてみてください)
  • ピンバックを無効にするプラグイン「Disable XML-RPC Pingback」を有効化した。
  • サーバ側の設定パネルで、該当IPのアクセス拒否を行った。
  • .htaccessに、xmlrpc.phpへのアクセスを無効にする文言を記述した。

私はダッシュボードからしか投稿しないので、アクセスそのものを無効にしました。外部アプリからの更新や、Jetpackプラグインを使用している方は、アクセスを拒否または許可したいIPを別途指定してあげるといいと思います。

※今回のアタックは「WordPressの標準機能」を利用しているので、最新版を使っていても、ログイン制限をかけていても、管理画面でピンバックを不使用にしていても、関係ありません。ピンバックの機能そのものを切るプラグインの使用や、.htaccessの書きかえが必要です。
(エックスサーバのように、サーバ管理会社側で対策をとっている場合もあります)

対策後、500エラーはでていません。また、エックスサーバーのサポートにも連絡&対策の確認をしてもらい、無事解決となりました。

長かった……。

まとめ

エラーに気づいてから解決するまでの数日、本当に苦労しました。

解決した今でも、踏み台にされ、人様に迷惑をかけていたのだと思うと、非常に腹立たしいし、申し訳ない気持ちでいっぱいです。共有サーバなので、同居している人にも迷惑をかけてしまったかもしれません……。

もしサーバーが落ちない程度に利用されていたら、ずっと気づかないままだったかも。はぁ。恐ろしい。

やっぱりレンタルブログにしようかな……と、ブログの今後を考えるキッカケとなる出来事でした。もし、対策が取られていないサーバでWordPressを運営している方がいたら、私のようになる前に、対策を取ることを強く強くおすすめします。




エックスサーバーさんありがとうございました。以上、sakimitamaでした!