Cloudflareレート制限を設定し、DoS攻撃、ブルートフォース攻撃のログイン試行、その他の不正行為からWebサイトアプリケーションを保護する方法を説明します。
概要
Cloudflareレート制限は、自動的に特定のURLに対する過剰なリクエストレート、またはドメイン全体に対する過剰なリクエストレートを特定し、軽減します。リクエストレートは、個々のCloudflareデータセンターをローカルに計算します。レート制限の用途は、DDoS攻撃からの保護、ブルートフォース攻撃からの保護、フォーラム検索、APIコール、オリジンでデータベース集中操作を含むリソースへのアクセスを制限するのが最も一般的です。
個々のIPv4アドレスまたはIPv6 /64 IP範囲がルールのしきい値を超えると、クライアントがリクエストの送信を再開できるタイミングを示す Retry-After ヘッダーを含むHTTP 429レスポンスで、オリジンWebサーバーへのリクエストがさらにブロックされます。
Analytics
「セキュリティ」タブ下のCloudflare分析アプリにあるレート制限分析を表示します。レート制限分析は、実線でシミュレートされたリクエストと一致するトラフィックを表し、点線で実際にブロックされたリクエストを表します。レート制限ルールで生成されたログは、Cloudflare Logsを通じてEnterpriseプランのお客様にだけ表示されます。
Cloudflareは、ブロックされたリクエストに対してHTTP429エラーを返します。ロケーションごとにブロックされたリクエストの詳細は、「トラフィック」タブ下のCloudflare分析アプリにあるステータスコード分析で、Enterpriseプランのお客様に提供されます。
プランごとのレート制限許可
許可されるレート制限ルールの数は、ドメインのプランによって異なってきます:
プラン | ルール番号 | Actions | アクション時間 | リクエスト期間 |
---|---|---|---|---|
無料 | 1 | ブロック | 1分または1時間 | 10秒または1分 |
Pro | 10 | ブロック、チャレンジ、JSチャレンジ、またはシミュレート | 1分または1時間 | 10秒または1分 |
Business | 15 | ブロック、チャレンジ、JSチャレンジ、またはシミュレート | 1分、1時間、または24時間 | 10秒、1分または10分 |
Enterprise | 100 | ブロック、チャレンジ、JSチャレンジ、またはシミュレート | 10秒から86400秒(24時間)の間で入力された時間 | 1秒から3,600秒の間で入力された値です。 |
Cloudflareレート制限は、ドメインのClouflareプランによって、複数レベルの設定管理をサポートしています。次の表では、ご利用中のプランでできることがまとめてあります:
# | タスク | 利用できるプラン |
---|---|---|
1 | 基本レート制限ルールを設定 | 全プラン |
2 | 高度な条件を設定 | BusinessプランとEnterpriseプラン |
3 | 高度なレスポンスを設定 | BusinessプランとEnterpriseプラン |
4 | バイパスオプションを設定 | メリットと特長 |
レート制限ルールのコンポーネント
レート制限ルールは三つの異なるコンポーネントから構成されています。次のコンポーネントをクリックして詳細を展開してください:
受信リクエストを次項に基づいて一致します:
リクエストパス
例:
- http://example.com/example
- http://example.com/example/*
リクエストパスは、アルファベットの大文字と小文字が区別されません。パターンは、クエリストリング (?)またはアンカー (#)の後のコンテンツと一致しません。アステリスク (*) は、空のシーケンスを含め、どの文字のシーケンスとも一致します。例:
- *.example.com/* は、example.comのサブドメインでなら、どのパスでも一致します
- *example.com/example.html は、example.com の example.htmlと一致し、example.comのドメインはどれでも、
- *サイトのページと一致します。
example.com/path のリクエストは、example.com/path/とは同じではありません。 このルールで唯一の例外はホームページで、example.com は example.com/と一致します。
リクエストスキーム
HTTP またはHTTPSです。 指定されるものがない場合、両方が一致し、ルールは_ALL_と一覧表示されます。
リクエスト方法
POST (投稿)または GET(取得)です。 指定されるものがない場合、全ての方法が一致し、ルールは_ALL_と一覧表示されます。
(任意)オリジンレスポンスコード
例えば、HTTP401または403がオリジンWebサーバーから返される時だけ、レート制限ルールを適用します。レスポンスコード基準を満たすトリガールールは、オリジンレスポンスコードにかかわらず、クライアントからの継続するリクエストをブロックします。
ルールは、同じクライアントからのリクエスト全てで、その数も期間も一致することがあります。
リクエストの数
最低でもリクエストを二つ指定します。一つのリクエストをブロックする場合は、パスを利用不可能にします。例えば、オリジンWebサーバーを403を返すように設定します。
リクエスト期間
クライアントのリクエストが特定期間中にしきい値を超えると、ルールがトリガーされます。
ルール緩和、は次の要素で構成されています。
緩和アクション
レート制限アクションは、プランごとのレート制限許可で述べた通り、ドメインプランに基づいています。
- ブロック - しきい値を超えると、CloudflareがHTTP 429を出します。
- チャレンジ -訪問者は、Google reCHPTCHAチャレンジに合格しなければなりません。合格すると、Cloudflareがリクエストを許可します。
- JS チャレンジ -訪問者はCloudlfare Javascriptチャレンジに合格しなければなりません。 合格すると、Cloudflareがリクエストを許可します。
- シミュレート - リクエストがCloudflare Logsにログインされます。これは、本番で適用される前にルールをテストするのに役立ちます。
禁止期間
しきい値よりも短いタイムアウトを設定すると、APIが自動的にしきい値と同じになるようにタイムアウトを増やします。
レート制限訪問者は、カスタムエラーページが特定されないと、既定のHTMLページを受け取ります。さらに、BusinessプランとEnterpriseプランのお客様は、ルールそのものでレスポンスを特定できます。下記のTask 3:高度なレスポンスを設定するをご覧ください。
レート制限のしきい値を特定する
Cloudflareレート制限の一般的なしきい値を特定するには、キャッシュされていないWebサイトリクエストを同じ24時間のユニーク訪問者で割ります。そして、訪問の推定平均時間(分)で割ります。最後に4(またはそれ以上)で掛けて、1分あたりの推定しきい値を決めます。攻撃のほとんどが典型的なトラフィックレートを上回る指標なので、4より上の値は問題ありません。
特定のURLへのURLレート制限を認識するために、キャッシュされていないリクエストと特定のURLへのユニーク訪問者に24時間使用します。ユーザーレポートとご自身のモニタリングに基づいてしきい値を調整します。
Task 1: 基本レート制限ルールを設定する
Cloudflare レート制限ルールの一般的なルールを二つ作成する方法の詳細をクリックして、展開します。
レート制限では、5分以内に5つ以上のPOST(投稿)リクエストを送信する際、ルールとして15分間クライアントをブロックできる「ログインを保護する」機能が1クリックでできるツールがあります。これはブルートフォースの試行をほとんどブロックします。
- Cloudflareアカウントにログインします。
- 保護したいドメインを選択します。
- ファイアウォールアプリをクリックし、「ツール」(Tool)タブをクリックします。
- レート制限の「ログインを保護する」をクリックします。
- ダイアログが表示される「ログインを保護する」で、ルール名と「ログインURLを入力する」を入力します。
- 「保存」(save)をクリックします。
- レート制限ルールの一覧に、ルール名が表示されます。
1. Cloudflareのダッシュボードにログインします。
2. ドメインを選択します。
3. ファイアウォールアプリをクリックし、「ツール」タブをクリックします。
4. 「カスタムルールを作成する」をクリックします。新しいルールの詳細を特定するところで、ダイアログが開きます。

5. 説明的に「ルール名」を入力します。
6. 「URLと一致するトラフィックの場合」(If Traffic Matching the URL)では、ドロップダウンからHTTPスキームとURLを選択します。
7. 「同じIPアドレスからの超過」(from the sme IP address exceeds)では、1以上の整数を入力し、サンプリング期間のリクエスト数を示します。
8. 「時間ごとのリクエスト」(requests per)については、サンプリング期間(リクエストがカウントされる期間)を選択します。
9. 「次に」(Then)ドロップダウンは、ご利用中のプランで利用できるアクションを一つ選びます。詳細については、上記のレート制限ルールのコンポーネントにあるルール緩和セクションを確認してください。
10. ブロックまたはシミュレートを選択した場合、訪問者からのトラフィックと一致させるためにしきい値がトリガーされたオプションを適用する時間を選択します。
11. 新しいルールをアクティブ化するために、「保存して展開する」をクリックします。
12. レート制限ルールの一覧に、ルール名が表示されます。
一般的に、低いしきい値を設定する際は:
- 既存のルールをそのままにし、低いしきい値で新しいルールを追加します。
- 新しいルールが設定されたら、古いルールを削除する前に古いルールのアクション期間が経過するのを待ちます。
(正当なクライアントブロックが理由で)高いしきい値を設定する際は、既存のルール内でしきい値を増やします。
Task 2: 高度な基準を設定する(BusinessとEnterpriseプランのみ)
高度な基準オプションがHTTPメソッド、ヘッダーレスポンス、レート制限ルールと一致するオリジンレスポンスコードを設定します。
新規のルールまたは既存のルールへの高度な基準を設定するには、次の手順にしたがってください。
1. 「高度な基準」をクリックします。

2. メソッドドロップダウンから値を選択します。「全て」は、HTTPメソッド全てと一致するデフォルトです。
3. HTTPレスポンスヘッダーでフィルターをかけます。CF-Cache-Statusヘッダーは、デフォルトで表示されます。そのため、Cloudflareはこうしたリソースのレート制限ではなく、キャッシュされたリソースを提供します。「ヘッダーレスポンスフィールドを追加する」をクリックし、オリジンWebサーバー から戻されたヘッダーを含めます。
HTTPレスポンスヘッダーで、複数のヘッダーがある場合、ANDブール論理が適用されます。ヘッダーを除外する場合は、等しくないオプションを使用します。また、各ヘッダーはアルファベットの大文字と小文字を区別しません。
4.オリジンレスポンスコードで、一致する各HTTPレスポンスコードの数値を入力します。カンマを使って、二つ以上のHTTPコードを区切ります。例えば、401, 403 。
5. 「保存して展開する」をクリックするか、ご利用中のプランで追加が許可されるレート制限機能を設定します。
Task 3: 高度なレスポンスを設定する(BusinessとEnterpriseプランのみ)
高度なレスポンスオプションは、ルールのしきい値が超えた時に戻される情報フォーマットを設定します。これは、次の手順で設定されます。
1. 「高度なレスポンス」をクリックします。

2. レスポンスタイプのフォーマットを選択します。最大レスポンスサイズは、32kbです。
カスタムHTMLページまたは32kB制限以上を表示するために、アクションパラメーターのレスポンスオブジェクトを経由し、Cloudflare APIを介してメタデータ更新をレート制限ルールに追加します。例:
"response": { "content_type": "text/html", "body": "\u003cmeta http-equiv=\"refresh\" content=\"0; url=
https://www.example.com/about
\" /\u003e"}
レート制限ルールは、リダイレクトURLとマッチしていなければなりません。DDoS攻撃から保護するには、リダイレクトするページにCloudflareがキャッシュしたリソースを含んでいる必要があります。
3. 保存して展開するをクリックするか、ご利用中のプランにある追加機能を設定します。
Task 4: バイパスオプションを設定する(Enterpriseプランのみ)
バイパスは、ホワイトリストに設定または例外を作成します。そうすることで、レート制限が一致したとしてもURLの指定セットを適用するアクションは出てきません。次の手順でバイパスを設定します:
1. バイパスをクリックします。
2. こうしたURLテキストボックスのバイパスルールで、レート制限ルールを免除するためにURLを入力します。URLの行に各URLを入力します。URLで指定されているHTTPまたはHTTPSは、ルールが保存されると自動的に消去され、代りにHTTPとHTTPSの両方に適用されます。

3. 「保存して展開する」をクリックするか、ご利用中のプランに基づいて追加機能を設定します。