高度なポリシー表現の基本要素
高度なポリシー表現は、少なくともプレフィックス(またはプレフィックスの代わりに使用される単一の要素)で構成されます。ほとんどの式では、プレフィックスで識別されるデータに対して実行される操作も指定されています。最大 1,499 文字の式を次のようにフォーマットします。
<prefix>.<operation> [<compound-operator> <prefix>.<operation>. . .]
各項目の意味は次のとおりです。
-
<prefix>
エクスプレッションを始めるためのアンカーポイントです。
プレフィックスは、データ単位を識別するピリオドで区切られたキーです。たとえば、次のプレフィックスは、Content-Type という名前のヘッダーが存在するかどうかの HTTP リクエストを調べます。
http.req.header(“Content-Type”)
プレフィックスを単独で使用して、プレフィックスが識別するオブジェクトの値を返すこともできます。
-
<operation>
プレフィックスで識別されるデータに対して実行される評価を指定します。
たとえば、次の式を考えてみましょう。
http.req.header(“Content-Type”).eq(“text/html”)
この式では、演算子コンポーネントは次のとおりです。
eq(“text/html”)
この演算子により、Citrix ADCはContent-Typeヘッダーを含むHTTPリクエストを評価し、特にこのヘッダーの値が文字列「text/html」と等しいかどうかを判断します。詳細については、「操作」を参照してください。
-
<compound-operator>
は、複数のプレフィックスまたはプレフィックス.operation要素から複合式を形成するブール演算子または算術演算子です。
たとえば、次の式を考えてみましょう。
http.req.header (「コンテンツタイプ」) .eq (「テキスト/html」) & http.req.url.contains (「.html」)
接頭辞
エクスプレフィックスは個別のデータを表します。たとえば、エクスプレフィックスは HTTP URL、HTTP クッキーヘッダー、または HTTP POST リクエストの本文に含まれる文字列を表すことができます。式プレフィックスは、次のようなさまざまなデータ型を識別して返すことができます。
- TCP/IP パケット内のクライアント IP アドレス
- NetScaler システム時間
- HTTP 経由の外部コールアウト
- TCP または UDP レコードタイプ
ほとんどの場合、式のプレフィックスは次のいずれかのキーワードで始まります。
- クライアント:
- 次の例のように、リクエストを送信しているクライアントまたはレスポンスを受信しているクライアントの特性を識別します。
- client.ip.dst というプレフィックスは、要求または応答の宛先 IP アドレスを指定します。
- client.ip.src というプレフィックスは、送信元 IP アドレスを指定します。
- HTTP:
- 次の例のように、HTTP リクエストまたはレスポンス内の要素を識別します。
- プレフィックス http.req.body (integer) は、HTTP リクエストの本文を、整数で指定された文字位置までの複数行のテキストオブジェクトとして指定します。
- プレフィックス http.req.header (「header_name」) は、header_name で指定されている HTTP ヘッダーを指定します。
- プレフィックス http.req.url は URL エンコード形式の HTTP URL を指定します。
-
サーバー:
要求を処理しているか、応答を送信しているサーバー内の要素を識別します。
-
システム:
トラフィックを処理しているNetScalerの特性を識別します。
注: DNS ポリシーは SYS、CLIENT、SERVER オブジェクトのみをサポートしていることに注意してください。
さらに、NetScaler Gatewayでは、クライアントレスVPN機能は次の種類のプレフィックスを使用できます。
-
テキスト:
リクエストまたはレスポンス内の任意のテキスト要素を識別します。
-
ターゲット:
接続のターゲットを識別します。
-
URL:
HTTP リクエストまたはレスポンスの URL 部分の要素を識別します。
一般的な経験則として、どの式のプレフィックスでも自己完結型の式にすることができます。たとえば、次のプレフィックスは、文字列引数 (引用符で囲まれた) で指定された HTTP ヘッダーの内容を返す完全な式です。
http.res.header.("myheader")
または、プレフィックスと簡単な操作を組み合わせて TRUE と FALSE の値を決定することもできます。たとえば、次の例では TRUE または FALSE の値を返します。
http.res.header.("myheader").exists
次の例のように、式内の個々のプレフィックスや複数のプレフィックスに対して複雑な演算を行うこともできます。
http.req.url.length + http.req.cookie.length <= 500
どのエクスプレッションプレフィックスを指定できるかは、NetScalerの機能によって異なります。次の表では、対象となるエクスプレッションプレフィックスを機能ごとにまとめています。
機能 | 機能で使用されるエクスプレッションプレフィックスのタイプ |
---|---|
DNS | SYS, CLIENT, SERVER |
レスポンダー・イン・プロテクション機能 | HTTP、システム、クライアント |
コンテンツスイッチ | HTTP、システム、クライアント |
書き換え | HTTP、システム、クライアント、サーバー、URL、テキスト、ターゲット、VPN |
統合キャッシング | HTTP, SYS, CLIENT, SERVER |
NetScaler Gateway、クライアントレスアクセス | HTTP、システム、クライアント、サーバー、URL、テキスト、ターゲット、VPN |
表1. NetScalerのさまざまな機能で使用できるエクスプレッションプレフィックスの種類
注: 機能で使用できるエクスプレッションプレフィックスの詳細については、その機能のドキュメントを参照してください。
単一要素表現
最も単純なタイプのアドバンスポリシー表現には、1 つの要素が含まれています。この要素には次のいずれかを使用できます。
- 本当。高度なポリシー表現には、true という値だけで構成できます。このタイプの式は常に TRUE の値を返します。ポリシーアクションを連鎖させたり、Goto 表現をトリガーしたりするのに便利です。
- 偽。高度なポリシー表現には、単に false という値だけで構成できます。このタイプの式は常に FALSE の値を返します。
- 複合式のプレフィックス。たとえば、プレフィックス HTTP.REQ.HOSTNAME はホスト名を返す完全な式で、HTTP.REQ.URL は URL を返す完全な式です。プレフィックスを演算や追加のプレフィックスと組み合わせて使用して複合式を作成することもできます。
オペレーション
ほとんどの式では、プレフィックスで識別されるデータに対する操作も指定します。たとえば、次のプレフィックスを指定したとします。
http.req.url
このプレフィックスは、HTTP リクエストの URL を抽出します。この式のプレフィックスでは、式に演算子を使用する必要はありません。ただし、HTTP リクエスト URL を処理する式を設定すると、URL の特定の特性を分析する操作を指定できます。いくつかの可能性を以下に示します。
- URL で特定のホスト名を検索します。
- URL 内の特定のパスを検索します。
- URL の長さを評価してください。
- URL でタイムスタンプを示す文字列を検索し、GMT に変換します。
以下は、Server という名前の HTTP ヘッダーを識別するプレフィックスと、ヘッダー値の IIS という文字列を検索する操作の例です。
http.res.header("Server").contains("IIS")
ホスト名を識別するプレフィックスと、名前の値として「www.mycompany.com」という文字列を検索する操作の例を以下に示します。
http.req.hostname.eq("www.mycompany.com")
エクスプレッションプレフィックスの基本操作
次の表では、エクスプレフィックスに対して実行できる基本的な操作のいくつかを説明しています。
操作 | か否かを決める |
---|---|
CONTAINS(<string>) | オブジェクトは<string> と一致します。以下は例です:http.req.header (「キャッシュコントロール」) .contains (「キャッシュなし」) |
EXISTS | 特定のアイテムがオブジェクトに存在します。以下がその例です:http.res.header (「MyHDR」) .exists |
EQ(<text>) | 特定の非数値がオブジェクトに存在します。以下がその例です:http.req.method.eq (投稿) |
EQ(<integer>) | 特定の数値がオブジェクトに存在します。以下は例です:client.ip.dst.eq (10.100.10.100) |
LT(<integer>) | オブジェクトの値が特定の値よりも小さい。以下がその例です:http.req.content_length.lt (5000) |
GT(<integer>) | オブジェクトの値が特定の値よりも大きい。以下がその例です:http.req.content_length.gt (5) |
次の表は、使用可能な操作のいくつかをまとめたものです。
操作タイプ | 説明 |
---|---|
テキスト操作 | 個々の文字列や文字列のセットをターゲットの任意の部分と照合します。ターゲットは、文字列全体、文字列の先頭、または文字列の先頭と末尾の間にあるテキストの任意の部分です。たとえば、「XYZSomeText」から文字列「XYZ」を抽出できます。または、HTTP ヘッダー値をさまざまな文字列の配列と比較することもできます。テキストを別の種類のデータに変換することもできます。例としては、文字列を整数値に変換したり、URL 内のクエリ文字列からリストを作成したり、文字列を時間値に変換したりします。 |
数値演算 | 数値演算には、算術演算子の適用、コンテンツの長さの評価、リスト内の項目数、日付、時刻、および IP アドレスが含まれます。 |