Webアプリケーション
セキュリティの推奨事項
Cloudflare 202 — Cloudflare 101 入門ガイドの次のステップとして、WAF・Rate Limiting・Bot Management・API Shieldなど、レイヤー7(L7)アプリケーションセキュリティの実践的な推奨事項とベストプラクティスを網羅的に解説します。
🛡️ WAF Managed Rules
マネージドルールセット・OWASP Core Ruleset
⚙️ WAF Custom Rules
ボット許可・APIセキュリティ・地域ブロック等
🚦 Rate Limiting & L7 DDoS
ログイン保護・DDoS自動保護・レート制限
🔐 Turnstile
CAPTCHA代替・ボット検証
🔍 Page Shield
JS依存関係監視・PCI準拠
🔒 SSL/TLS
暗号化モード・証明書管理
📊 Analytics & Logs
Suspicious Activity・Security Events・Logpush
🛡️ オリジンサーバー保護
Cloudflare Tunnel・CNI・IP許可リスト
🔧 Troubleshooting
ステータス確認・ドキュメント・サポート
クイックスタートガイド — 新規ゾーン向け10ステップ
はじめる前に — 基本概念とセットアップ順序
🔑 主要用語の解説
🌐 ゾーン (Zone)
Cloudflareに登録されたドメイン(例:example.com)の単位。WAFなどすべてのルールはゾーン単位で管理されます。ダッシュボード左上のドメイン選択でゾーンを切り替えます。
📋 ルールセット (Ruleset)
複数のルールをまとめたグループ。Cloudflareが管理する「マネージドルールセット」と、自分で作成する「カスタムルール」があります。
⚡ アクション (Action)
- BLOCK — リクエストを遮断。デフォルトで HTTP 403 を返す
- LOG — 記録のみ(遮断しない)
- SKIP — 以降のWAFルール処理をバイパス
- CHALLENGE / MANAGED CHALLENGE — ブラウザ上で人間確認
- Rate Limiting BLOCK — 閾値超過時に HTTP 429 を返す
📊 Security Events
WAFルールにマッチしたリクエストのログ。Security › Events から確認できます。ルールが意図通り動いているか確認する際の最重要ツールです。
🔢 WAF攻撃スコア
1〜99の数値。1に近いほど攻撃の可能性が高く、99に近いほど正常なリクエスト。cf.waf.score lt 30 は「攻撃の可能性が高いリクエスト」を指します。
🤖 ボットスコア
1〜99の数値。1に近いほど自動化ボットの可能性が高く、99に近いほど人間。cf.bot_management.score lt 30 は「ボットである可能性が高いリクエスト」を指します。Enterprise Add-on
📋 推奨セットアップ順序
WAF マネージドルールを LOGモードでデプロイ
Section 1.1 から始めます。まず「Log」アクションで有効化し、Security Eventsで誤検知がないか確認
Security Eventsで数日間モニタリング
正常なトラフィックがブロックされていないかを確認。問題があれば例外ルール(WAF Exception)を作成
マネージドルールをBLOCKモードに切り替え
誤検知がないことを確認したら BLOCKアクションに変更。OWASP (Section 1.3) は特に誤検知に注意
WAF カスタムルールを追加
検証済みボットの許可・API許可などのSKIPルールを先に追加。ルールの順序が重要
Rate Limiting を設定
ログインページや重要なAPIエンドポイントへのレート制限を設定
その他の推奨事項を確認
Turnstile、Page Shield、SSL/TLS設定などを確認・設定
📦 機能別プラン要件
| 機能 | 必要プラン | 該当セクション |
|---|---|---|
| WAF マネージドルール・カスタムルール(基本) | Pro以上 | , 2.x |
WAF 攻撃スコア (cf.waf.score) | Enterprise(全顧客) | 2.4, 2.13 |
| Advanced Rate Limiting | Enterprise Add-on | 3.x (一部) |
Bot Management (cf.bot_management.score) | Enterprise Add-on | 2.14, 2.15, 2.17 |
| Leaked Credentials Detection | Enterprise(全顧客) | 3.4 |
| Page Shield | Business以上 | 4.2 |
| Turnstile(基本) | Free | 4.1 |
🛡️ セキュリティ用語集(入門向け)
- Security SQLi(SQLインジェクション)
- 危険度:🔴 高 攻撃者が悪意のあるSQLコードをWebフォームなどから送信し、データベースを不正操作する攻撃。顧客情報の窃取やデータ改ざんに繋がる。WAFマネージドルールで自動検出・ブロック可能。
- Security XSS(クロスサイトスクリプティング)
- 危険度:🔴 高 攻撃者が悪意のあるJavaScriptをWebページに埋め込み、ユーザーのブラウザで実行させる攻撃。Cookie窃取やフィッシング詐欺に利用される。Rule ID:
882b37d6...で検出。 - Security RCE(リモートコード実行)
- 危険度:🔴 極めて高 攻撃者がサーバー上で任意のコードを実行できる脆弱性。サーバー完全乗っ取りに繋がる最も危険な攻撃の一つ。WAF攻撃スコア(
cf.waf.score.rce)で検出。 - Cloudflare JA3フィンガープリント
- TLS接続時のクライアント特性(暗号化方式・拡張機能等)をハッシュ化した文字列。同じツールは同じJA3値を生成するため、自動化ボットの識別に有効。フィールド:
cf.bot_management.ja3_hash - Cloudflare JA4フィンガープリント
- JA3の改良版。TLS接続とHTTPヘッダー情報を組み合わせたより詳細なクライアント識別を実現。TLS 1.3やQUICプロトコルにも対応し、より正確なボット・ツール検出が可能。フィールド:
cf.bot_management.ja4 - Cloudflare mTLS(相互TLS認証)
- 通常のTLSではサーバーのみが証明書を提示するが、mTLSではクライアントも証明書を提示して双方向認証を行う。APIアクセスやデバイス認証の強化に使用。Section 2.12参照。
- API JWT(JSON Web Token)
- APIの認証・認可に使用されるトークン形式。ヘッダー・ペイロード・署名の3部構成。ペイロード部分にユーザー情報(role等)を含むため、WAFルールで内容をチェック可能。Section 2.13参照。
WAF Managed Rulesのデプロイ
マネージドルールセットはゾーン全体に適用する前に簡単にレビューを行い、その後デプロイすることが広く推奨されています。必要に応じて、特定の例外ルールを作成してください。
📋 入門向け:ステップバイステップ設定手順
Cloudflareダッシュボードにログイン
保護したいドメイン(ゾーン)を選択します。
Security › WAF › Managed rules を開く
左側メニューから Security → WAF → Managed rules の順にクリックします。
"Deploy managed ruleset" をクリック
Cloudflare Managed Ruleset の Deploy ボタンをクリックします。
アクションを "Log" に設定
重要:最初は必ず Log を選択してください。いきなり Block にすると正当なトラフィックを誤ってブロックする可能性があります。
Payload logging を有効化
ルールにマッチしたリクエストの詳細な内容を記録するため、Payload logging を有効にします。これにより、誤検知の診断やルールの動作確認が容易になります。
Deploy ボタンをクリックして保存
設定を保存すると、WAFが有効化されます(まだブロックはしません)。
Security › Events で動作確認(3日〜1週間)
Security Events 画面で「どのルールが発動したか」「誤検知がないか」を確認します。
必要に応じて例外ルールを追加
誤検知があれば、該当ルールに対して例外(Exception)を作成します。
アクションを "Block" に切り替え
誤検知がないことを確認したら、ルールセットのアクションを Block に変更します。これで攻撃を実際にブロックするようになります。

