個人ブログに毎日届くスパムをCloudflare Turnstileで一撃で止めた話(Contact Form 7)

雑記・セキュリティ

TL;DR

  • 個人ブログのある記事に、海外カジノ・ダークネット・依存症治療などのスパムコメントが毎日大量に届いていた
  • コメント欄を閉じたら、今度は問い合わせフォーム(Contact Form 7)に同種のスパムが流れ込んだ
  • チェックボックス必須化 → 効果なし。reCAPTCHA を入れようとしたが、従量課金への移行を知り断念
  • 代わりに Cloudflare Turnstile を設定したところ、スパムが一切来なくなった
  • Contact Form 7 なら Turnstile のキーを入れるだけで使える。スパムに悩んでいる人は試す価値あり

背景・きっかけ

個人ブログを運営していると、ある日を境に管理画面の通知が異常な数になっていました。

現在 28 件〜44 件以上のコメントが承認待ちです

こういった通知が毎日途切れず続く状態。特定の記事(Amazon Q Developer Pro や製造業に関するもの)に、記事内容とはまったく無関係なコメントが機械的に投稿され続けていました。明らかに人間の手ではなく、XRumer のような自動投稿ツールやスクリプトによるボット送信です。

届いていたスパムコメントの傾向

生成AI(Gemini)に内容を分析させたところ、ざっくり以下のパターンに分類できました。

  • 海外オンラインカジノ・ベッティング系: 1xbet など。アプリDL誘導、プロモコード、初回入金ボーナスの宣伝。アゼルバイジャン語やロシア語混じり
  • ダークネットマーケットのリンク集: KrakenBlackSprutMega などロシア語圏の市場への誘導やレビュー記事
  • アフィリエイト・外部サービス誘導: 高級車レンタル、アルコール依存症対策、SEO・リンク販売を装ったもの
  • 無関係な長文・AIプロンプト風テキスト: 記事トピックと無関係なロシア語のAIチャット案内やキーワードの羅列

送信元は使い捨てドメインやフリーメール(@savmask.com@rambler.ru など)が中心で、IPも世界中のプロキシ・クラウド(Vultr、Cloudzy など)から発信されていました。要するに、発信元でブロックしても意味がないタイプの攻撃です。


やったこと

1. コメント欄を閉鎖 → 攻撃先が移動しただけだった

まず一番わかりやすい対策として、標的にされていた記事のコメント欄を閉じました。

結果、コメントスパムは止まりました。が、今度は問い合わせフォームに同じようなスパムが大量に届くようになりました。ボットは開いている入口を探して移動してくるだけ、というのを身をもって理解しました。

問い合わせフォーム経由のスパムも傾向は似ています。

  • 医療・依存症治療系(最多): ロシア語で解毒点滴・訪問医・入院治療などを宣伝し、.ru ドメインへ誘導
  • 仮想通貨・暗号資産系: swap litecoin などスワップ関連の誘導
  • アダルトサイト誘導
  • SEO・営業スパム: 「A novel new approach to advertising.」といった集客提案。Telegram や WhatsApp へ誘導
  • テスト送信: 「テスト」「あああ」などボットの動作確認と思われる短文

問い合わせフォームは Contact Form 7 を使っていたので、ここに対策を積んでいくことにしました。

2. チェックボックス必須化 → 効果なし

まず手軽に、Contact Form 7 に「チェックを入れないと送信できない」チェックボックスを追加しました。人間なら1クリックで済む、簡易的なボット除けの発想です。

[acceptance accept-this] 私はロボットではありません(チェックしてください)

結果は 効果なし。相変わらずスパムが大量に届き続けました。今どきのボットはこの程度のチェックボックスは平気で突破してきます。

3. Google reCAPTCHA を入れようとした → 従量課金化を知り断念

次の定番、Google reCAPTCHA を設定しようとしました。ところが設定を進める途中で、reCAPTCHA が従量課金制への移行を予定していることを知りました。個人ブログにそこまでのコストや管理負荷はかけたくない。

そこで調べていくと、代替として Cloudflare Turnstile が有力だと分かりました。

4. Cloudflare Turnstile を設定 → スパムが一切来なくなった

Cloudflare Turnstile は、Cloudflare が提供する CAPTCHA の代替サービスです。ユーザーにパズルを解かせず、裏側でボットかどうかを判定してくれるのが特徴で、無料で使えます。

Contact Form 7 での導入はとてもシンプルでした。

  1. Cloudflare のダッシュボードで Turnstile のウィジェットを作成し、サイトキーシークレットキーを取得
  2. Contact Form 7(インテグレーション設定)に取得した2つのキーを入力
  3. フォームのテンプレートにウィジェットのタグを配置
[turnstile]

導入後、スパムは一切来なくなりました。あれだけ毎日届いていたのが嘘のようにゼロになり、拍子抜けするほどの効果でした。


ハマったポイント

  • 入口を閉じても攻撃は消えない: コメント欄を閉じても、ボットは問い合わせフォームという別の入口に移動してきた。個々の穴を塞ぐより、フォームそのものに人間判定を入れる方が本質的だった
  • チェックボックス程度では突破される: 「私はロボットではありません」的な自前チェックは、現代のボットには無力だった
  • reCAPTCHA の従量課金化: 定番だからと安易に選ぶ前に、料金体系の変更を確認しておいてよかった。導入途中で気づけたのは幸運だった

結果・学び

  • 最終的に Cloudflare Turnstile で完全にスパムが止まった
  • スパムボットは「開いている入口」を機械的に探して移動する。ピンポイント対策ではなく、フォームに人間判定を入れるのが効く
  • CAPTCHA を選ぶときは、機能だけでなく 料金体系(無料か従量課金か) も見ておくべき
  • Turnstile はユーザー体験を邪魔しない(パズルを解かせない)ので、問い合わせフォームの離脱を気にせず導入できる

まとめ

個人ブログに毎日大量に届いていたスパムは、Cloudflare Turnstile の導入で一撃で止まりました。

Contact Form 7 を使っているなら、Cloudflare で取得したキーを入れてフォームにタグを置くだけで導入できます。設定は本当に簡単なので、コメントや問い合わせフォームのスパムに消耗している人は、ぜひ一度 Turnstile を試してみてください。

コメント

タイトルとURLをコピーしました