フィールド、関数、および式の使用法

アクションに加え、フィールドと式は、WAFのカスタムルールの構成要素です。 これらの要素が連携して、カスタム・ルールのマッチング基準を定義する。

フィールド

CIS が HTTP リクエストを受け取ると、リクエストを分析し、マッチングのためのフィールドのテーブルを作成する。 このフィールドテーブルはリクエストが処理されている間だけ存在し、式 のマッチングに使用されるリクエストプロパティを含む。

各フィールド値は、以下のようなさまざまな場所から取得される可能性があります。

  • トラフィックから直接取得されるプリミティブ・プロパティー (例えば、http.request.uri.path)。
  • 変換、構成、または基本操作の結果得られる派生値。例えば、 http.request.uri.path の値をすべて小文字にし、別のフィールドのフィールドとして使用できるようにします。
  • 検索、計算、またはその他のインテリジェンス機能によって得られるコンピューター値。例えば、関連するプリミティブ値および派生値を検査する機械学習プロセスによって動的に計算される cf.threat_score

使用可能なフィールド

使用可能なフィールド
フィールド名 タイプ 値の例 注記
http.cookie ストリング session=A12345;-background=light ストリングとしての Cookie 全体
http.host ストリング www.example.com リクエストURI全体で使用されているホスト名
http.referer ストリング HTTP リファラー・ヘッダー リファラーヘッダー HTTP は request 、現在リクエストされているページへリンクしたウェブページのアドレスを含みます。
http.request.body.raw ストリング 変更されていない HTTP リクエスト本文。
http.request.full_uri ストリング https://www.example.com/articles/index?section=539061&expand=comments Web サーバーが受信した完全な URI (Web サーバーに送信されない #fragment は含まれません)
http.request.method ストリング POST HTTP、大文字で表記する
http.request.uri ストリング /articles/index?section=539061&expand=comments 要求の絶対 URI
http.request.uri.path ストリング /articles/index 要求のパス
http.request.uri.query ストリング section=539061&expand=comments 照会ストリング全体 (区切り接頭部「?」を除く)
http.user_agent ストリング Mozilla/5.0 (X11、Linux x86_64) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/65.0.3325.181 Safari/537.36 HTTP ユーザー・エージェント全体
http.x_forwarded_for ストリング 完全な X-Forwarded-For HTTP ヘッダー
ip.src IP アドレス 93.155.208.22 クライアントの IP アドレス TCP。必要に応じて、元のクライアントの実際の IP アドレスを反映するように調整可能です(たとえば、X-Forwarded-For や X-Real-IP といった HTTP ヘッダーを使用するなど)
ip.src.region ストリング テキサス 着信リクエストのIPアドレスに関連付けられた地理的位置情報。
ip.geoip.asnum 数値 222 自律システム (AS) 番号
ip.geoip.country ストリング GB 2文字の国コード
ssl ブール値 はい クライアントへの HTTP 接続が暗号化されているかどうか
ip.src.subdivision_1_iso_code ストリング GB-ENG IPアドレスに関連付けられた ISO 3166-2 IPアドレスに関連付けられた第一レベル地域のコード。 実際の値がない場合、このフィールドには空文字列が格納される。 このフィールドを使用するには、 CIS エンタープライズプランが必要です。
ip.src.subdivision_2_iso_code ストリング GB-SWK IPアドレスに関連付けられた ISO 3166-2 IPアドレスに関連付けられた第2レベル地域のコード。 実際の値がない場合、このフィールドには空文字列が格納される。 このフィールドを使用するには、 CIS エンタープライズプランが必要です。
ip.src.is_in_european_union ブール値 詳しくは ip.src.is_in_european_union.

これらの標準フィールドは、Wireshark 表示フィールド参照の命名規則に従います。 ただし、上記の値の例には多少の違いがある可能性があります。

標準フィールドに加えて、以下の Cloudflare 定義のフィールドも使用できます。

