利用できるレート制限ルールのパラメーターは、次の各セクションで説明します。
現在のルール設定の制限については、設定上の制限 を参照してください。
- データ型:
String - API のフィールド名:
expression(ルールフィールド)
レート制限ルールがリクエストに一致する条件を定義します。
- データ型:
Boolean - API のフィールド名:
requests_to_origin(省略可。Cloudflare ダッシュボードのオプションとは意味が逆です)
このパラメーターが無効な場合(または API の requests_to_origin フィールドが true の場合)、オリジンへ向かうリクエスト(つまりキャッシュされていないリクエスト)だけが、リクエストレートの判定に使われます。
設定上の制限により、Also apply rate limiting to cached assets パラメーターを無効にできない場合があります。詳細は 設定上の制限 を参照してください。
このルールパラメーターは、Cloudflare のプラン によっては利用できません。その場合、Cloudflare はキャッシュ済みアセットにもレート制限を適用します(パラメーターはデフォルトで有効です)。
- データ型:
Array<String> - API のフィールド名:
characteristics
ルールのリクエストレートを Cloudflare が追跡する方法を定義するパラメーターの集合です。
次の特性を 1 つ以上使います。
| ダッシュボードの値 | API の値 | 注記 |
|---|---|---|
| N/A(暗黙的に含まれる) | cf.colo.id(必須) |
式では使わない |
| IP | ip.src |
IP with NAT support と併用不可 |
| IP with NAT support | cf.unique_visitor_id |
IP と併用不可 |
| Header value of(ヘッダー名を入力) | http.request.headers["<header_name>"] |
API ではヘッダー名を小文字にする および フィールド欠落と空の値 |
| Cookie value of(Cookie 名を入力) | http.request.cookies["<cookie_name>"] |
推奨設定 および フィールド欠落と空の値 |
| Query value of(パラメーター名を入力) | http.request.uri.args["<query_param_name>"] |
フィールド欠落と空の値 |
| Host | http.host |
|
| Path | http.request.uri.path |
|
| AS Num | ip.src.asnum |
|
| Country | ip.src.country |
|
| JA3 Fingerprint | cf.bot_management.ja3_hash |
|
| JA4 | cf.bot_management.ja4 |
|
| JSON string value of(キーを入力) | lookup_json_string(http.request.body.raw, "<key>") |
フィールド欠落と空の値 および lookup_json_string() 関数リファレンス |
| JSON integer value of(キーを入力) | lookup_json_integer(http.request.body.raw, "<key>") |
フィールド欠落と空の値 および lookup_json_integer() 関数リファレンス |
| Form input value of(フィールド名を入力) | http.request.body.form["<input_field_name>"] |
フィールド欠落と空の値 |
| JWT claim of(トークン設定 ID、クレーム名を入力) | lookup_json_string( http.request.jwt.claims["<token_configuration_id>"][0], "<claim_name>") |
JWT 内のクレームの要件、フィールド欠落と空の値、JWT Validation のリファレンス |
| Body | http.request.body.raw |
|
| Body size(演算子を選び、サイズを入力) | http.request.body.size |
|
| Custom(式を入力) | カスタム式を入力します。substring() や lower() などの関数、またはより複雑な式を使えます。 |
関数 |
利用できる特性は、Cloudflare のプランによって異なります。詳細は 利用可否 を参照してください。
- データ型:
String - API のフィールド名:
counting_expression(省略可)
Use custom counting expression を有効にした場合のみ、Cloudflare ダッシュボードで利用できます。
リクエストレートの判定に使う条件を定義します。デフォルトでは、カウント式はルールの一致式(When incoming requests match で定義)と同じです。このフィールドを空文字("")にした場合も、同じデフォルトが適用されます。
カウント式には HTTP レスポンスフィールド を含められます。カウント式にレスポンスフィールドがある場合、カウントはレスポンス送信後に行われます。
設定上の制限により、カウント式に HTTP レスポンスフィールドを含められない場合があります。詳細は 設定上の制限 を参照してください。
- API のフィールド名: N/A(選んだオプションに応じて、必要な API フィールドが異なります)
レート制限のカウント方法は次のいずれかです。
- Request based: 一定期間内の受信リクエスト数に基づいてレート制限します。複雑度ベースのレート制限が使えない場合は、このカウント方法だけが利用できます。
- Complexity based: 一定期間内のリクエスト処理の 複雑度 またはコストに基づいてレート制限します。Advanced Rate Limiting 付きの Enterprise 顧客だけが利用できます。
- データ型:
Integer - API のフィールド名:
requests_per_period
ルールをトリガーする、期間あたりのリクエスト数です。リクエストベースのレート制限に適用されます。
- データ型:
Integer - API のフィールド名:
period
リクエストレートを評価するときの期間(秒)です。利用できる値は Cloudflare のプランによって異なります。
利用できる API の値は、10、60(1 分)、120(2 分)、300(5 分)、600(10 分)、3600(1 時間)です。
- データ型:
Integer - API のフィールド名:
score_per_period
期間あたりの最大スコアです。この値を超えると、ルールアクションが実行されます。複雑度ベースのレート制限 に適用されます。
- データ型:
String - API のフィールド名:
score_response_header_name
オリジンサーバーが設定する、現在のリクエストのスコアを持つレスポンス HTTP ヘッダーの名前です。複雑度ベースのレート制限 に適用されます。
- データ型:
String - API のフィールド名:
action(ルールフィールド)
ルールで指定したレートに達したときに実行するアクションです。
API では次のいずれかの値を使います。block、js_challenge(Non-Interactive Challenge)、managed_challenge(Managed Challenge)、challenge(Interactive Challenge)、log。
Block アクションを選んだ場合は、次のパラメーターでカスタムレスポンスを定義できます。
- データ型:
String - API のフィールド名:
response>content_type(省略可)
レート制限でリクエストをブロックするときの、カスタムレスポンスのコンテンツタイプを定義します。ルールアクション を Block にした場合のみ利用できます。
利用できる API の値: application/json、text/html、text/xml、text/plain。
- データ型:
Integer - API のフィールド名:
response>status_code(省略可)
レート制限でリクエストをブロックするときに訪問者へ返す HTTP ステータスコードを定義します。ルールアクション を Block にした場合のみ利用できます。
400 から 499 の値を入力します。デフォルト値は 429(Too many requests)です。
- データ型:
String - API のフィールド名:
response>content(省略可)
レート制限でリクエストをブロックするときに返す HTTP レスポンスの本文を定義します。ルールアクション を Block にした場合のみ利用できます。
フィールドの最大サイズは 30 KB です。
- データ型:
Integer - API のフィールド名:
mitigation_timeout
レートに達したあと、レート制限ルールはこのフィールドで定義した期間(秒)、以降のリクエストにルールアクションを適用します。
ダッシュボードでは、Cloudflare のプランによって異なる 利用可能な値から選びます。利用できる API の値は、0、10、60(1 分)、120(2 分)、300(5 分)、600(10 分)、3600(1 時間)、86400(1 日)です。
Free、Pro、Business プランの顧客は、チャレンジアクション を使うときに継続時間を選べません。これらのアクションでは、レート制限ルールは常にリクエストのスロットルを行います。リクエストのスロットルでは、継続時間は定義しません。訪問者がチャレンジに合格すると、対応する リクエストカウンター はゼロになります。同じルール特性の値を持つ訪問者が、ふたたびレート制限ルールをトリガーする件数のリクエストを送ると、新しいチャレンジを受けます。
Enterprise の顧客は、チャレンジアクションのいずれかを使う場合でも、継続時間(または mitigation timeout)を常に設定できます。
- データ型:
Integer - API のフィールド名:
mitigation_timeout
選んだアクションの正確な動作を定義します。
アクションの動作は次のいずれかです。
-
Perform action during the selected duration: 選んだ継続時間中に受け取ったすべてのリクエストに、設定したアクションを適用します。API でこの動作を設定するには、
mitigation_timeoutを 0 より大きい値にします。詳細は For duration(継続時間) を参照してください。
-
Throttle requests over the maximum configured rate: 設定した上限を超える受信リクエストに選んだアクションを適用し、それ以外のリクエストは許可します。API でこの動作を設定するには、
mitigation_timeoutを0(ゼロ)にします。
同じ IP アドレスを共有する NAT 配下のリクエストなどには、IP with NAT support を使います。Cloudflare は、セッション Cookie の利用を含む、さまざまなプライバシー保護の手法でユニークな訪問者を識別します。詳細は Cloudflare Cookies を参照してください。
IP with NAT support は、Cookie ベースの訪問者識別(_cfuvid cookie)に依存します。次の点に注意してください。
- Cookie を消去する、プライベートブラウジングを使う、Cookie を受け入れない訪問者は、個別に識別されません。これらの訪問者からのリクエストは 1 つのカウンターバケットを共有するため、トラフィックの多い NAT 環境では誤検知が起きることがあります。
- ログインや決済エンドポイントの保護など、セキュリティ上重要なレート制限では、識別漏れの影響を減らすために、IP with NAT support を Path や Header value of などの他の特性と組み合わせます。
同じレート制限ルールの特性として、IP with NAT support と IP の両方は使えません。
cf.colo.id 特性(データセンター ID)は、ルール式のフィールドとして使わないでください。また、cf.colo.id の値は予告なく変わることがあります。このレート制限特性の詳細は、リクエストレートの計算 を参照してください。
API リクエストで Header value of 特性を使う場合(http.request.headers["<header_name>"])、ヘッダー名は小文字で入力します。Cloudflare はグローバルネットワーク上でヘッダー名を正規化します。
Header value of、Cookie value of、Query value of、JSON string value of、lookup_json_integer(...)、Form input value of の特性を使い、該当するヘッダー / Cookie / パラメーター / JSON キー / フォームフィールド名がリクエストにない場合でも、カウント式によってはレート制限ルールがリクエストに適用されることがあります。
そのようなリクエストを除外しないと、フィールドが存在しないリクエスト専用の リクエストカウンター が作られ、フィールドは存在するが値が空のリクエスト用カウンターとは別になります。
たとえば、特定のレート制限ルールの文脈で、特定の HTTP ヘッダーが存在するリクエストだけを対象にするには、ルールのカウント式に次のような条件を含めます。
and len(http.request.headers["<header_name>"]) > 0
<header_name> は、レート制限特性として使ったヘッダー名と同じです。
レート制限ルールの特性として Cookie value of を使う場合は、次を推奨します。
- その Cookie に複数の値があるリクエストをブロックする カスタムルール を作成します。
- 負荷の高いサーバー処理を行う前に、オリジンで Cookie 値を検証します。
JSON Web Token(JWT)内のクレームを使うには、先に API Shield で トークン検証の設定 を行う必要があります。
-
When incoming requests match パラメーターで定義するルールのフィルター式に カスタムリスト が含まれる場合は、Also apply rate limiting to cached assets パラメーターを有効にする必要があります。
-
ルールのフィルター式に HTTP レスポンスフィールド は含められません。
-
Increment counter when パラメーターで定義するルールのカウント式に、HTTP レスポンスフィールド と カスタムリスト の両方は含められません。カスタムリストを使う場合は、Also apply rate limiting to cached assets パラメーターを有効にする必要があります。
-
アカウントレベル でレート制限ルールセットを作成する場合、ルールセットのデプロイ式(スコープを定義する式)に HTTP レスポンスフィールド や カスタムリスト は含められません。