WordPress 悪意のあるボットをブロックしてサーバーの過負荷を防ぐ

WordPress サイトを運営してみると、悪意のあるボットや悪意のあるIPの無差別的な接続で、サーバーRAMやCPU使用率が急激に高まり、サイトが遅くなったり、まったくダウンしている経験、一度経験したことでしょう。このブログも悪意のあるボットによるサーバーの過負荷に数回ダウンすることを経験し、そのたびにさまざまな方法を試してみました。今回の記事では、その中でも実際に効果があった方法をまとめて共有したいと思います。

WordPress 悪意のあるボットをブロックしてサーバーの過負荷を防ぐ

WordPress 悪意のあるボットをブロックしてサーバーの過負荷を防ぐ

悪意のあるボットをブロックする

SEOボットやSpam Referrerなどの悪意のあるボットが過度に集中し、サーバーのCPU使用率が100%まで上昇することがよくあります。

私も WordPress サイトを10年以上運営してきて、このような悪性ボットの無分別な訪問でサーバーが急激に遅くなったり、まったくダウンする状況を何度も経験しました。そのため、サイトに問題を起こした悪意のあるボットを一つずつ把握し、.htaccessファイルにブロックコードを追加する方法で対応してきています。

例:

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTP_USER_AGENT} (SCspider|Textbot|s2bot|MJ12bot|YandexBot|SemrushBot|AspiegelBot|BLEXBot|webmeup-crawler|oBot|SiteExplorer|BaiDuSpider|Barkrowler|proximic|PetalBot|Trendiction|DataForSeoBot|Bolt|FlipboardProxy|SeznamBot) [NC]
	RewriteRule ^ - [F,L]
</IfModule>



# Abuse HTTP Referrer Blocking
 <IfModule mod_rewrite.c>
 	RewriteEngine On
 	RewriteCond %{HTTP_REFERER} arendovalka\.xyz [NC,OR]
 	RewriteCond %{HTTP_REFERER} begalka\.xyz [NC,OR]
 	RewriteCond %{HTTP_REFERER} rank-checker\.online [NC,OR]
 	RewriteCond %{HTTP_REFERER} free-social-buttons-ccc\.xyz [NC,OR]
 	RewriteCond %{HTTP_REFERER} site-auditor\.online [NC,OR]
 	RewriteCond %{HTTP_REFERER} monetizationking\.net [NC,OR]
 	RewriteCond %{HTTP_REFERER} bezlimitko\.xyz [NC,OR]
 	RewriteCond %{HTTP_REFERER} biteg\.xyz [NC,OR]
 	RewriteCond %{HTTP_REFERER} boltalko\.xyz [NC,OR]
 	RewriteCond %{HTTP_REFERER} leadsgo\.io [NC,OR]
 	RewriteCond %{HTTP_REFERER} \.(xyz|online)(/|$) [NC]
 	RewriteRule .* - [F,L]
 </IfModule>

セキュリティプラグイン

Wordfenceなどのセキュリティプラグインを使用すると、過度に侵入し、サーバーの負荷を引き起こす悪意のあるIP攻撃を効果的にブロックできます。

クラウドウェイズを利用する場合、強力なサーバーファイアウォールが動作しており、多くの攻撃を遮断しますが、ファイアウォールを貫通して入ってくる攻撃をWordfenceで防御することができます。

ディドス攻撃と同様のパターンでIPアドレスを変えながら攻撃する場合、ワードフェンスの速度制限(Rate Limiting)設定によりある程度防御が可能になることがあります。私はサーバーの過負荷によってERR_TIMED_OUTエラーが発生する問題があるため、ワードフェンスをインストールして速度制限を設定したため、問題は再発しませんでした。

ログインページへのアクセスをブロックする

WordPress サイトの訪問者が増えると、自然にログインページを狙う自動化されたボット攻撃も一緒に増加する傾向があります。

クラウドウェイズを利用している場合は、サーバーファイアウォールでこのような悪意のあるログイン試行をかなりの部分検出してブロックしてくれるが、ここに加えて Limit Login Attempts Security 同じ無料プラグインを一緒に使用するのも良い方法です。

WordPress Limit Login Attempts Security プラグイン

このプラグインは現在100万個を超えるサイトにインストールされているほど広く使われており、 Cafe24から WordPressをインストールするときは、デフォルトで一緒にインストールされます。

wp-login.phpやXML-RPC(xmlrpc.php)を狙ったブルトフォースログイン攻撃がサーバー負荷の原因であれば、このプラグインだけである程度効果を見ることができますが、実際にはサーバー負荷軽減よりもログインセキュリティを強化する目的でより有用です。

クラウドフレア(Cloudflare)による悪意のあるIPブロック

ディドス(DDoS)攻撃が頻繁にある場合は、クラウドフレアに参加して連動させることができます。具体的には、Didos攻撃が開始されると、電子メールで通知を送信するように設定できます。ディドス攻撃でサーバーがダウンした場合、Under Attackモードを有効にして攻撃IPをチェックしてブロックすると、サーバーが回復する可能性があります。

IPを変更しながら攻撃する場合は、攻撃に使用されているIPをチェックしてクラウドフレアでブロックするように設定することも検討できます。

私は2024年8月から9月の間に1ヶ月間、激しいディドス攻撃を受けました。当時、次のような措置であれば防御できました。

  • サーバーサイズを2GBのRAMから4GBのRAMにアップグレード
  • クラウドフレア連動
  • ディドス攻撃が始まると、Under Attackの設定
  • クラウドウェイズで攻撃IPを確認してクラウドフレアからブロックするように設定