Cloudflareには2種類のWAFマネージドルールがあります。
- アカウントレベル:Cloudflareダッシュボードの Account Home › Application Security › WAF で設定。アカウント内の全ゾーンに一括適用できます。
- ゾーンレベル:各ゾーンの Security › WAF › Managed rules で設定。そのドメイン専用の設定です。
WAF Managed Rule の推奨設定
Cloudflare WAF Managed Rulesは、数千のルールで構成されており、各ルールには固有のRule ID、タグ(攻撃タイプ・カテゴリ)、説明が付与されています。デフォルトでコアルールセットが有効化されていますが、追加の、そしてより厳格なセキュリティ対策が必要な場合は、以下の推奨ルールの一部またはすべてをデプロイすることを検討してください:
- Ruleset ID:ルールセット全体を識別するID(例:
efb7b8c949ac4650a09736fc376e9aee= Cloudflare Managed Ruleset)。API経由でルールセットを操作する際に使用。 - Rule ID:各ルールに割り当てられた32文字の一意の識別子(例:
882b37d6bd5f4bf2a3cdb374d503ded0)。カスタムルールでの例外設定や上書きに使用。 - Action(アクション):ルールがマッチした際の動作。
Block(ブロック)、Managed Challenge(Cloudflare Challengeを表示)、Log(記録のみ)、JS Challenge(JavaScript Challengeを表示)、Skip(後続ルールをスキップ)など。 - Version(バージョン):ルールセットのバージョン番号(例:
version: 1→version: 2)。Cloudflareによるルール更新だけでなく、ユーザーがアクションを変更したり、ルールの有効/無効を切り替えた場合にも新しいバージョンが作成される。 - タグ:攻撃タイプ(
xss、sqli、rceなど)やカテゴリ(paranoia-level-1など)でグループ化。タグ単位での一括制御が可能。 - 説明(Description):ルールが検出する攻撃パターンや推奨アクションの詳細説明(例: "XSS, HTML Injection" → クロスサイトスクリプティング攻撃を検出)。
| カテゴリ | ルール名 | Rule ID | 推奨アクション | 説明・注意点 |
|---|---|---|---|---|
| 🔴 XSS / インジェクション | XSS, HTML Injection | 882b37d6bd5f4bf2a3cdb374d503ded0 |
MANAGED CHALLENGE | クロスサイトスクリプティング・HTMLインジェクション攻撃を検出。Managed Challenge推奨(正当なトラフィックへの影響を最小化)。まずLOGで影響確認を推奨。 |
| 🟠 URLパス異常 | Anomaly:URL:Path - Multiple Slashes | 6e759e70dc814d90a003f10424644cfb |
MANAGED CHALLENGE | URLパスの異常(複数スラッシュ、相対パス、CR/LF/NULLバイト)を検出。一部フレームワークで正当なパターンの可能性あり。Managed Challenge推奨。 |
| 🟠 大容量ボディ | Anomaly:Body - Large | ee922cf00077462d9f2f7330b114b839 |
BLOCK | 処理上限を超えるボディペイロードを軽減。ファイルアップロードエンドポイントには必ず例外設定を追加すること。 |
| 🟡 非標準ポート | Anomaly:Port - Non Standard Port | 8e361ee4328f4a3caf6caf3e664ed6fe |
MANAGED CHALLENGE | 80・443以外の非標準ポートへのリクエストを検出。一部アプリケーションで正当に使用される場合あり。Managed Challenge推奨。 |
| 🟡 異常HTTPメソッド | Anomaly:Method - Unusual HTTP Method | ab53f93c9b03472ab34a5405d9bdc7d5 |
MANAGED CHALLENGE | CONNECT・TRACE等の通常使用されないHTTPメソッドを検出。REST APIや一部プロキシで正当に使用される場合あり。Managed Challenge推奨。例外設定も検討。 |
| 🟡 不明HTTPメソッド | Anomaly:Method - Unknown HTTP Method | 6e2240ffcb87477bbd4881b6fd13142f |
BLOCK | HTTPの仕様に存在しない不明なメソッドを検出。ほぼすべての環境でブロック推奨。 |
| 🔵 スキャナー検出 | 脆弱性スキャナー関連ルール(複数) | — | LOG → BLOCK | Nikto・Nessus等の脆弱性スキャナーを検出するすべてのルール群を有効化推奨。まずLOGで確認後にBLOCKへ移行。 |

OWASP Core Ruleset のデプロイ
OWASPコア・ルールセットは、SQLインジェクション・XSS・コマンドインジェクションなど幅広い攻撃パターンに対応するルールセットです。ただし、誤検知が発生しやすいため、段階的なアプローチでデプロイすることを強く推奨します。

各ルールがマッチするたびに 5点 が累積加算されます。設定した閾値に達すると、指定したアクション(Log/Block)が実行されます:
- Medium感度(閾値: 40点) → 8個のルールマッチで実行(5点 × 8 = 40点)
- Low感度(閾値: 60点) → 12個のルールマッチで実行(5点 × 12 = 60点)
🎚️ 推奨設定:感度レベル(Sensitivity Level)
- Low(スコア閾値: 60) — 最初はここから開始することを推奨。誤検知リスクが最も低い。
- Medium(スコア閾値: 40) — Lowで安定稼働を確認後、必要に応じて段階的に引き上げる。
- High(スコア閾値: 20) — 誤検知リスクが高いため、十分なテストと例外ルールの設定が必要。
💡 ヒント:スコアが低いほど攻撃の可能性が高いことを示します。High (20) は攻撃の可能性がより高いトラフィックもブロックします。
📋 推奨設定:スコアしきい値(Paranoia Level)
- Paranoia Level 1(PL1):デフォルト。誤検知が最も少なく、最初のデプロイに最適。
- PL2以上は徐々に有効化し、例外設定を整備してから適用すること。
- スコアしきい値は 25以上 から始め、様子を見て下げていくアプローチを推奨。
WAF Attack Score
WAF Attack Scoreは、Cloudflareの機械学習モデルが各リクエストに割り当てる攻撃可能性スコア(1-99)です。従来のシグネチャベースルール(Managed Rules)を置き換えるものではなく、補完するもので、ゼロデイ攻撃や難読化された攻撃など、Managed Rulesが捕捉できない攻撃のバリエーションを検出します。
⚙️ 設定場所: Attack Scoreの閾値設定はWAF Custom Rulesで行います(Managed Rulesでは設定できません)。Attack ScoreとBot Scoreは異なるMLモデルを使用し、それぞれ異なる目的を持ちます:
🛡️ WAF Attack Score
攻撃の種類を特定
WAF Managed Rulesが捕捉できない攻撃のバリエーション(ゼロデイ、難読化、未知のパターン)を検出
🤖 Bot Score
自動化トラフィックを特定
リクエストが人間からか自動化ボットからかを判定(攻撃性の有無は関係なし)

スコアが低いほど攻撃の可能性が高くなります:
- 🔴 1-20 = 攻撃トラフィック(高リスク)— ブロック推奨
- 🟡 21-40 = 疑わしいトラフィック(中リスク)— チャレンジ推奨
- 🟢 41-99 = 正常なトラフィック(低リスク)— 通過
3つのサブスコア
| フィールド | 対象攻撃 |
|---|---|
cf.waf.score | 総合スコア (すべての攻撃タイプ) |
cf.waf.score.sqli | SQLインジェクション |
cf.waf.score.xss | クロスサイトスクリプティング |
cf.waf.score.rce | リモートコード実行 |
設定アプローチ
Phase 1: 観察モード

上記の例では、Attack Scoreが20以下のトラフィックをフィルタリングして分析しています。過去24時間で618リクエストがあり、そのうち414件が悪意のあるリクエストでOriginに到達しています。これらはWAF Managed Rulesや他のApp Securityフィーチャーで防げなかったトラフィックです。
Security Eventsで確認すべき項目:
- 攻撃対象のパス・エンドポイント(どのURLが狙われているか)
- 送信元の国・地域(地理的な攻撃パターンの特定)
- User-Agent・IPアドレス(ボットネットや既知の攻撃ツールの検出)
- スコアが20以下のトラフィックの共通点(閾値の妥当性を検証)
Phase 2: ログの調査

上記のログ例では、Attack Score = 1(攻撃)、SQLインジェクション サブスコア = 2 となっています。このスコアから、このリクエストはSQLインジェクション攻撃の可能性が非常に高いと判定できます。
スコア解釈のポイント:
- 総合スコアが1 = 攻撃確実(最高リスク)
- SQLiサブスコアが2 = SQLインジェクション攻撃として検出
- 総合スコアとサブスコアを組み合わせて、攻撃の種類と信頼度を判断
- このようなログパターンを見つけたら、即座にCustom Ruleでブロックまたはチャレンジを検討
Phase 3: ブロックモード (高リスク)

