現代のWeb環境において、個人ブログ、コーポレートサイト、SaaSクラウドプラットフォームを問わず、世界中から押し寄せる自動化ボットネット(Botnet)や悪質なスクレイピングプログラムの脅威に日々晒されています。攻撃者はスクリプトを用いてパスワードを総当たりで試行する「ブルートフォース攻撃(Brute Force)」を仕掛けたり、負荷の高い検索エンドポイントを頻繁に呼び出してサーバーリソースを枯渇させたり、あるいはAPIエンドポイントへ大量のリクエストを浴びせかける「レイヤー7(アプリケーション層)DDoS攻撃」を実行したりします。
世界有数のクラウドセキュリティおよびコンテンツ配信ネットワーク(CDN)を提供するCloudflareは、その「Webアプリケーションファイアウォール(WAF)」において、強力かつ柔軟な「レート制限ルール(Rate Limiting Rules)」機能を提供しています。リクエスト頻度を精密にコントロールすることで、サイト管理者は異常なバーストトラフィックをミリ秒単位で検知・遮断し、バックエンドのオリジンサーバー(Origin Server)の安定稼働を維持することができます。
本記事では、Cloudflare WAFにおけるレート制限ルールの構築手順、主要パラメータの設定テクニック、そして代表的な防御ユースケースをわかりやすく解説します。
Cloudflare WAF レート制限ルールの設定手順
Cloudflareの管理ダッシュボードにログインすれば、直感的なUIまたは複合ルール式を使って即座にデプロイできます。
- Cloudflare ダッシュボードへログイン
Cloudflare Dashboard にアクセスし、アカウントにログインします。 - 対象ドメイン(Zone)を選択
Webサイト一覧から、セキュリティ設定を行いたい対象ドメインをクリックします。 - WAF セキュリティ設定画面へ移動
左側サイドバーのナビゲーションメニューから、「セキュリティ(Security)」 > 「WAF」の順にクリックします。 - レート制限ルールタブを開く
WAF画面上部のタブから「レート制限ルール(Rate limiting rules)」に切り替え、右側の「ルールを作成(Create rule)」ボタンをクリックします。
主要パラメータの詳細と実践設定
レート制限ルールの編集画面では、高度にカスタマイズ可能な条件フィルターと実行アクションを設定できます。
| パラメータ項目 | 機能概要と設定のポイント | 実践設定例 |
|---|---|---|
| ルール名(Rule Name) | 将来の運用・管理を見据え、防護目的が明確にわかる名前を付けます。 | Protect WordPress Login POST |
| 一致条件(Incoming Request) | カウント監視の対象とするリクエスト条件をURIパス、HTTPメソッド、クエリパラメータ、ヘッダー等で定義します。 | (http.request.uri.path eq "/wp-login.php" and http.request.method eq "POST") |
| カウント基準(Characteristics) | どの単位でリクエスト数を個別集計するかを決定します。通常は「IPアドレス(IP Address)」を指定します。上位プランでは特定ヘッダーやCookieも選択可能です。 | IP |
| リクエスト閾値(Requests) | 指定した時間枠内で、単一クライアント(基準単位)に許可する最大リクエスト数を設定します。 | 5 requests |
| 評価期間(Period) | リクエスト頻度を算出するスライディングタイムウィンドウ(例:10秒、1分など)。 | 1 minute |
| アクション(Action) | リクエスト頻度が閾値を超えた際に、Cloudflareのエッジノードが実行する処理動作。 | Managed Challenge(マネージドチャレンジ) または Block(ブロック) |
| 軽減期間(Duration) | 閾値超過アクションが発動した後、そのクライアントへの制限を継続させる時間(10秒〜数時間)。 | 1 minute |
代表的な3大防御シナリオ
シナリオ1:WordPressのログイン画面を保護し、ブルートフォース攻撃を遮断
WordPressのデフォルトの /wp-login.php や /xmlrpc.php は、攻撃スクリプトが辞書攻撃やパスワードクラッキングを最も頻繁に仕掛ける標的です。POSTリクエストの頻度を制限することで、総当たり攻撃を完全に無力化できます。
- ルール式(Expression):
(http.request.uri.path eq "/wp-login.php" and http.request.method eq "POST") - 閾値設定:1分間に5回を超えるリクエスト
- アクション:
Block(HTTP 429ステータスコードを返却)またはManaged Challenge - 軽減期間:5分間制限
シナリオ2:機密APIエンドポイントおよびSMS/メール認証コード送信インターフェースの乱用防止
多くのWebサービスが提供する「認証コード送信」や「パスワードリセット」APIは、第三者によって「SMSボミング(大量送信スパム)」のツールとして悪用されやすく、事業者に莫大な従量課金コストを発生させる危険があります。
- ルール式(Expression):
(http.request.uri.path starts_with "/api/v1/auth/send-code" and http.request.method eq "POST") - 閾値設定:1分間に2回を超えるリクエスト
- アクション:
Block - 軽減期間:1時間制限
シナリオ3:社内管理者および既知のオフィスIPのホワイトリスト除外
社内開発チームや正規のクローラー(Googlebotなど)が特定リソースへ高頻度でアクセスする必要がある場合、誤遮断を避けるために例外条件を追加します。
- ルール式(Expression):
(http.request.uri.path starts_with "/api/" and not ip.src in {203.0.113.1 198.51.100.5})
ベストプラクティスと誤遮断(フォールスポジティブ)対策
- 運用初期は「Log(ログ記録のみ)」モードを活用する
新しいレート制限ルールを作成した直後は、アクションをまず「Log」に設定し、24〜48時間ほどトリガー状況を観察することをお勧めします。一般ユーザーの正当な操作に悪影響がないことを確認してから、本格的な「Block」や「Managed Challenge」へ切り替えましょう。 - NAT共有IPによる一般ユーザーの巻き添え誤遮断に注意
大学のキャンパス、公共交通機関の無料Wi-Fi、大企業のオフィス回線、モバイル回線などではNATアーキテクチャが採用されており、数百人〜数千人のユーザーが単一のパブリックIPを共有しています。閾値をあまりに厳しく設定しすぎると(例:1秒間に3回で即ブロックなど)、多数の正規ユーザーがサイトを閲覧できなくなる恐れがあります。多くのシナリオにおいて、即座の遮断よりも「Managed Challenge(マネージドチャレンジ)」を採用する方が、ユーザーフレンドリーかつ安全です。 - Cloudflareのプラン制限とクォータを把握する
Cloudflareの無料プラン(Free Tier)では作成可能なレート制限ルールの数や基本枠に制限があります。Pro、Business、Enterpriseプランでは、より詳細なHTTPヘッダー照合、独自のカスタム429エラー画面の提供、そしてより高度な同時アクセス耐性がサポートされています。トラフィック規模の拡大に応じて定期的に利用状況レポートを確認しましょう。
独自の視点と客観的な報道を、あなたの温かい支援で
表面的なトレンドやアルゴリズムに流されず、事実と深い洞察に基づいた独立した記事をお届けし続けるために。
質の高いオリジナル記事と独立した運営を続けるため、1回のみ、または毎月のご支援をGoogleの安全な決済でお願いいたします。
お支払いはGoogleにより安全に処理されます · いつでも管理・解約できます




コメント