ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

WordPressが重くてサーバが落ちる件、ブルートフォースアタック対策で正常化

      2014/09/19

スパイク状の集中的なトラフィックでサーバが落ちるように

先月に入ってからたびたびサーバが無応答の状態に陥るようになりました。

本ブログが利用するさくらVPSのステータスを確認したところ、たびたびスパイク状の極端に集中したトラフィックがあり、それを契機に無応答になっていることが分かりました。

Apacheのアクセスログを見ると、WordPressのxmlrpc.phpにアクセスが集中していて、ブルートフォースアタックであることが判明。

$ tail -100 /var/log/apache2/access.log

海外のIPアドレスからのアクセスを制限

xmlrpc.phpに対して、海外のIPアドレスからアクセスできないようにアクセス制限をかけることに。

新手のWordPressを狙うパスワード総当り攻撃(ブルートフォースアタック)に注意 « パソコンやホームページに関するITの部屋

こちらから.htaccessのディレクティブ用の国内IPアドレスリストをダウンロード。

IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI’s

xmlrpc.phpと同階層にある.htaccessに以下のように追記。

<Files ~ "^(wp-login\.php|xmlrpc\.php|wp-comments-post\.php)$">
order deny,allow
deny from all

allow from 1.0.16.0/20
.
. (省略)
.
</Files>

xmlrpc.phpのほか、ログインに使うwp-login.php、コメントを書き込むときに使うwp-comments-post.phpにも適用し、海外のIPアドレスからのアクセスを拒否するようにしました。

アクセス制限をかけるのはログインやリモート投稿、コメント投稿のための機能のみなので、設定後も海外のIPアドレスからの閲覧には支障は生じません。

僕の場合は、Apacheのサイト別の設定「/etc/apache2/sites-enabled」の当該ディレクトリの設定を「AllowOverride None」にしていたので、.htaccessの内容を反映させるために「AllowOverride Limit」に変更し、サービスを再起動しました。(再起動は必要ない?)

$ sudo service apache2 restart

攻撃が弾かれてサーバが落ちなくなった

対策後、しばらくしてからサーバのステータスを確認したところ、xmlrpc.phpなど制限をかけたページへの海外のIPアドレスからのアクセス、即ち攻撃は弾かれ、スパイク状の集中的なトラフィックも生じなくなりました。以降快調です。

xmlrpc.phpへの攻撃自体は依然として来ていると思うんですが、それをApacheで弾いても負荷軽減になるんですね。

sakuravps 14 09 18

Apacheを通さないため、iptablesで対処せよ、というアドバイスをいただきました。特定のファイルへのアクセスだけiptablesで止められたりするんでしょうか。

 - Ubuntu, WordPress, ブログ運営