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

インフラ中級メンバー限定
CloudflareWAFSecurityBotDDoS

TL;DR

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


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

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

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

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

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

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

機能 Free Pro Business Enterprise
Bot Fight Mode(基本自動ブロック)
Super Bot Fight Mode(カテゴリ別設定)
Bot Management(スコアリング) ◯別途
WAFカスタムルール数 5 20 100 1,000
Rate Limitingルール数 1 2 5 100
カスタムルールでRegex使用

本記事の設定は Pro(月額$20)以上 を前提とする。Freeプランは Step 1 だけ実行可能。


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

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

操作 新Dashboard 旧Dashboard
カスタムルール Security > Security rules > Custom rules Security > WAF > Custom rules
Rate Limiting Security > Security rules > Rate limiting rules Security > 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 automated Block 確実なBotは即ブロック
Likely automated Managed Challenge 誤検知リスクがあるため最初はChallenge
Verified bots Allow GooglebotなどのSEOクローラーを通す
Static resource protection ON JS/CSSへのBot直アクセスをブロック
JavaScript detections ON JS非実行の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ルールのみ。重要度の高いエンドポイントに絞って設定する。

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

設定項目
Expression http.request.uri.path eq "/login"
Characteristics(カウント単位) IP address
Requests per period 10
Period 1分
Action Block
Duration 60秒

全パスに低閾値で設定すると正規ユーザーが誤ブロックされる。まずはログインや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 の順で段階的に締める。


会員限定:WAFルールJSON一式 + GoogleBot/BingBot例外設定

Super Bot Fight Modeの「Verified bots」でAllowに設定しても、カスタムルール側でGooglebotのUAを誤ってブロックするケースがある。検索エンジンBot(Googlebot・BingBot・Yahoo! Japan Bot)を誤検知しないための例外設定ルールと、本記事のカスタムルール4本をTerraform(HCL)でコード管理するテンプレートを会員限定で公開している。

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

メールアドレスを登録すると、本記事の設定ファイル・コードと全 10 本の実践記事が読めます。無料・いつでも解除可。

記事一覧に戻る