スコア20未満の高リスクトラフィックを即座にブロック
サブスコアを使った精密な保護
用途: データベースクエリを含むエンドポイントでSQLインジェクションを厳格にブロック(高リスクトラフィック = スコア1-20)
用途: ユーザー入力を表示するエンドポイントでXSSを防止(高リスクトラフィック = スコア1-20)
このセクションでは、検証済みボットの許可、API保護、地域ブロック、ログイン保護など、実際のユースケースごとにカスタムルールの設定方法をスクリーンショット付きで解説します。Expression Builder(式ビルダー)の使い方も含まれています。
検証済みボットの許可
一般的に、カスタムルールの中でも最上位に近い位置に、検証済みボット(GoogleBotなどの検索エンジンクローラー)を許可するSKIPカスタムルールを設定することが推奨されています。cf.client.bot はCloudflareが検証した正規のボット(Googlebot・Bingbotなど)を示すフィールドで、悪意のあるボットは含まれません。
📌 SKIPアクションはマッチしたリクエストに対して以降のWAFルール処理をバイパスします。BLOCKとは逆で「通過させる」アクションです。ルールは上から順に評価されるため、このルールは必ずリスト最上位に置いてください。
式の例:
→ ルール処理をスキップし、検証済みボットを通過させます。

参考: Verified Bots
APIの許可
信頼できるAPI(決済コールバックやPreRender IOなど)からのアクセスを許可するために、できるだけ具体的で多くのフィールドを使用したSKIPカスタムルールを、最上位のカスタムルールとして設定することが一般的に推奨されています。

参考: API Shield
フォールスルーAPIリクエストのブロック
ポジティブセキュリティモデルを真に適用するためには、API Shieldで管理されているエンドポイントのいずれにも一致しないリクエストのフォールスルーアクションに対して、WAFカスタムルールを作成してください。

悪意のあるペイロードの軽減 Enterprise
ペイロードを持つすべてのHTTPリクエストはWAF攻撃スコアを受け取ります。これはSQLインジェクション、XSS、またはRCE攻撃に関連する悪意のあるものが含まれている可能性を示します。
cf.waf.score) の見方: スコアは 1〜99 の数値で、1に近いほど攻撃の可能性が高いリクエストです。lt 30(30未満)は「高い確率で攻撃」を意味します。スコアは SQLi・XSS・RCE のカテゴリごとにも提供されます(cf.waf.score.sqli など)。
BLOCK の代わりに LOG アクションで設定し、Security Eventsで影響範囲を確認してからBLOCKに切り替えてください。

参考: WAF attack score
プロキシ・アノニマイザー・VPN・マルウェア・ボットネットの軽減
Cloudflareが管理するIPリスト(独自のカスタムリストを含む)を使用することで、これらのIPカテゴリに対してどのような処理を行うかを決定できます。一般的には、ボットネットやマルウェアをブロックしたいと考えるでしょう。
🚫 ボットネット・マルウェア → BLOCK
Cloudflare Managed Lists のボットネット・マルウェアカテゴリからのトラフィックは完全にブロックすることを推奨。
⚡ VPN・アノニマイザー → CHALLENGE
VPN・オープンプロキシからのトラフィックはユースケースに応じてチャレンジまたはブロックを検討。

参考: Managed IP Lists
IPリスト(ブラックリスト・ホワイトリスト)
Cloudflareが管理するIPリスト(Managed IP Lists)に加えて、顧客がアップロードしたカスタムIPリストを使用してトラフィックを制御できます。ブラックリストとして特定のIPアドレスをブロックしたり、ホワイトリストとして信頼できるIPアドレスを許可したりすることが可能です。
🚫 ブラックリスト(ブロック)
攻撃元IPや不正アクセスIPをリスト化してブロック。Security › WAF › Tools › Lists からIPリストを作成・管理できます。
✅ ホワイトリスト(許可)
信頼できるIPアドレス(社内IP、パートナーIPなど)をリスト化して優先的に許可。
$blacklist_ips は Security › WAF › Tools › Lists で作成したカスタムIPリストの名前です。

参考: Custom Lists
Torトラフィックの軽減
Torトラフィック(匿名通信を可能にするオーバーレイネットワーク)が不要な場合は、単にそれを軽減することができます。この場合、オニオンルーティングも無効にしてください。

不要なASNの軽減
ASN(Autonomous System Number)はインターネット上のネットワーク(ISP、クラウドプロバイダー、企業など)に割り当てられた一意の番号です。
なぜクラウドプロバイダーのASNをブロックするのか? 攻撃者はAWS・Azure・GCPなどのクラウドインフラからサーバーを起動して攻撃することが多いため、業務上クラウドからのAPIコールが不要な場合はブロックが有効です。ただし、自社システムがクラウドを使用している場合は適用しないこと。
ASNリストは Security › WAF › Tools › Lists で作成・管理できます。
AWS、Azure、GCPなどのクラウドASNs、またはトラフィックを期待しないその他のASNsからの不要なトラフィックは、軽減したいと考えるかもしれません。これらを簡単に管理するには、ASNsを含むリストを使用してください。

参考: Custom Lists
高リスク国のブロック
高リスク国、例えばOFACの公式リストに掲載されている国は、より高い脅威をもたらす可能性があるためブロックしてください。あるいは、完全にブロックする代わりに、マネージドチャレンジを設定することもできます。
国コードはOFACリストなどを参照して適宜調整してください。

既知のボットUser-Agentのブロック
cURL、go-http-client、あるいは空のユーザーエージェントなど、ボットによって使用されることが知られている不要なユーザーエージェントからのリクエストをブロックします。

WP Admin ダッシュボードアクセスの制限
WordPressを使用している場合、/wp-adminへのアクセスを従業員や管理者の特定の静的ソースIPアドレスのみに制限するか、あるいはCloudflare Accessを使用してゼロトラストのアプローチを選択してください。

従業員専用アクセスの制限
従業員ポータルやエクストラネットがある場合、従業員が所在する国にアクセスを制限するか、またはゼロトラストのアプローチを選択することをお勧めします。

Mutual TLS 認証
特定のホスト名で相互TLS(mTLS)認証用の有効なクライアント証明書を持たないすべてのリクエストをブロックします。



cf.tls_client_auth.cert_serial)と関連付けることで、よりきめ細かい制御が可能になります。
参考: Cloudflare PKI | API Shield mTLS | Learning Path: mTLS
- JWT検証 — mTLS(デバイス認証) + JWT(ユーザー認証)で二要素API保護を実現 → Section 2.13参照
- API Shield — 証明書ベースの認証とスキーマ検証を組み合わせてAPI保護を強化 → Section 4.5参照
ユーザー固有のJWTクレーム軽減
JSON Webトークン(JWT)に依存するAPIエンドポイントのセキュリティを強化するために、ユーザークレームなどの特定のJWTクレームをターゲットとするルールを作成できます。

参考: Issue challenge for admin user in JWT claim based on attack score
- mTLS — mTLS(デバイス認証) + JWT(ユーザー認証)で二要素API保護を実現 → Section 2.12参照
- Rate Limiting — JWT内の特定のクレーム(例: ユーザーロール)に基づいて動的にレート制限を調整 → Section 3.1参照
自動化されたボットトラフィックの可視化
| 機能 | Super Bot Fight Mode (Pro / Biz 標準) | Bot Management (Enterprise アドオン) |
|---|---|---|
| ボットスコア(1〜99) | — | ✅ 利用可能 |
| カスタムルールでのスコア活用 | — | ✅ cf.bot_management.score |
| JavaScript検出(JSD) | — | ✅ 利用可能 |
| 機械学習ベースの検出 | 限定的 | ✅ フルアクセス |
| 検証済みボットの許可 | ✅ | ✅ |
| ボットアナリティクス | 限定的 | ✅ 詳細アナリティクス |
| 契約形態 | プランに含まれる | Enterpriseアドオン契約が必要 |
⚠️ cf.bot_management.score などのBot Management変数を使用するカスタムルールは、Bot Management アドオン契約が必要です。Super Bot Fight Mode では使用できません。詳細はアカウントチームにご確認ください。
一般的に、自動化されたトラフィックの可視性を確保したいと考えるでしょう。これは通常、ボットスコアが自動化されている可能性が高いものをすべてログに記録するLOGアクションによって実現できます。
ボットスコアは 1〜99 の数値で、数字が小さいほど自動化ボットである可能性が高いことを示します。
- スコア 1〜29:ほぼ確実に自動化ボット
- スコア 30〜79:疑わしいトラフィック(要注意)
- スコア 80〜99:人間である可能性が高い
- 🤖 スクレイピングボット - コンテンツや価格情報を自動収集
- 🤖 AIクローラー - ChatGPT等のAI学習データ収集
- 🛒 在庫買い占めボット - 限定商品を自動購入(転売目的)
- 🎫 チケット転売ボット - コンサート・イベントチケットを大量購入
- 💳 カード情報試行ボット - 盗難カード番号の有効性確認
意味:ボットスコアが30未満のリクエストをログに記録します。
推奨:まずはLOGアクションで影響範囲を確認してから、BLOCKへ移行してください。