利用可能なCloudflareフィールド
フィールド名 タイプ 値の例 注記
cf.client.bot ブール値 はい そのリクエストが既知のボットやクローラーから送信されたものであるかどうか、その意図が善意か悪意かに関わらず。
cf.threat_score 数値 0 このフィールドはCloudflareの脅威スコアを示します。 以前は、脅威スコアはCloudflareの脅威スコアを0~100で表し、0は低リスクであることを示していました。 現在、脅威スコアは常に0(ゼロ)である。
cf.waf.score 数値 1-99 リクエストが悪意のあるものである可能性を推定する機械学習ベースのスコア。 スコアは1(最も悪質な可能性が高い)から99(最も安全な可能性が高い)まで。 スコアが低いほどリスクが高いことを示す。 閾値ベースのファイアウォールルールを作成するのに便利です。
cf.ray_id ストリング Cloudflareを経由するすべてのリクエストに付与される識別子です。
cf.edge.server_ip IP アドレス このフィールドは、 HTTP リクエストが解決されたグローバルネットワークのIPアドレスを示す。 このフィールドは、BYOIPのお客様にのみ意味があります。
cf.edge.server_port IP アドレス 1-65535 このフィールドは、Cloudflareグローバルネットワークがリクエストを受信したポート番号を示します。 特定のポートのトラフィックをフィルタリングするには、このフィールドを使用します。
cf.tls_cipher ストリング AES128-SHA256 Cloudflareへの接続用暗号。
cf.tls_version ストリング TLSv1.2 Cloudflare への接続の TLS バージョン。

ip.src.is_in_european_union

欧州連合(EU)加盟国からのリクエストで、 CIS エンタープライズプランが必要です。

次の表は、ジオロケーションデータからEUの国をリストアップしたものです:

国コードと国名
国別コード 国の名前
AT オーストリア
AX オーランド諸島
BE ベルギー
BG ブルガリア
CY キプロス
CZ チェコ
GE ドイツ
DK デンマーク
EE エストニア
ES スペイン
FI フィンランド
FR フランス
GF フランス領ギアナ
GP グアドループ
GR ギリシャ
HR クロアチア
HU ハンガリー
IE アイルランド
IT イタリア
LT リトアニア
LU ルクセンブルク
LV ラトビア
MF セント・マーチン島
MQ マルティニーク
MT マルタ
NL オランダ
PL ポーランド
PT ポルトガル
RE レユニオン
RO ルーマニア
SE スウェーデン
SI スロベニア
SK スロバキア
YT マヨット

ボット管理分野

Bot Management for Enterpriseは、お客様のドメインに高度なボット対策を提供する有料のアドオンです。 お客様は、自動化されたトラフィックを特定し、適切な措置を講じ、コンソール内で詳細な分析を見ることができます。

以下の表は、利用可能なボットフィールドに関する情報である:

