Cloudflare WAFで悪質Botを99%ブロックする設定【カスタムルール完全版】

セキュリティ中級メンバー限定
CloudflareWAFSecurityBotDDoS

TL;DR

悪質Botを放置すると 帯域コストが膨らみ、サーバーが落ち、正規ユーザーが損をする。CloudflareのWAFカスタムルールを使えば、正規ユーザーに影響を与えずにBotトラフィックの大半を弾ける。このページでは設定をステップ順に解説する。コピペ可能なルール式付き。


なぜ今Botブロックが必要か

Botトラフィックはインターネット全体の約半数を占めるとされる(Cloudflare Radar調査)。問題は悪質Botが含まれること。

サイト運営者への直接ダメージ:

  • 帯域コスト増: スクレイピングBotが大量リクエストを送ると転送量課金が膨らむ。VPSの月額が数倍になるケースは珍しくない
  • サーバー負荷: 正規ユーザーより遥かに短い間隔でリクエストを打つため、CPU使用率が跳ね上がり応答遅延が発生する
  • コンテンツ盗用: 商品データ・価格情報・記事本文を自動収集されて競合に使われる
  • セキュリティスキャン: 脆弱性スキャナーが常時走っている状態になり、ゼロデイ発見のリスクが上がる

前提:CloudflareのBotブロック機能はプランで大きく変わる

設定前に自分のプランで何が使えるか確認する。

機能FreeProBusinessEnterprise
Bot Fight Mode(基本自動ブロック)
Super Bot Fight Mode(カテゴリ別設定)
Bot Management(スコアリング)◯別途
WAFカスタムルール数5201001,000
Rate Limitingルール数125100
カスタムルールでRegex使用

本記事の設定は Pro($25/月、年払いなら$20/月)以上 を前提とする。Freeプランは Step 1 だけ実行可能。


ダッシュボードのナビゲーション(2025年以降)

Cloudflareのダッシュボードは2024年以降リニューアルが進んでいる。新旧どちらを使っているかで導線が変わる

操作新Dashboard旧Dashboard
カスタムルールSecurity > Security rules > Custom rulesSecurity > WAF > Custom rules
Rate LimitingSecurity > Security rules > Rate limiting rulesSecurity > WAF > Rate limiting
Bot設定Security > Settings(「Bot traffic」でフィルタ)Security > Bots
マネージドルールSecurity > Settings(「Web application exploits」でフィルタ)Security > WAF > Managed rules

本記事では 新Dashboardの導線 を基準に記載する。


Step 1: Bot Fight Mode / Super Bot Fight Mode を有効化する(所要5分)

新Dashboard: Security > Settings → 「Bot traffic」でフィルタ

Freeプランの場合

「Bot Fight Mode」のトグルをONにする。CloudflareがBotと確定したトラフィックを自動的にチャレンジする。カスタマイズ不可。

Pro / Businessプランの場合

Bot Fight Mode をOFFにしてから「Super Bot Fight Mode」を設定する(両立不可)。

Super Bot Fight Modeの推奨設定:

カテゴリ推奨アクション理由
Definitely automatedBlock確実なBotは即ブロック
Likely automatedManaged Challenge誤検知リスクがあるため最初はChallenge
Verified botsAllowGooglebotなどのSEOクローラーを通す
Static resource protectionONJS/CSSへのBot直アクセスをブロック
JavaScript detectionsONJS非実行のHeadlessブラウザを検出

Managed Challenge はCloudflareがサイレントに動作を検証する仕組みで、正規ユーザーへの影響が少ない。最初は Managed Challenge で様子を見て、1週間後にSecurity Eventsで誤検知がなければ Block に上げる。


Step 2: WAFカスタムルールで精密ブロック

新Dashboard: Security > Security rules > Create rule > Custom rules

Cloudflareのルール式は (条件式) の形で書く。and / or / not で組み合わせ可能。

ルール1: 悪質なUser-Agentをブロック