-
Rate Limiting —
ボットスコア30以下に対してレート制限を強化
cf.bot_management.score lt 30→ 10 req/min → Section 3.1参照 - Turnstile — 低スコアボットにチャレンジを表示し、人間であることを確認 → Section 4.2参照
JavaScript検出による偽ブラウザの軽減
BotScoreだけでは人間とボットを確実に区別できないシナリオでは、オプションでJavaScript検出(JSD)を有効にすることで検出を強化できます。
- JSDはHTMLレスポンスにのみ適用でき、ルート/最初のHTMLリクエストには適用できません。
- 正当なトラフィックへの影響を避けるため、ルールを強制する前にLOGアクションでテストしてください。
- このルールは重要なパスにのみ適用し、JSがまだ注入されていない可能性のある初期ランディングページには適用しないでください。

IPv6 IPの可視化
ほとんどのWebアプリケーションはIPv6アドレス経由で利用可能であることを望んでいます。しかし、IPv6が不要な場合、顧客はWAFを介してIPv6 IPを軽減し、必要に応じてIPv6互換性を無効にすることもできます。

アカウント乗っ取り(ATO)検出
ログイン失敗などの予測可能なボットの挙動を検知・軽減するために、検知IDを使用できます。これはレート制限ルールでも利用可能です。

サインアップ時の使い捨てメール対策
ユーザーが既知の使い捨てメールアドレスでサインアップするのを防ぐため、Cloudflareの使い捨てメールチェック機能でこの挙動を簡単に確認でき、顧客はこれをブロック、チャレンジ、ログ記録、レート制限、さらにはオリジンサーバーへのリクエストヘッダー追加など、どう処理するかを決定できます。


時間ベースのルール
時間ベースのルールでは、http.request.timestamp.secフィールドを活用して、特定の時間帯に基づいてロジックを適用できます。たとえば、定義された時間枠内で特定のエンドポイントへのすべてのPOSTまたはPUTリクエストをブロックすることができます。
注:タイムスタンプはUNIX時間で表現され、10桁の値で構成されます(UTC基準)。
上記の例は UTC 09:00〜15:00(= JST 18:00〜24:00)を「業務時間内」として扱っています。
JST(UTC+9)で9時〜18時を業務時間とする場合の計算: JST 9:00 = UTC 0:00 → 秒数: 0、JST 18:00 = UTC 9:00 → 秒数: 32400。
したがって JST 9:00〜18:00 の業務時間内ルールは: % 86400 >= 0 and % 86400 < 32400

不正なCloudflare Workersの軽減
CF-Workerリクエストヘッダーは、Cloudflare WorkersのサブクエストによってFetch APIを使用する際の元のホストを識別します。
cf.worker.upstream_zoneを使用してください。

ログインへのIPベースのレート制限
同じIPアドレスからの複数のログイン試行からログインエンドポイントを保護するために、必要な特性に基づいてレート制限を設定します。
式: http.request.uri.path eq "/login" and http.request.method eq "POST"
特性: ip.src
リクエスト数: 5 / 60秒(ユースケースに応じて調整)

アップロードのレート制限
POST / PUT / PATCH メソッドを使用した過剰なアップロード/HTTPリクエストを防ぎます。
式: http.request.method in {"POST" "PUT" "PATCH"}
特性: ip.src
リクエスト数: 100 / 60秒

参考: Standard fields
クレデンシャルスタッフィングのレート制限
クレデンシャルスタッフィング攻撃から保護するためには、一般的に多層防御のアプローチを採用することが推奨されます。このレート制限ルールは、複数のアプローチのうちの一例に過ぎません。
🎯 特性:JA3 フィンガープリント
同じTLSフィンガープリントを持つクライアントからのログイン試行を制限します。ツールを使用した攻撃の検出に有効。
🎯 特性:IP + User Agent
同じIPとUser Agentの組み合わせからのリクエストを制限します。より細かい制御が可能。

疑わしいログインのレート制限
Have I been Pwned (HIBP)に基づき、漏洩した認証情報、特に漏洩したパスワードを使用した疑わしいログイン試行(認証イベント)に対して、レート制限を実装します。
式: cf.waf.credential_check.username_and_password_exposed
特性: ip.src

地域ベースのレート制限
一般的に多くのトラフィックが来るとは予想されない市場がある場合、IPアドレスやその他の特性に基づいて、それらの国からのリクエストをレート制限することができます。
式: not ip.src.country in {"JP" "US" "SG"}
特性: ip.src
リクエスト数: 100 / 60秒(通常トラフィックより低い値に設定)

IPv6ベースのレート制限
IPv6プレフィックス全体を保護するには、cidr6関数とプレフィックス長を指定して、カスタム特性でレートリミットを設定します。
カスタム特性:
→ /64プレフィックス単位でカウントします。プレフィックス長は環境に応じて調整してください。

参考: Rules language
クライアント証明書ベースのレート制限
侵害される可能性のある証明書やデバイスの悪用を防ぐため、特定の期間内に同じクライアント証明書が複数回使用されることに基づいてレート制限を設けます。これはmTLS保護の一部です。
カスタム特性:

Rate Limiting ベストプラクティス
効果的なレート制限を実装するための実践的なガイドラインと推奨設定をご紹介します。
📋 段階的な保護アプローチ
🟢 第1段階:寛容なルール
比較的高い閾値で LOG または CHALLENGE アクション。正常トラフィックの把握とベースライン確立。
🟡 第2段階:警告ルール
中程度の閾値で MANAGED CHALLENGE。疑わしい動作を早期検出。
🔴 第3段階:厳格なルール
低い閾値で BLOCK。明らかに悪意のあるトラフィックを即座遮断。
🛡️ 実践的な設定例
ログイン保護(多層防御)
単一IPからの連続ログイン試行を段階的に制限:
式: http.request.uri.path eq "/login" and http.request.method eq "POST"
特性: ip.src
リクエスト数: 10 / 60秒
→ 1分間に10回を超えるとCHALLENGEを表示
式: http.request.uri.path eq "/login" and http.request.method eq "POST"
特性: ip.src
リクエスト数: 15 / 600秒
→ 10分間に15回を超えると厳格なCHALLENGE
式: http.request.uri.path eq "/login" and http.request.method eq "POST"
特性: ip.src
リクエスト数: 20 / 86400秒(24時間)
→ 24時間で20回を超えたら完全ブロック
失敗したログイン試行の制限
401/403レスポンスをカウント条件に含めることで、失敗したログイン試行のみを対象に:
式(カウント対象):
式(適用対象):
特性: ip.src
リクエスト数: 5 / 60秒
💡 ポイント:失敗したログイン(401/403)のみカウントし、閾値超過時は該当IPからのすべてのログインリクエストをブロック
高価な処理の保護
検索・レポート生成など、サーバー負荷の高いエンドポイントを保護:
式:
特性: ip.src
リクエスト数: 20 / 60秒
→ 高負荷処理を頻繁に実行する自動化ツールを防御
動的コンテンツの保護
キャッシュできない動的ページへのリクエストを制限:
式:
特性: ip.src
リクエスト数: 100 / 60秒
💡 ヒント:キャッシュされていないリクエストのみ対象にすることで、オリジンサーバーへの負荷を軽減
⚙️ 設定のヒント
📊 適切な閾値の見つけ方
- まずLOGモードでトラフィックパターンを観察
- Security Eventsで正常なトラフィックの最大値を確認
- 最大値の1.5〜2倍を初期閾値として設定
- 数週間モニタリングして調整
🎯 特性(Characteristics)の選択
- ip.src - 標準的な選択
- cf.unique_visitor_id - より正確な識別
- カスタム式 - API Key、Session ID等
- JA3 Fingerprint - ツール検出に有効
⏱️ 時間ウィンドウの選択
短期間(10秒〜1分)は急激な攻撃に、長期間(10分〜24時間)は持続的な攻撃やアカウント乗っ取りに有効。
例:ログインは短期+長期の組み合わせが効果的
- テストなしでいきなりBLOCKモードで本番適用
- 閾値を低く設定しすぎて正当なユーザーをブロック
- すべてのトラフィックに一律の厳しいレート制限
- モニタリング・調整なしで放置
HTTP DDoS Attack Protection
CloudflareはすべてのプランでL7(アプリケーション層)DDoS攻撃をHTTP DDoS Attack Protection マネージドルールセットにより自動的に軽減します。このルールセットは常に有効であり、無効にすることはできません。ユーザーは動作のカスタマイズのみ可能です。
🛡️ 検出対象の攻撃パターン
- 既知のDDoS攻撃ベクター・ツールのパターン
- 疑わしいリクエストパターン・プロトコル違反
- オリジンサーバーに大量エラーを引き起こすリクエスト
- オリジン/キャッシュへの過剰トラフィック
⚙️ カスタマイズ可能なパラメータ
- アクション: Block・Challenge・Log・Connection Closeなど
- 感度レベル: High(デフォルト)/ Medium / Low / Essentially Off
- Enterpriseユーザーはカスタム式(expression)による詳細な上書きが可能(最大10ルール)
🔍 オリジン保護ルール
オリジンのヘルス状態に基づく緩和も提供。デフォルトで1秒あたり1,000エラーを超えた場合に自動緩和を開始。
Rule ID: dd42da7baabe4e518eaf11c393596a9d
フラッシュセール・大型キャンペーン・メディア掲載などで急激なトラフィック増加が予想される場合は、誤検知対応ガイドを参考に感度レベルを「Low」または「Essentially Off」に一時調整してください。
| プラン | 利用可否 | 上書き(Override)ルール数 | カスタム式 |
|---|---|---|---|
| Free / Pro / Business | ✅ 自動保護 | 1ルールのみ(全トラフィックに適用) | ❌ 不可 |
| Enterprise | ✅ 自動保護 | 最大10ルール | ✅ 可能 |
| Enterprise + Advanced DDoS | ✅ 自動保護 | 最大10ルール | ✅ 可能(高度な設定) |
参考: HTTP DDoS Attack Protection | 設定パラメータ | 変更ログ
Browser Integrity Check(BIC)
BICはブラウザらしくないHTTPヘッダーを持つリクエストをブロックする機能です(Security › Settings で設定)。デフォルトで有効になっています。
APIや自動化ツール(CI/CDパイプライン、決済コールバックなど)は通常ブラウザヘッダーを持たないため、BICが有効だと誤ってブロックされる場合があります。API・自動化トラフィックがある環境ではBICを無効にすることを推奨します。
Turnstile
CloudflareのTurnstileは、ウェブサイト上のどこにでもチャレンジを設置できるサービスです。モバイルを含む標準的なブラウザで動作し、iOSおよびAndroidのネイティブアプリではWebView経由で利用できます。
| 機能 | Free プラン | Enterprise プラン(アドオン) |
|---|---|---|
| 基本的なボット検証 | ✅ | ✅ |
| 月間リクエスト数 | 100万リクエスト/月まで | 無制限(SLA付き) |
| カスタムドメイン数 | 制限あり | 無制限 |
| WAF・Bot Managementとの連携 | 基本連携 | ✅ 高度な連携・分析 |
| カスタマーサポート | コミュニティサポート | ✅ 専任サポート・SLA |
| アナリティクス | 基本 | ✅ 詳細レポート |
| 契約形態 | 無料・セルフサービス | Enterpriseアドオン契約が必要 |
- WAFカスタムルール — Pre-Clearance設定でTurnstile通過済みトラフィックのみ許可
- Rate Limiting — Turnstile未通過ユーザーに厳しいレート制限を適用 → Section 3.1参照
Page Shield
Cloudflare Page Shieldを使用すると、アプリケーションのJavaScript依存関係を監視し、変更があれば通知を受け取ることができます。これはPCI Complianceに関連しています。
🔐 Leaked Credentials Check(漏洩認証情報チェック)
Leaked Credentials Checkは、ユーザーがログイン時に使用した認証情報(ユーザー名・パスワード)が、過去のデータ漏洩で流出したものかどうかをリアルタイムでチェックする機能です。Credential Stuffing攻撃やアカウント乗っ取り(ATO)を防止します。All Plans
🔍 リアルタイム照合
ログインリクエストの認証情報を、15億以上のレコードを持つ漏洩データベースとリアルタイムで照合
🔒 プライバシー保護
k-匿名性を使用。パスワードのハッシュの一部のみを送信し、プライバシーを保護
⚡ 低レイテンシ
エッジで処理されるため、ログイン体験に影響を与えない
利用可能なフィールド(5種類)
| フィールド | 説明 | プラン |
|---|---|---|
cf.waf.credential_check.password_leaked |
パスワードが過去に漏洩したかどうか | All Plans |
cf.waf.credential_check.username_and_password_leaked |
ユーザー名とパスワードのペアが過去に漏洩したかどうか | Pro+ |
cf.waf.credential_check.username_leaked |
ユーザー名が過去に漏洩したかどうか | Enterprise |
cf.waf.credential_check.username_password_similar |
類似バージョンのユーザー名・パスワードが過去に漏洩したかどうか | Enterprise |
cf.waf.auth_detected |
リクエストに認証情報が含まれているかどうか | Enterprise |
主な使用例
- ログイン保護:
cf.waf.credential_check.password_leakedフィールドで漏洩パスワードを検出し、Managed Challengeを表示 - パスワードリセット促進:Transform Rulesで
X-Leaked-Credential: trueヘッダーを追加し、オリジンでパスワード変更を促す - MFA強制:漏洩認証情報検知時に多要素認証を要求
- 新規登録時のチェック:漏洩パスワードの使用を禁止し、強力なパスワードの設定を強制

上記の例では、cf.waf.credential_check.username_and_password_leakedが/loginエンドポイントで実行されています。マッチした場合、Managed Challengeを表示してボット対策と漏洩認証情報の使用を防ぎます。
- ATO検出 — 漏洩認証情報 + アカウント乗っ取りシグナル(異常なログイン位置、デバイス変更など)で複合判定 → Section 2.17参照
- 使い捨てメール対策 — 疑わしいメールドメイン(temp-mail.orgなど)と漏洩認証情報を同時にブロックし、不正アカウント作成を防止 → Section 2.18参照
🛡️ API Shield
API Shieldは、APIエンドポイントを保護するための包括的なセキュリティソリューションです。スキーマ検証・mTLS認証・レート制限・異常検知などを組み合わせて、APIへの不正アクセスや悪用を防止します。Enterprise
📋 Schema Validation
OpenAPIスキーマに基づいてリクエストを検証。不正なパラメータを自動ブロック
🔒 mTLS認証
クライアント証明書による相互認証。正規クライアントのみアクセス許可
🔍 API Discovery
トラフィックを分析してAPIエンドポイントを自動検出。シャドーAPIの発見に有効
主な機能
| 機能 | 説明 |
|---|---|
| Schema Validation | OpenAPI 3.0スキーマをアップロードし、リクエストを自動検証。不正なパラメータをブロック |
| mTLS(Mutual TLS) | クライアント証明書による相互認証。モバイルアプリ・IoTデバイスの認証に最適 |
| API Discovery | トラフィック分析によりAPIエンドポイントを自動検出。ドキュメント化されていないAPIを発見 |
| Sequence Mitigation | MLベースの異常リクエストシーケンス検出 |
| JWT Validation | JWTトークンの署名・有効期限・クレームを検証 |
mTLS実装方法
API Shield(推奨:API/IoT)
APIエンドポイント、IoTデバイス、モバイルアプリ向け。カスタムルールで柔軟な証明書検証が可能
Cloudflare Access(推奨:社内アプリ)
社内アプリケーション、管理画面向け。Zero Trustポリシーと統合。ユーザー+デバイス認証の組み合わせが可能
参考: Schema Validation | mTLS | API Discovery
- mTLS — 証明書ベースのクライアント認証とスキーマ検証を組み合わせて、正規クライアントからの正しい形式のリクエストのみ受け入れ → Section 2.12参照
- JWT Validation — JWTトークンの検証とスキーマ検証で、認証済みユーザーからの正しいAPIリクエストのみ許可 → Section 2.13参照
- Rate Limiting — エンドポイント別のレート制限で、API Discoveryで発見したエンドポイントを個別に保護 → Section 3.1参照
SSL/TLS 証明書
- Universal SSL(無料): Cloudflareが自動的に発行・更新するSSL証明書。すべてのプランで標準提供。ドメインとサブドメイン1段階まで対応(例:
*.example.com)。 - Advanced Certificate Manager(ACM・有料アドオン): カスタム証明書設定、複数レベルのワイルドカード、証明書の有効期限カスタマイズなどが可能。より厳格な要件がある場合に推奨。有料アドオン
Universal SSLを無効化すると、ACMが正しく設定・稼働していない場合、サイトがHTTPS接続不可になります。
無効化する前に必ず以下を確認してください:
- ACMが設定済みで証明書が「Active」状態であること。
- 対象ドメインのすべてのサブドメインがACMでカバーされていること。
- 証明書の更新が自動化されていること。
通常、Advanced Certificate Manager (ACM)の利用が推奨されます。より厳格な要件を持つお客様の場合、加えてUniversal SSL証明書を無効にすることをおすすめします(上記の確認を済ませた上で)。
| 設定項目 | 推奨値 | 参考 |
|---|---|---|
| TLSバージョン | 最小TLS 1.2(TLS 1.3も有効化推奨) | Minimum TLS Version |
| Always Use HTTPS | 有効(可能であればHTTPを完全無効化) | Always Use HTTPS |
| Automatic HTTPS Rewrites | 有効 | Automatic HTTPS Rewrites |
| オリジンとの暗号スイートの一致 | Match on origin で構成 | Match on Origin |
| エッジ証明書 | 常に有効かつアクティブな状態を維持 | Edge Certificates |
Custom Error Page
ブランディングがあなたとあなたのビジネスにとって重要である場合、カスタムページ(エラーおよびチャレンジ)またはカスタムエラーを設定できます。
🎨 カスタムブロックレスポンス
Cloudflare WAFでブロックされたリクエストに対するカスタムレスポンスを設定。ブランドに合わせたメッセージを表示できます。
⚠️ カスタムエラーページ
Cloudflare Rulesに対するカスタムエラーレスポンスを設定。ユーザー体験を向上させます。