利用可能なCloufareボット管理フィールド
フィールド名 タイプ 注記
cf.client.bot ブール値 このフィールドは、善意か悪意かにかかわらず、既知のボットまたはクローラーからの要求であるかどうかを示します。
cf.bot_management.verified_bot ブール値 リクエストの発信元が既知の良いボットかクローラーかを示し、 cf.client.bot と同じ情報を提供する。 このフィールドは、 CIS エンタープライズプランで ボット管理が 有効になっている場合に使用できます。
cf.bot_management.corporate_proxy ブール値 このフィールドは、受信要求が、識別されたエンタープライズ専用のクラウドベースの企業プロキシまたはセキュア Web ゲートウェイからのものであるかどうかを示します。 このフィールドは、 CIS エンタープライズプランで ボット管理が 有効になっている場合に使用できます。
cf.bot_management.detection_ids 数値 このフィールドは、リクエストのボット管理ヒューリスティック検出のIDをリストします。 このフィールドを使用して、ルール内で特定のヒューリスティックに一致させるか、除外する。 リクエストは複数の検出を持つことができる。
cf.bot_management.ja3_hash ストリング このフィールドは、潜在的なボットリクエストを識別するのに役立つ SSL / TLS フィンガープリントを提供します。 詳しくは、 JA3/JA4 フィンガープリントを参照。 このフィールドを使用するには、 ボット管理を 有効にした CIS エンタープライズプランが必要です。
cf.bot_management.ja4 ストリング このフィールドは、潜在的なボットリクエストを識別するのに役立つ SSL / TLS フィンガープリントを提供します。 詳しくは、 JA3/JA4 フィンガープリントを参照。 このフィールドを使用するには、 ボット管理を 有効にした CIS エンタープライズプランが必要です。
cf.bot_management.js_detection.passed ブール値 訪問者が以前にJS検出を通過したかどうかを示します。 詳しくは、 JavaScript 検出を 参照。 このフィールドを使用するには、 ボット管理を 有効にした CIS エンタープライズプランが必要です。
cf.bot_management.score 数値 このフィールドは、リクエストがボットから発信された可能性を1~99のスコアで表します。 スコアが低い場合、リクエストはボットまたは自動エージェントからのものであることを示しています。 高いスコアは、人間がそのリクエストを発行したことを示す。 このフィールドを使用するには、 ボット管理を 有効にした CIS エンタープライズプランが必要です。
cf.bot_management.static_resource 数値 cf.bot_management.score を使用してルールを作成する際に、静的リソースを含めるかどうかを示します。 このフィールドを使用するには、 ボット管理を 有効にした CIS エンタープライズプランが必要です。
cf.verified_bot_category ストリング このフィールドは、検証済みボットのタイプと目的を提供する。 詳しくは、 検証済みボットのカテゴリーを ご覧ください。

関数

カスタムルール言語には、フィールドを変換するための機能がいくつか用意されています。

これらは現在、式ビルダーではサポートされていません。

カスタムルール関数
関数名 引数の型 戻りの型 使用例 注記
下位 ストリング ストリング lower(http.host) == "www.example.com" ストリング・フィールドを小文字に変換します。 大文字の ASCII バイトのみが変換され、その他のバイトはすべてそのまま残されます。
ストリング ストリング upper(http.host) == "www.example.com" ストリング・フィールドを大文字に変換します。 小文字の ASCII バイトのみが変換され、その他のバイトはすべてそのまま残されます。

式は、着信トラフィックに対する突き合わせ結果に基づいて true または false を返します。 以下に例を示します。

http.host eq "www.example.com" and ip.src in 92.182.212.0/24

この例では、2 つの単一式が 1 つの複合式を構成しています。 それぞれの単一式を 1 つの条件と考えてください。 and ロジックを適用する前に各条件が個別に評価されてから、複合式の最終結果が判別されます。

最初の単一式を見ると、以下のものが含まれていることが分かります。

  • 1 つのフィールド - http.host
  • 1 つの比較演算子 - eq
  • 1 つの値 - "www.example.com"

すべての条件が同じ構造を持つわけではありません。 異なる構造を使用する追加の例については、次のセクションで説明します。

比較演算子

式では、以下の比較演算子を使用できます。

式の比較演算子
英語 C 形式 説明
eq == 等しい
ne != 等しくない
リトアニア < より小さい
le <= 以下
gt
より大きい
ge

=

以上
含む 次を含む
が次の値に一致する ~ Re2 風の正規表現
in 値が値セットの中にある。 「..」表記を使用して範囲をサポートします。
not ! ブール比較を参照
bitwise_and & ビット・フィールド値の比較

現在、式ビルダーは英語の演算子しかサポートしていません。

式には、英語と C 形式の演算子を混在させることができます。 例えば、ip.src eq 93.184.216.34ip.src == 93.184.216.34 に相当します。

