WordPress の DDoS 攻撃対策

WordPress を使い始めて二年半になりますが、Jetpack からよく「ダウンしています」と通知が来ます。たぶん前にも書きましたね。毎度 CPU 使用率とディスク I/O が高まり、とうとうさくらの VPS が CPU リソース制限を受けるまでになってしまいました。

そこで調べたところ、いくつかのファイルを無効化すると改善される可能性がありそうなので、これを行って様子見することにしました。

スポンサーリンク

XMLRPC 無効化

まず、xmlrpc.php を無効化します。ピンバック機能とかに使われるらしいですが、たぶん使ってないと思うので。

これを有効化してると DDoS の踏み台にされるらしいので、被害も拡大します。

SiteGuard

プラグインの機能の中に [XMLRPC 防御] というのがあって、それをピンバック機能ではなくXMLRPC 自体を無効化するよう設定を変更すれば、簡単に行けるのでは…?(わからない)

その他にもいくつか方法があったので、それもメモっておきます。

.htaccess でアクセス禁止

どちらにせよ Apache を通すことになりますが、.htaccess で xmlrpc.php へのアクセスを禁止する方法です。

これだとすべてのアクセスを弾くので、自分の IP アドレスだけ承認するときは allow from xxx.xxx.xxx.xxx と追記する必要があります。

.htaccess でリダイレクト

また、アクセスを禁止するのではなく、トップページにリダイレクトするという方法もありました。サーバ負荷的にはこちらのほうが良いらしいです。

mod_rewrite.c が有効になっていないと動かないので、Apache の設定も変更します。

ファイアウォールで IP アドレスを遮断

発信元の IP が特定できれば、それごと遮断することができます。

/var/log/httpd 下に Apache のログは溜まっているので、xmlrpc.php にアクセスしているログを抜き出します。

ログを見ると IP が特定できます。今回は少なかったのでやりません。

wp_cron.php 無効化

メール投稿、予約投稿、サイトマップなどに使われる PHP ファイルですが、サイトにアクセスがあると毎回起動するために、アクセス数が増えるほど処理が重くなっていくらしいです…PV が増えすぎると処理過負荷になって PV が減るってことか…

で、これを単純に無効化しただけだと、予約投稿とかも止まってしまうので、wp_cron を止めつつ、CentOS 7 側で cron を設定します。

まず、WordPress の最上位ディレクトリ内の wp-config.php を編集します。

次に、PHP のパスを調べます。

wp-cron.php を一定時間ごとに叩くように cron を設定します。

ディレクトリの部分は環境に合わせて変更してください。

ちなみに、CentOS 7  にはデフォルトで cronie-anacron がインストールされていて、時間ぴったりにジョブを実行しないらしいです。もし、時間にシビアな実行が求められるなら、cronie-anacron をアンインストールし、cronie-noanacron を入れるといいようです。

最後に

これでアクセス状況が改善されると本当に嬉しい。

(参考)

スポンサーリンク