Analytics & Log Management
マッチしたすべてのルールはSecurity Events(Security › Events)で確認できます。すべてのリクエストのより広範な概要はSecurity Analytics(Security › Analytics)で確認できます。
🚨 Suspicious Activity(不審アクティビティの監視)
Suspicious Activityは Security Analytics の機能で、有効化済みの各種検出機能が識別した不審なリクエストを一元的に可視化します。新しいセキュリティダッシュボード(dash.cloudflare.com/security)でのみ利用可能。

- Account Takeover(ATO)検出 — ボット管理機能が検知したアカウント乗っ取り試行。クレデンシャルスタッフィングや不審なログインパターンを特定。
- Leaked Credential Check(漏洩認証情報) — ユーザー名・パスワードが既知の流出データベースに含まれるログイン試行を検出。全プランで利用可能。
- Malicious Uploads(悪意のあるアップロード) — アップロードされたファイルにマルウェアや悪意のあるコンテンツが含まれていないかをスキャン。
- WAF Attack Score — SQLi・XSS・RCEなどの攻撃パターンを機械学習で検出したリクエスト。
- AI Security for Apps — AIアプリケーションに対するプロンプトインジェクション等の攻撃を検出。
🔍 ATOと漏洩認証情報の調査手順
- Security › Analytics を開き「Suspicious Activity」セクションを確認
- ATOまたはLeaked Credentialのイベントをフィルタリング
- 対象IPアドレス・User-Agent・地域などを特定
- 「Create custom security rule」からWAFルールを即時作成可能
- Rate Limiting(Section 3.4)と組み合わせて多層防御を構築
📊 Security Analyticsの活用ポイント
- Attack analysisタブ:WAF攻撃スコアの分布を確認(Clean / Likely clean / Likely attack / Attack)
- Bot analysisタブ:ボットスコアの分布を確認(Automated / Likely automated / Human)
- Request rate analysisタブ:適切なレート制限値を特定するために使用
- フィルタ適用後に「Create custom security rule」でルールを直接生成
📤 Logpush Enterprise
ログをストレージサービス(R2、S3など)、SIEM(Splunk、Datadog等)、またはログ管理プロバイダーにプッシュします。
🔍 Log Explorer Enterprise
ダッシュボード上でログを直接検索・分析できる機能です。Security Analyticsと同じフィルタを使ってドリルダウン調査が可能。
オリジンサーバー保護
オリジンサーバーのIPアドレスを保護し、Cloudflare経由のトラフィックのみを許可することは、最も重要なセキュリティ対策の一つです。攻撃者がオリジンサーバーのIPアドレスを特定すると、Cloudflareのセキュリティ保護を完全にバイパスして直接攻撃することが可能になります。オリジンIPアドレスのローテーション(変更)だけでは不十分です。攻撃者は履歴データ・DNS記録・誤設定・スキャンなどを通じて新しいIPアドレスを再び発見できるためです。Cloudflareは複数のレイヤーでオリジン保護機能を提供しています。