WordPress サイトを最適化する

私はサーバーに10を超える WordPress ブログを追加して管理しています。追加されたサイトの1つが最適化されていないため、サーバーが過負荷になる原因となりました。

特定の WordPress サイトが問題を引き起こしている場合は、どのような原因でサーバーのCPUまたはRAMの使用量が急増しているのかを把握して、対応方法を判断できます。

問題のサイトをケミクラウドに一時的に移動しましたが、そのサイトで実行される MySQL クエリがディスク I/O を過度に使用する問題のため、共有サーバー全体のパフォーマンスが低下しているため、問題を解決しないと Web 接続をブロックするという警告メールを受け取りました。

警告を受けた後、ケミクラウドの助けを借りて問題の原因を把握し、問題解決を試みてサイトをある程度最適化することができましたが、問題が完全に解決できなくなり、再びクラウドウェイズに移した後にクラウドウェイズ担当者の助けを借りて追加の措置を取ってある程度安定化させることができました。

このサイトではYoast SEOが問題を引き起こし、特に検索すると過度のクエリが実行され、サーバー全体に影響を与え、Yoast SEOを削除し、検索機能もブロックしました。

これらの一連の措置は効果がありましたが、問題は完全に消えませんでした。その後、WordfenceをインストールしてRate Limitingを設定して問題がなくなりました。

WordPress サイトを運営する場合、 GeneratePressのような軽いテーマを使用し、プラグインも最小限に保つことをお勧めします。重いテーマを使用すると、サイトが重くなり、サーバーリソースをより迅速に使い果たすことができます。

Q&A(質問と回答)

Q1.悪意のあるボットブロックコードを.htaccessに追加しましたが、サーバーの負荷が軽減されません。なぜですか?

.htaccessブロックは アパッチ レベルで要求を防ぎますが、既知のUser-Agentやリファラーパターンにのみ効果があります。ボットがUser-Agentを偽装したり、毎回新しいIP・リファラを使用する場合にはフィルタリングされないことがあります。このような場合は、CloudflareやWordfenceなどの上位レイヤのファイアウォールで使用することをお勧めします。

ちなみに、.htaccessファイルにIPブロックコードを追加することでブロックできますが、この方法は完全にブロックされない場合があります。 .htaccessブロックは要求がすでにサーバー(Apache)に到達した状態で処理されるため、ブロックの有無を判断する過程でもある程度サーバーリソースが消費されます。

このような場合は、クラウドフレアのWebアプリケーションファイアウォール(WAF)ルールを追加して、問題のあるIPをブロックする方法を試すことができます。クラウドフレアでブロックすると、要求がサーバーに到達する前にエッジフェーズでフィルタリングされるため、サーバーにはまったく影響しません。悪意のあるIPによるサーバー負荷が繰り返される場合は、.htaccessよりもクラウドフレアのWAF側で優先的にブロックする方が効果的です。

Q2. Wordfenceのレート制限機能は具体的にどのように機能しますか?

ある時間に1つのIPからの要求数が設定したしきい値を超えると、そのIPを一時的にブロックしたり、接続を制限したりします。特にIPを変えて攻撃するデドス性トラフィックではなく、同じIPから繰り返し集まるリクエストを抑制するのに効果的です。

Q3. Limit Login Attempts SecurityプラグインとWordfenceを一緒に使用できますか?

はい、一緒に使っても構いません。ただし、両方のプラグインにログイン試行制限機能があるため、機能が重複する可能性があります。サーバーの負荷軽減が目的であれば、Wordfence の速度制限設定にもっと重点を置き、ログインページのセキュリティを強化する目的であれば、Limit Login Attempts Security を補助的に使用する方法を検討できます。

Q4.クラウドウェイを使っていますが、ディドス攻撃でサーバーがダウンする可能性がありますか?

クラウドウェイズのサーバーファイアウォールが多くの攻撃をフィルタリングしますが、ファイアウォールをバイパスしたり、サーバーリソース自体を使い果たしたりする方法の攻撃には完全に妨げられない可能性があります。このような場合は、Cloudflare連携、サーバー仕様のアップグレード、Under Attackモードの有効化など、追加の対応が必要です。

Q5. Under Attackモードをオンにしても、訪問者の経験に問題はありませんか?

Under Attackモードでは、訪問者に短時間の確認手順(チェック画面)を行うため、通常どおりオンにしておくと、通常の訪問者の接続経験を落とすことができます。攻撃が進行中のときだけオンにしておき、攻撃が頻繁になった場合は再びオフにする方法で運営することをお勧めします。

Under Attackモードでは、Googleなど検索エンジンのアクセスが妨げられるようです。ユーザーエクスペリエンスとSEOのために、通常はUnder Attackモードを有効にしないでください。

Q6.サーバーRAM(RAM)を増やすだけでDidos攻撃を防御できますか?

サーバー仕様のアップグレードだけでは根本的な解決が難しい。ラムを増やすと一時的に耐える余裕ができますが、攻撃規模が大きくなると再び限界にぶつかります。この記事で紹介したように、クラウドフレアの連動、悪意のあるボットのブロック、速度制限の設定などを一緒に適用して、実質的な防御効果を見ることができます。

参照

コメントを残す

コメントを残す