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

ファイアウォールルールは非推奨です。 CIS 既存のファイアウォールルールをWAFのカスタムルールに移動しました。 この変更に関する詳細は 、「カスタムルールへの移行」 を参照してください。

アクションに加えて、フィールドと式はファイアウォール・ルールのビルディング・ブロックになります。 これらの 2 つの要素は、ファイアウォール・ルールが一致したときに使用する基準を定義する際に連携して機能します。

フィールド

HTTP 要求を CIS が受け取ると、要求は検査されて、突き合わせるフィールドのテーブルが生成されます。 このフィールドテーブルは、現在のリクエストが処理されている間存在します。 これは、式と突き合わせる要求プロパティーを保持するテーブルであると考えてください。

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

  • プリミティブプロパティとは、トラフィックから直接取得されるプロパティのことです。例えば、 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.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.geoip.asnum 数値 222 自律システム (AS) 番号
ip.geoip.country ストリング GB 2 文字の国別コード
ssl ブール値 はい クライアントへの HTTP 接続が暗号化されているかどうか

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

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

利用可能なCloudflareフィールド
フィールド名 タイプ 値の例 注記
cf.client.bot ブール値 はい このフィールドは、善意か悪意かにかかわらず、既知のボットまたはクローラーからの要求であるかどうかを示します。
cf.threat_score 数値 0 から 100 までの値 このフィールドはリスク・スコアを表し、0 は Cloudflare によって決定される低リスクを示します。 10を超える値はスパム送信者やボットである可能性があり、40を超える値はインターネット上の悪意のあるユーザーを示しています。 60を超える値が見られることはめったにないため、ファイアウォールのルールを調整して、10を超えるものには認証要求を行い、50を超えるものはブロックするようにしてください。
cf.waf.score 数値 1-99 リクエストが悪意のあるものである可能性を推定する機械学習ベースのスコア。 スコアは1(最も悪質な可能性が高い)から99(最も安全な可能性が高い)まで。 スコアが低いほどリスクが高いことを示す。 閾値ベースのファイアウォールルールを作成するのに便利です。

関数

ファイアウォールのルール記述言語には、フィールドを変換するための機能がいくつか用意されています。

これらの関数は現在、エクスプレッション・ビルダーではサポートされていません。

ファイアウォールルールの機能
関数名 引数の型 戻りの型 使用例 注記
下位 ストリング ストリング 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

複合式

論理演算子を使用して、2つ以上の単一の式をグループ化することで、複合式を作成することができます。

複合式
英語 C 形式 説明 優先順位
not ! 論理 NOT ( http.host ≠ "www.example.com" かつ ip.src である場合、 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() はサポートされていません。