| レイヤー | 製品・機能 | 概要・推奨事項 |
|---|---|---|
| Application Layer (L7) |
Cloudflare Tunnel (HTTP / WebSockets) |
オリジンサーバーからCloudflareへのアウトバウンド接続を確立。ポートを開放せずにトラフィックを受信可能。最も安全なオリジン保護手法。 |
| HTTP Header Validation | Managed Transformsでカスタムヘッダーを追加し、オリジン側で検証。Cloudflare経由のリクエストのみを識別可能。 | |
| JSON Web Tokens (JWT) Validation | API Shieldを使用してJWTトークンを検証。API呼び出しの認証・認可を強化。 | |
| Transport Layer (L4-L5) |
Authenticated Origin Pulls | クライアント証明書(mTLS)でCloudflareからのリクエストを暗号学的に認証。SSL/TLS Full (Strict)と組み合わせて使用推奨。 |
| Cloudflare Tunnel (SSH / RDP) |
SSH・RDP等のTCPトラフィックもTunnel経由でルーティング可能。管理アクセスの保護に有効。 | |
| Network Layer (L3-L4) |
Allowlist Cloudflare IP addresses | オリジンファイアウォールでCloudflare IPアドレスのみを許可。最も基本的で重要な対策。必ず実装すること。 |
| Cloudflare Magic Transit | ネットワーク層DDoS保護。BGPアナウンスでトラフィックをCloudflareへルーティング。Enterprise専用。 | |
| Cloudflare Network Interconnect | Cloudflareネットワークとオリジンネットワークを専用接続で直結。最高レベルのパフォーマンスとセキュリティ。Enterprise専用。 | |
| Dedicated CDN Egress IPs | 専用のegressIPアドレスを割り当て、オリジン側で特定可能に。 |
Terraform & IaC 自動化
WAF設定をコード管理(Infrastructure as Code)することで、変更履歴の追跡、環境間の設定同期、災害復旧が容易になります。Cloudflare WAFはTerraformとcf-terraformingツールでコード化できます。
🔄 WAF設定のエクスポート
エクスポート可能な設定: カスタムルール、レート制限、Transform Rules、Managed WAFオーバーライド、OWASP設定、ルールセットバージョン
Step 1: 認証情報を設定
export CF_API_TOKEN="your-api-token-here" export ZONE_ID="your-zone-id-here"
Step 2: Ruleset IDを取得
まず、エクスポートしたいルールセットのIDを取得します。
curl "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets" \
-H "Authorization: Bearer ${CF_API_TOKEN}" | \
jq -r '.result[] | "\(.kind) - \(.name): \(.id)"'
出力例:
zone - default: 4e7d7cfc89e94db8a7071554de00#### zone - Cloudflare Managed Ruleset: efb7b8c949ac4650a09736fc376e#### zone - Cloudflare OWASP Core Ruleset: 4814384a9e5d4991b9815dcfc25d####
Step 3: ルール設定をエクスポート
取得したRuleset IDを使って、各ルールの詳細設定をエクスポートします。
カスタムルールをエクスポート:
RULESET_ID="4e7d7cfc89e94db8a7071554de00####"
curl "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets/${RULESET_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" | jq '.result.rules[]'
出力例:
{
"id": "d686e81f5ab84c20bd7155f5e26683a0",
"version": "4",
"action": "block",
"expression": "(cf.bot_management.score lt 30)",
"description": "Block suspicious bots",
"enabled": true
}
Managed WAFルールをエクスポート:
RULESET_ID="efb7b8c949ac4650a09736fc376e9aee"
curl "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets/${RULESET_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" | jq '.result.rules[]'
出力例:
{
"id": "5de7edfa648c4d6891dc3e7f84534ffa",
"version": "258",
"action": "execute",
"action_parameters": {
"id": "efb7b8c949ac4650a09736fc376e9aee",
"overrides": {
"enabled": true
}
},
"description": "Execute Cloudflare Managed Ruleset",
"enabled": true
}
🚀 cf-terraforming で自動変換
cf-terraformingは、Cloudflare設定を自動的にTerraformコードに変換する公式CLIツールです。
インストール
# macOS brew install cloudflare/cloudflare/cf-terraforming # Go経由 go install github.com/cloudflare/cf-terraforming/cmd/cf-terraforming@latest
カスタムルールをTerraform化
# Terraform設定ファイル生成 cf-terraforming generate \ --resource-type cloudflare_ruleset \ --zone $ZONE_ID > waf-custom-rules.tf # 既存リソースをTerraform stateにインポート cf-terraforming import \ --resource-type cloudflare_ruleset \ --zone $ZONE_ID
📝 手動Terraform設定例
カスタムWAFルール
resource "cloudflare_ruleset" "waf" {
zone_id = var.zone_id
name = "WAF Custom Rules"
kind = "zone"
phase = "http_request_firewall_custom"
rules {
description = "Block suspicious bots"
expression = "(cf.bot_management.score lt 30)"
action = "block"
}
}
レート制限ルール
resource "cloudflare_ruleset" "rate_limit" {
zone_id = var.zone_id
name = "Rate Limiting"
kind = "zone"
phase = "http_ratelimit"
rules {
description = "API rate limit"
expression = "(http.request.uri.path matches \"^/api/\")"
action = "block"
ratelimit {
characteristics = ["ip.src"]
period = 60
requests_per_period = 100
mitigation_timeout = 600
}
}
}
🔧 Managed WAF オーバーライド管理
Managed WAFルール自体はTerraformで作成できませんが、オーバーライド(action変更)は可能です。
・誤検知対策: 特定のルールを
log モードに変更・カテゴリ別設定: WordPress関連ルールを一括で
challenge に変更・テスト運用: すべてのルールを
log で動作確認後、段階的に block に移行
# 特定ルールのアクションをオーバーライド
curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets/phases/http_request_firewall_managed/entrypoint" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"rules": [{
"action": "execute",
"action_parameters": {
"id": "efb7b8c949ac4650a09736fc376e9aee",
"overrides": {
"rules": [{
"id": "5de7edfa648c4d6891dc3e7f84534ffa",
"action": "log"
}]
}
}
}]
}'
# WordPress関連ルールを一括でchallengeに変更する場合は、
# タグベースのオーバーライドを使用
📊 バージョン管理とロールバック
WAF設定のバージョン管理とロールバックは、Terraform(コード管理)またはCloudflare API(ルールセットバージョン管理)で実現できます。
現在のバージョン確認
curl "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets" \
-H "Authorization: Bearer ${CF_API_TOKEN}" | \
jq '.result[] | {id, name, version, last_updated}'
出力例:
{
"id": "efb7b8c949ac4650a09736fc376e9aee",
"name": "Cloudflare Managed Ruleset",
"version": "352",
"last_updated": "2026-04-27T20:47:27Z"
}
特定バージョンへロールバック
上記で確認したRuleset ID(efb7b8c949ac4650a09736fc376e9aee)を使って、バージョン352→351へロールバックします。
# Step 1: バージョン351の設定内容を取得
RULESET_ID="efb7b8c949ac4650a09736fc376e9aee" # 上記で確認したID
curl "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets/${RULESET_ID}/versions/351" \
-H "Authorization: Bearer ${CF_API_TOKEN}" > version-351.json
# Step 2: バージョン351へロールバック
curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets/${RULESET_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
-d @version-351.json
・Terraform + Git: 設定ファイルをGitで管理し、
git checkout + terraform apply でロールバック。変更履歴・差分確認・環境間同期が容易・Cloudflare API: Rulesets APIで直接バージョン351→352などを指定してロールバック。Terraformなしでも即座に復元可能
参考: Terraform Cloudflare Provider - Ruleset | cf-terraforming GitHub
Troubleshooting
🚨 よくある問題①:正常なトラフィックがブロックされている(誤検知)
WAFルールを有効化した後に正常なユーザーやAPIコールがブロックされている場合、以下の手順で診断します。
Ray IDを確認する
ブロックされたリクエストには Ray ID(例: 7f3a1b2c3d4e5f6a)が付与されます。ブロックページや HTTPレスポンスヘッダー cf-ray で確認できます。Ray IDは特定のリクエストを追跡するための一意の識別子です。
Security Eventsで該当リクエストを検索する
Security › Events を開き、Ray IDまたはIPアドレス・URLなどで絞り込みます。該当イベントをクリックすると「どのルールがマッチしたか」「どのフィールドが条件を満たしたか」が詳細に確認できます。
原因のルールを特定して例外を作成する
原因ルールが特定できたら、WAF例外(Exception)を作成して正常なトラフィックを除外します。例外は特定のパス・IPアドレス・ユーザーエージェントなどで絞り込めます。
それでも解決しない場合はルールをLOGに戻す
問題の原因が特定できない場合は、一時的にルールのアクションを BLOCK → LOG に変更して影響を把握してから再設定します。
📋 サポートへ問い合わせる際に必要な情報
- Ray ID:ブロックされたリクエストのRay ID(複数ある場合は複数記載)
- ゾーンID / アカウントID:ダッシュボードの Overview ページ右側に表示
- 問題の再現手順:どのURLに、どのような方法でアクセスするとブロックされるか
- Security Eventsのスクリーンショット:該当イベントの詳細画面
- 期待する動作と実際の動作:何がどう違うか
🔗 リソース
📡 ステータスページ
cloudflarestatus.com でCloudflareの稼働状況を確認。問題が発生しているときはまずここを確認。
📚 トラブルシューティングドキュメント
Troubleshooting Docs でよくある問題と解決策を参照。誤検知対応ガイドも参照してください。
🎫 Cloudflareサポート
上記の情報を収集の上 Cloudflareサポート に問い合わせ。Enterpriseユーザーは専任サポートを利用できます。
用語集 — Glossary
Cloudflare WAFおよびアプリケーションセキュリティに関連する主要な用語の定義です。
🔐 攻撃・脅威
- WAF 攻撃スコア / Attack Score
- 1〜99の数値でリクエストの悪意の可能性を示す指標。1に近いほど攻撃の可能性が高く、99に近いほど正常。SQLi・XSS・RCEの各カテゴリ別スコア(
cf.waf.score.sqli等)も提供。Cloudflareの機械学習モデルが算出。 - WAF クレデンシャルスタッフィング / Credential Stuffing
- 流出したユーザー名・パスワードの組み合わせを使い、自動化されたログイン試行を大量に行う攻撃手法。Cloudflareの漏洩認証情報検出機能(
cf.waf.credential_check)で検知可能。 - WAF 漏洩認証情報 / Leaked Credentials
- データ侵害や設定ミスなどで外部に流出した認証情報(ユーザー名・パスワード・APIキー等)。Cloudflareはデータベースと照合し、ログインリクエストに流出した認証情報が含まれているかをリアルタイムで検出できる。
- WAF プロンプトインジェクション / Prompt Injection
- 大規模言語モデル(LLM)のシステムプロンプトを上書き・操作する攻撃手法。AIを利用したアプリケーションに対する新種の脅威。Cloudflare WAFは攻撃スコアでLLM関連の攻撃も検知。
- Security SQLインジェクション / SQL Injection (SQLi)
- 悪意のあるSQLコードをリクエストに埋め込み、データベースを不正操作する攻撃。Cloudflare WAFマネージドルールセットで検出・ブロック可能。攻撃スコアフィールド:
cf.waf.score.sqli。 - Security XSS(クロスサイトスクリプティング)
- 悪意のあるスクリプトをWebページに埋め込み、閲覧したユーザーのブラウザ上で実行させる攻撃。攻撃スコアフィールド:
cf.waf.score.xss。WAFマネージドルールおよびRule ID882b37d6bd5f4bf2a3cdb374d503ded0で検出。 - Security RCE(リモートコード実行)
- 攻撃者がリモートからターゲットサーバー上で任意のコードを実行できる脆弱性・攻撃手法。攻撃スコアフィールド:
cf.waf.score.rce。 - Security アカウント乗っ取り / ATO(Account Takeover)
- 不正に取得した認証情報や自動化ツールを使い、他人のアカウントに不正アクセスする攻撃。クレデンシャルスタッフィングや総当たり攻撃(ブルートフォース)がよく使われる手法。
🤖 ボット・フィンガープリント
- Bots ボットスコア / Bot Score
- 1〜99の数値でリクエストが自動化ボットである可能性を示す。1〜29:ほぼ確実にボット、30〜99:人間の可能性が高い。フィールド:
cf.bot_management.score。利用にはEnterprise Bot Managementアドオンが必要。 - Bots 検証済みボット / Verified Bot
- CloudflareがGooglebotやBingbotなど、正規の自動化クライアントとして検証したボット。フィールド:
cf.client.bot(true/false)。これらは通常、WAFカスタムルールでSKIPして通過させることを推奨。 - Bots JA3フィンガープリント
- TLSハンドシェイク時のクライアントパラメータ(TLSバージョン・暗号スイート・拡張機能等)をハッシュ化した文字列。同じクライアントソフトウェアは同じJA3値を生成するため、ブラウザやボットの識別に使用できる。フィールド:
cf.bot_management.ja3_hash。 - Bots JA4フィンガープリント
- JA3の後継規格。TLSハンドシェイクの詳細をより細かく・安定的に識別できる新しいフィンガープリント手法。JA3より偽装が困難で、より精度の高いクライアント識別が可能。フィールド:
cf.bot_management.ja4。 - Bots Super Bot Fight Mode
- Pro・Businessプランで利用できるボット対策機能。自動化されたボットに対してCHALLENGEやBLOCKアクションを設定できる。Bot Managementスコア変数(
cf.bot_management.score)はこのモードでは使用不可。Security › Bots で設定。 - Bots JavaScript検出 / JSD(JavaScript Detection)
- CloudflareがHTMLレスポンスにJavaScriptを注入し、クライアントがブラウザとして正常に実行できるかを確認する仕組み。ブラウザを偽装するボットの検出に有効。フィールド:
cf.bot_management.js_detection.passed。Bot Managementアドオンが必要。 - Bots ボットタグ / Bot Tags
- なぜそのリクエストに特定のボットスコアが付与されたかの追加情報。「verified_bot」「ai_crawler」「search_engine_crawler」などのタグが付与される。フィールド:
cf.bot_management.tags。 - WAF ゼロショット分類モデル
- 学習時に見たことのないクラスにもデータを分類できる事前学習済み機械学習モデル。CloudflareはこのモデルをWAF攻撃スコアの算出に利用し、新種の攻撃パターンを既知のシグネチャなしに検出できる。
📋 ルール・設定
- WAF マネージドルールセット / Managed Ruleset
- Cloudflareが管理・更新するルールの集合体。既知の攻撃パターン(OWASP Top 10等)を自動的に検出・ブロックする。ユーザーはアクションや例外を設定できる。主要なものは「Cloudflare Managed Ruleset」と「OWASP Core Ruleset」の2種類。
- WAF WAF例外 / WAF Exception
- 特定の条件(パス・IPアドレス・User-Agent等)に一致するリクエストを、マネージドルールの検査対象から除外する設定。誤検知を解消するために使用。Security › WAF › Managed rules › Add exception で設定可能。
- WAF パラノイアレベル / Paranoia Level (PL)
- OWASPコアルールセットの積極性を分類するレベル。PL1(最も保守的・誤検知少)〜PL4(最も積極的・誤検知多)の4段階。新規ユーザーはPL1から始めることを推奨。
- WAF ルール特性 / Rule Characteristics
- レート制限ルールにおいて、どの基準でリクエスト数をカウントするかを定義するパラメータ。IPアドレス(
ip.src)・JA3ハッシュ・Cookie・ヘッダー値などを特性として設定できる。 - WAF 軽減済みリクエスト / Mitigated Request
- CloudflareがBLOCK・CHALLENGEなどの終端アクション(ターミネーティングアクション)を適用したリクエスト。LOGアクションは記録のみで軽減には含まれない。Security Eventsで確認可能。
- WAF コンテンツオブジェクト / Content Object
- リクエストボディの中でCloudflareがバイナリとして検出した部分。以下のコンテンツタイプに該当しないもの: text/html・text/x-shellscript・application/json・text/csv・text/xml。WAFのボディ検査に関係する概念。
- WAF レート制限 / Rate Limiting
- 一定時間内のリクエスト数が閾値を超えた場合にアクション(BLOCK・CHALLENGE等)を適用するルール。DoS攻撃・クレデンシャルスタッフィング・スクレイピング対策に有効。Security › WAF › Rate limiting rules で設定。
- WAF SIEM
- Security Information and Event Management(セキュリティ情報・イベント管理)の略。複数のソースからセキュリティログを収集・分析・相関付けするシステム。CloudflareのLogpushでSIEMにログを転送できる(Splunk・Datadog・Microsoft Sentinelなど)。
🌐 ネットワーク・認証
- Network ASN(自律システム番号)
- Autonomous System Numberの略。インターネット上の独立したネットワーク(ISP・クラウドプロバイダー・企業等)に割り当てられた一意の番号。WAFルールで特定のASNからのトラフィックをブロック・許可できる。フィールド:
ip.geoip.asnum。 - SSL/TLS mTLS(相互TLS認証)
- Mutual TLSの略。通常のTLSがサーバー証明書のみ検証するのに対し、mTLSではクライアントも証明書を提示してサーバーに認証される双方向認証。APIセキュリティやデバイス認証に有効。フィールド:
cf.tls_client_auth.cert_verified。 - SSL/TLS Authenticated Origin Pulls
- Cloudflareのエッジからオリジンサーバーへのリクエスト時に、Cloudflareがクライアント証明書を提示して認証する仕組み。オリジンはCloudflare経由のリクエストのみを受け付けることができる。SSL/TLS › Origin Server で設定。
- SSL/TLS CA(認証局)/ Certificate Authority
- Certificate Authorityの略。SSL証明書を発行・検証する信頼された第三者機関。Cloudflareは独自のPKI(Cloudflare PKI)を提供しており、mTLS用のクライアント証明書を発行できる。
- Network Anycast
- 同一のIPアドレスに対するリクエストを、地理的に最も近いCloudflareのデータセンターにルーティングするネットワーク方式。Cloudflareの300以上のデータセンターでAnycastを採用しており、DDoS緩和やレイテンシ低減に寄与。
- WAF Ray ID
- Cloudflareが各リクエストに付与する一意の識別子(例:
7f3a1b2c3d4e5f6a)。ブロックページやcf-rayレスポンスヘッダーで確認できる。Security Eventsでの検索やサポートへの問い合わせ時に必須の情報。 - Security ゾーン / Zone
- Cloudflareに登録されたドメイン(例:
example.com)の管理単位。WAF・DNS・SSL等の設定はすべてゾーン単位で行われる。アカウントには複数のゾーンを持つことができる。 - Security アローリスト / Allowlist & ブロックリスト / Blocklist
- Allowlist(許可リスト):アクセスを許可するIPアドレス・ドメイン等のリスト。Blocklist(ブロックリスト):アクセスを拒否するリスト。Cloudflare WAFの「Lists」機能(Security › WAF › Tools › Lists)でカスタムリストを作成・管理できる。
🔑 JWT・API
- API JWT(JSON Web Token)
- JSON Web Tokenの略。ヘッダー・ペイロード・署名の3部構成でBase64エンコードされた認証トークン。APIの認証・認可に広く使用される。Cloudflare API ShieldのJWT Validation機能で検証可能。
- API API スキーマ / API Schema
- APIが受け付けるリクエストの仕様(エンドポイント・HTTPメソッド・パラメータ形式等)を定義したドキュメント(OpenAPI/Swagger形式)。Cloudflare API ShieldのSchema Validationに登録することで、仕様外のリクエストをブロックできる。
- API ポジティブセキュリティモデル
- 既知の「許可すべきリクエスト」のみを通過させ、それ以外はすべてブロックするセキュリティアプローチ。既知の「悪意のあるリクエスト」をブロックするネガティブセキュリティモデルの対義語。API Shieldのスキーマ検証でこのモデルを実現できる。
- API フォールスルー / Fallthrough
- API Shieldで管理されているどのエンドポイント定義にも一致しないリクエスト。
cf.api_gateway.fallthrough_enabledとcf.api_gateway.matchフィールドを使ったカスタムルールでブロック可能(Section 2.3参照)。