特定の比較演算子は、タイプに基づいて特定のフィールドに適用されます。 以下の表は、さまざまなフィールド・タイプで使用可能な演算子の例を示しています。

フィールドの比較演算子
英語 C 形式 ストリング IP アドレス 数値
eq == http.request.uri.path eq "/articles/2008/" ip.src eq 93.184.216.0 cf.threat_score eq 10
ne != http.request.uri.path ne "/articles/2010/" ip.src ne 93.184.216.0 cf.threat_score ne 60
リトアニア < http.request.uri.path lt "/articles/2009/" cf.threat_score lt 10
le <= http.request.uri.path le "/articles/2008/" cf.threat_score le 20
gt
http.request.uri.path gt "/articles/2006/" cf.threat_score gt 25
ge

=

以上 cf.threat_score ge 60
含む http.request.uri.path contains "/articles/"
が次の値に一致する ~ http.request.uri.path ~ " [^/articles/2007-8/$] "
in http.request.method in { "HEAD" "GET" } ip.src in { 93.184.216.0 93.184.216.1 } cf.threat_score in {0 2 10}

ストリング値を使用した式の評価では、大/小文字が区別されます。 そのため、カスタムルールでは、複数のテスト条件を定義する必要がある場合があります。 エンタープライズのお客様は、matches 演算子で正規表現を使用して、単一式で複数のバリエーションを取り込むことができます。

ブール比較

ブール型のフィールド (例えば、ssl) の場合、true 条件を評価するときに、フィールドが式に単独で表示されます。 false 条件の場合、not 演算子が適用されます。

ブール比較
はい いいえ
ssl not ssl

複合式

論理演算子を使用して複数の単一式をグループ化することにより、複合式を作成できます。

複合式
英語 C 形式 説明 優先順位
not ! 論理 NOT not ( http.host eq "www.example.com" and ip.src in 93.184.216.0/24 ) 1
および && 論理 AND http.host eq "www.example.com" and ip.src in 93.184.216.0/24 2
xor ^^ 論理 XOR http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 3
または || 論理 OR http.host eq "www.example.com" or ip.src in 93.184.216.0/24 4

優先順位を変更するには、括弧を使用して式をグループ化します。 括弧を使用しない場合、式は暗黙的に標準的な優先順位に基づいてグループ化されます。

ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth

明示的なグループ化の適用:

(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth

括弧を使用して or の優先順位を高くします。

ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)

グループ化に not が使用されているときは、単一の比較を否定するために使用できます。 例えば、not ip.src eq 93.184.216.0not (ip.src eq 93.184.216.0) と同等です。

最後に、グループ化された式を否定することもできます。

not (http.request.method eq "POST" and http.request.uri.path eq "/login")

Wireshark 表示フィルターとの相違

カスタムルール式は、Wiresharkの表示フィルターを参考にしています。 ただし、実装は以下の点で異なります。

  • CIDR IP 等価テストの場合、Wireshark では ip.src == 1.2.3.0/24 の形式の範囲を指定できますが、CIS は単一の IP アドレスを使用する等価テストのみをサポートします。 CIDR を比較するために、in 演算子を使用します。例えば、ip.src in {1.2.3.0/24} のようになります。
  • Wireshark では、ssl は、さまざまなタイプの他の何百ものフィールドで構成されるプロトコル・フィールドであり、複数の方法での比較に使用できます。 ただし、カスタムルールでは、「 ssl 」は、クライアントから CIS への接続が暗号化されているかどうかを判断するために使用される単一のブール型フィールドです。
  • slice 演算子はサポートされていません。
  • すべての関数がサポートされているわけではありません。 現時点では、len()count() はサポートされていません。

表現上の制約

ルール式には、以下の制限が適用されます:

  • ルール式には、最大4,096文字を含めることができます。

    UI上の「式ビルダー」を使用する場合、生成された式のプレビューにも同様の制限が適用されます。

  • ルール式には、最大64個の正規表現(regex)を含めることができます。