最近やたらとWordPressが攻撃されて500エラーになるので行ったセキュリティー対策まとめ

このサイトの運営にはエックスサーバーを利用しています。

僕はこのサーバーの最も安いプランを利用しているのですが、これがまたとても優秀で、これまで一度も500エラーを見たことはありませんでした。

先日たまたまバズがあって、現在の数倍アクセスがあったときも、全く平然と動作していたので、「ひと月たかだか1000円強で、こんな強いサーバが使えるのか!」と感動すら覚えました。

ただ、アクセスも落ち着いているはずの、ここ3、4日、何故か今までこのサイトで見たことがなかった500エラーを何度も見かけるようになりました。

それについて、自分なりに分析と対策を行ってみたので、その方法をまとめてみたいと思います。

スポンサーリンク
レクタングル(大)広告

500エラーが出るのはなぜか?

数日前、エックスサーバーで運営する自分のサイトで、初めて500エラー見ました。

500エラーとはこんなの。

500_internal_server_error

原因として表示されているのは以下。

断続的に発生する場合

  • CGIの負荷が大きい(CGIプロセスが多数動作している)。

常に発生する場合

  • CGIのパーミッション設定に誤りがある。
  • CGIのソースコードに問題がある。
  • .htaccessの記述に誤りがある。

今回の症状の場合、常に500エラーが出ているわけではなく、断続的に発生しているので、原因は「CGIの負荷が大きい(CGIプロセスが多数動作している)」ということになります。

ただ、先日バズった時に負荷が大きすぎて、そのときエラーが出るのはわかります。けれど、そのときは涼しい顔で正常動作していて、それよりアクセスがかなり落ち着いた今となって、500エラーが出るのは、ちょっと納得ができません。なので、アクセスが原因ではないと考えます。

それで、真っ先に原因として思いついたのが、先日記事を読んで「僕も何か対策をしないとな」と思っていた、こちらの攻撃。

WordPressのxmlrpc.phpに国外IPからDDoS攻撃を受けた時の対処法 | アフィリエイト野郎

WordPressにて、XML-RPCによる投稿を行う場合に必要なファイルでございますが、当サポートにて確認しました所、昨今当該ファイルへのアクセスによってDDoS攻撃の踏み台とするケースが急増しておるようでございます。

なんか最近、xmlrpc.phpに対するブルートフォースアタックが増えているようです。

ブルートフォースアタック
とにかく力技で、パスワードを辞書から総当たりで試して解読しようとする攻撃。

サーバーのログを調べてみる

上記の記事を読んで、エックスサーバーから1週間分のログを取り寄せてみました。(2GBくらいありました)

アクセスログの取得

その膨大なログから、以下のコードでxmlrpc.phpへのアクセスのみを抽出してみました。

すると18日頃お機に、知らないIPから、ブログエディターでの更新時などに使うxmlrpc.phpに対するPOSTが急増していました。

以下に一部のみを載せます。(30分だけ抜粋)

Oh..これはひどい。

そりゃ30分の間に、これだけxmlrpc.phpにPOSTされ続ければ、500エラーも出るかも。今回紹介する設定を行う最近まで、これがずっと(最近はもっとひどい状態が)続いていました。

当サイトの500エラーの原因が、これで確定したのかはわからないのですが(ほぼ確定とは思うけど)、この攻撃への対策を含めて今回行ったことを以下でまとめてみたいと思います。

xmlrpc.phpに対する攻撃への対策

xmlrpc.phpは通常、ピンバックを送るのに利用したり、ブログエディターなどのアプリからサイトを更新するために利用します。

この機能を利用した攻撃が流行っているらしいです。自分のサイトにもまさかここまで来ていると思っていませんでした。

簡単な対策

この攻撃に対する最も簡単な対策は、Wordpressインストールディレクトリにあるxmlrpc.phpを削除してしまうか、リネームしてしまうことです。

ただ、それを行うと以下のような不都合が生じます。

  • WordPressをバージョンアップするとファイルが復活する
  • もしかしたら、バージョンアップなどに不具合が生じるかもしれない
  • ピンバックができなくなる
  • アプリからのサイト更新ができなくなる

僕は、ブログをWindows Live Writerから更新していて、このブログエディターなしでは、もはや更新する気が起きないんです。ピンバックはしょうがないとしても、出来ればこの方法は取りたくないです。

自分のIP以外からのアクセスを遮断する

アフィリエイト野郎さんの記事では、xmlrpc.phpに来るアクセスは全てhttp://0.0.0.0/にリダイレクトしていましたが、僕は、ブログエディターで使いたいので、この方法は使えません。

なので、自分のIP以外からのxmlrpc.phpへのアクセスは全て拒否するという手法をとることにしました。(固定IPのプロバイダでないと意味がない方法です。)

その方法とは、.htaccessに以下の記述を追記することです。

