Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Sequence mitigation のカスタムルール

最終更新 Markdown で表示Agent セットアップ

API Shield のシーケンスカスタムルールは、設定した API Shield の セッション識別子 を使い、ユーザーが行ったリクエストの順序とリクエスト間の時間を追跡し、Cloudflare Rules で利用できるようにします。有効または無効なシーケンスに一致するルールを書けます。

これらのルールは cookie sequence rules に似ていますが、前提条件が異なります。

  • API Shield で セッション識別子 を設定する必要があります。
  • セッション識別子が必要なため、セッション識別子で個々のユーザーに明確に紐づけられるトラフィック(認証済みトラフィック)でのみ使えます。
  • Cloudflare はユーザーステートを Cookie ではなくメモリに保存するため、セッションのシーケンスの有効期間は 10 分です。
  • シーケンスシステムを有効にするには、API sequence rule を少なくとも 1 件設定する必要があります。

これらのカスタムルールで作るルールは、API または Cloudflare ダッシュボード で設定できるシーケンスルールと同様で、同じ基盤技術を使います。ただし、記録したシーケンスの上に自由形式のロジックを使え、rulesets が提供する応答オプションすべてにアクセスできるため、柔軟性が高くなります。

提供状況

これらのシーケンスフィールドは、次で利用できます。

フィールド名説明値の例

cf.sequence.current_op
String

現在のリクエストに一致するオペレーションの ID です。Endpoint Management で定義したどのオペレーションにも一致しない場合は、空文字列になります。

c821cc00

cf.sequence.previous_ops
Array<String>

シーケンス内の直前までのオペレーション ID の配列です。新しい順に並びます。現在のリクエストは含まれません。

同じオペレーションが繰り返された場合は、シーケンス内に複数回現れます。

["f54dac32", "c821cc00", "a37dc89b"]

cf.sequence.msec_since_op
Map<Number>

キーがオペレーション ID、値がそのオペレーションが直近で発生してからのミリ秒数であるマップです。

現在のリクエストやオペレーションは含まれません。シーケンス内の以前のオペレーションだけを対象にします。

{"f54dac32": 1000, "c821cc00": 2000}

シーケンスカスタムルールを作成する

  1. Cloudflare ダッシュボードで Security rules ページを開きます。

    Security rules を開く ↗
  2. 空のルールを新規作成するには、Create rule > Custom rules を選びます。

  3. Rule name に、ルールの内容が分かる名前を入力します。

  4. When incoming requests match で、Field のドロップダウンから Sequences で絞り込み、次のいずれかを選びます。

    • Current Operation
    • Previous Operations
    • Elapsed time
  5. Value で編集アイコンを選び、Builder を使ってサイドパネルでシーケンスを組み立てます。

  6. Select a hostname for this sequence で、ドロップダウンからすべて、または特定のホスト名を選びます。任意で、検索バーから特定のホスト名を検索できます。

  7. Methods のドロップダウンから、すべてのメソッド、または特定のリクエストメソッドを選びます。

  8. シーケンスに含めたい順に、各エンドポイントのチェックボックスを選びます。

  9. 完了までの時間を設定します。

  10. Save を選びます。

  11. Then take action で、Choose action のドロップダウンからルールのアクションを選びます。たとえば Block を選ぶと、指定した条件に一致するリクエストを Cloudflare が拒否します。

  12. (任意)Block アクションを選んだ場合は、カスタムレスポンスを設定できます。

  13. Place at で、ルールを実行する順序を選びます。

  14. ルールを保存してデプロイするには、Deploy を選びます。まだデプロイしない場合は、Save as Draft を選びます。

ルールの例

保存した各エンドポイントには、Endpoint Management の詳細ページで UUID 形式のエンドポイント ID が表示されます。以下の参照(aaaaaaaabbbbbbbbcccccccc)は、エンドポイント ID の先頭 8 文字です。

訪問者は、エンドポイント aaaaaaaa をリクエストしたあと、エンドポイント bbbbbbbb をリクエストするまで 2 秒以上待つ必要があります。

cf.sequence.current_op eq "bbbbbbbb" and 
cf.sequence.msec_since_op["aaaaaaaa"] ge 2000

訪問者は、エンドポイント aaaaaaaa、次に bbbbbbbb、次に cccccccc を、この順序でリクエストする必要があります。

cf.sequence.current_op eq "cccccccc" and 
cf.sequence.previous_ops[0] == "bbbbbbbb" and 
cf.sequence.previous_ops[1] == "aaaaaaaa"

訪問者は、エンドポイント bbbbbbbb の前にエンドポイント aaaaaaaa をリクエストする必要があります。ただし、エンドポイント aaaaaaaa は直近 10 件のリクエストのどこにあっても構いません。

cf.sequence.current_op eq "bbbbbbbb" and 
any(cf.sequence.previous_ops[*] == "aaaaaaaa")

訪問者は、エンドポイント bbbbbbbb の前にエンドポイント aaaaaaaa をリクエストするか、エンドポイント bbbbbbbb の前にエンドポイント cccccccc をリクエストする必要があります。

(cf.sequence.current_op eq "bbbbbbbb" and 
any(cf.sequence.previous_ops[*] == "aaaaaaaa")) or 
(cf.sequence.current_op eq "bbbbbbbb" and 
any(cf.sequence.previous_ops[*] == "cccccccc"))

役に立ちましたか?