(http.user_agent contains "python-requests") or
(http.user_agent contains "scrapy") or
(http.user_agent contains "zgrab") or
(http.user_agent contains "masscan") or
(http.user_agent contains "libwww-perl") or
(http.user_agent eq "")

アクション: Block

python-requests / scrapy はスクレイピングライブラリのデフォルトUA。masscan / zgrab はポートスキャナー。空UAは正規ブラウザでは発生しない。

注意: 自社のAPIクライアントやCI/CDで python-requests を使っている場合、先にそのIPのSkipルールを優先度上位に追加すること。


ルール2: 脆弱性スキャンのパスをブロック

(http.request.uri.path contains "/.env") or
(http.request.uri.path contains "/.git") or
(http.request.uri.path contains "/phpmyadmin") or
(http.request.uri.path contains "/xmlrpc.php") or
(http.request.uri.path contains "/wp-login.php") or
(http.request.uri.path contains "/admin/config")

アクション: Block

WordPressを使っていなくても wp-login.php へのスキャンは毎日来る。.env 取得狙いも頻繁。自サイトに不要なパスはすべて遮断してよい。


ルール3: 国別制限(オプション)

日本向けサービスで、特定の国からの攻撃が多い場合に有効。いきなりBlockせずManaged Challengeから始める。

(ip.geoip.country in {"CN" "RU" "KP"}) and
not (http.request.uri.path contains "/api/webhook")

アクション: Managed Challenge

Webhookの受信など特定パスは例外にするのがポイント。自サイトのアクセスログ(Security Events)で実際の攻撃元国を確認してから適用する。


Step 3: Rate Limitingでブルートフォース対策

新Dashboard: Security > Security rules > Rate limiting rules > Create rule

Proプランは2ルールのみ。重要度の高いエンドポイントに絞って設定する。

ログインページへのブルートフォース対策

設定項目
Expressionhttp.request.uri.path eq "/login"
Characteristics(カウント単位)IP address
Requests per period10
Period1分
ActionBlock
Duration60秒

全パスに低閾値で設定すると正規ユーザーが誤ブロックされる。まずはログインやAPIなど重要エンドポイントのみに適用する。


Step 4: 効果確認(Security Events)

新Dashboard: Security > Events(または Analytics > Security)

設定後24〜48時間でブロックイベントが蓄積される。確認ポイント:

  • Block されたリクエストのUA・IP・パスを見て誤検知がないか確認
  • Challenge Solved が多いルールは正規ユーザーを巻き込んでいる可能性 → アクションを Block から Managed Challenge に緩める
  • 特定のUA・パスへの攻撃が集中していれば専用ルールを追加
# CloudflareのRay IDで個別リクエストを追跡する
curl -sI https://example.com/ | grep -i cf-ray
# cf-ray: 8abc123456def789-NRT

Ray IDをDashboardのEvents検索に入れると、そのリクエストへの判定結果と適用ルールが確認できる。


まとめ

設定効果必要プラン
Super Bot Fight Mode ON確実Bot自動ブロック・カテゴリ別設定Pro以上
UAブロックルールスクレイピングツール・スキャナー遮断Free以上
パスブロックルール脆弱性スキャン・Botのパス探索遮断Free以上
国別Managed Challenge攻撃元国のトラフィックを選別Free以上
Rate Limitingブルートフォース・短時間DDoS対策Pro以上(2ルール)

WAF設定は「追加してからEventsで誤検知確認」のサイクルが重要。最初から全部Blockにせず、Managed Challenge → 問題なければ Block の順で段階的に締める。


この続きはメンバー限定です

メールアドレスを登録すると、本記事の続き(設定ファイル・コード)と全 6 本のメンバー限定記事がその場で読めます。無料・いつでも解除可。

関連記事

セキュリティWAFとは何か — 普通のFWと何が違う?個人サイトにも必要?を噛み砕いて解説セキュリティGitHubに秘密情報を誤プッシュした:3時間以内の対処フローチャートセキュリティセキュリティインシデント対応SOP:中小企業が72時間以内にやること
記事一覧に戻る