xxx.xxx.xxx.xxx部分に、自分のIPを記入してください。自分のIPは、アクセス情報【使用中のIPアドレス確認】などから確認できます。

.htaccessファイルは、エックスサーバーの場合は、以下の場所にあります。

ドメイン/public_html/.htaccess

なお、編集には以下のことに注意してください。

  • 必ず.htaccessファイルをコピーしてバックアップを取ってから編集する
  • .htaccessファイルにあらかじめ書かれていることは消さない
  • 固定IPのプロバイダでないと、IPが変わって次回からは利用できなくなる
  • 外出先のIPからアプリなどを利用しての更新はできなくなる

このようにすることで、違うIPからxmlrpc.phpにアクセスしようとすると以下のように、403エラーでアクセスが遮断されます。

サーバーエラーが発生しましたと出る

自宅以外のIPからは利用できなくなりますが、もしxmlrpc.phpへの攻撃が原因なら、これでかなり負荷を軽減できるのではないかと思います。

ログイン画面と管理画面への攻撃をかわす

SiteGuard WP Plugin

あと、最近知ったSiteGuard WP Pluginで、ログイン画面と、管理画面への攻撃を防ぐ設定もしておこうと思います。

先程はxmlrpc.phpほどではないですが、一日4、50はwp-login.phpにも以下のような感じで、アタックは来ています。

とりあえずこのプラグインには、いろいろな機能があるのですが僕は以下の機能を利用したくて導入しました。

  • 管理ページアクセス制限
  • ログインページ変更
  • ログインロック

SiteGuard WP Pluginで、手軽に上記の設定が行えます。

管理ページアクセス制限

管理ページアクセス制限

管理ページ(/wp-admin/以降)に対する攻撃から防御するための機能です。ログインが行われていない接続元IPアドレスに対して、管理ページのアクセスを、404(Not Found)で返します。

とりあえず、不要な管理ページへのアクセスは、これで遮断します。

ログインページ変更

ログインページを変更する

ブルートフォース攻撃、リスト攻撃等の、不正にログインを試みる攻撃を受けにくくするための機能です。ログインページ(wp-login.php)の名前を変更します。

スクリプトなどによる、ログインページへの攻撃は、wp-login.phpにきます。その名前を変更してやって、本来あるべきファイルを、なくすことによって、攻撃をかわします。

変更したURLは必ずブックマークするか、メモを残しておきましょう。(設定後、Wordpressに登録してあるメールにも届きます。)

ログインロック

ログインロック

ブルートフォース攻撃、リスト攻撃等の、不正にログインを試みる攻撃を受けにくくするための機能です。特に、機械的な攻撃から防御するための機能です。

これまでは、Login LockDownを入れていましたが、とりあえずSiteGuardに一元化しました。

SiteGuardにはこのほかにも便利な機能がついています。それらの設定について詳しくは以下を参照してください。

参考 WordPressのセキュリティ系プラグイン『SiteGuard WP Plugin』が非常に便利すぎる | 佐賀でふらふり

負荷対策のためスパム対策も

これは今回行った対策ではなく以前行っていたものですが、負荷軽減対策としてかなり有効だったので、以下の方法も紹介しておきます。

Throws SPAM Awayプラグインをインストール

Throws SPAM Away

Throws SPAM Awayをインストールするだけで、それまで1万以上着ていたスパムを完全にシャットアウトすることができました。

詳しくは以下。

Wordpressのスパムコメント数を12812→0にした方法
こんなブログのコメント欄にも、それなりにスパムコメントがきます。 Akismetプラグインの統計情報によると、10月は1万28...

このスパムのシャットアウト効果は、現在も続いています。

スパムをシャットダウン

エックスサーバーの機能で外国からのコメントを遮断する

プラグインで、スパムをシャットアウトできたとしても、wp-comments-post.php.phpにスパムアタックはきているわけで、その負荷を軽減するためにも、外国からのコメントは制限してしまいます。(スパムのほぼ100%は外国から)

エックスサーバーには、その機能があります。以下に設定方法など詳しく書かれています。

エックスサーバーユーザーならスパムをシャットアウトするのは超簡単
先日、あるプラグインを使用してWordpressのスパム投稿数をゼロにすることができました。 これで、スパムによるサーバーへの負荷...

まとめ

あと上には書きませんでしたが、基本として、Wordpressのログインパスワードは結構長めに設定しておくことをおすすめします。僕は必ず20文字以上のパスワードにしています。

とりあえず、これだけの対策で、しばらく様子を見てみたいと思います。

この設定をしてからは、今のところ僕は500エラーをまだ見ていません。ただ、まだまだ様子を見守る必要があると思います。

追記:今日のログを取り寄せてみて調べてみた限りでは、xmlrpc.phpに僕以外のIPからのアクセスは完全になくなっていました。これで負荷が少しはマシになるかも。