AppExpert

高度なポリシー式の基本要素

Advanced ポリシー式は、少なくとも 1 つのプレフィクス(またはプレフィクスの代わりに使用される 1 つの要素)で構成されます。ほとんどの式では、プレフィックスが識別するデータに対して実行される操作も指定します。最大 1,499 文字の式を次のようにフォーマットします。

<prefix>.<operation> [<compound-operator> <prefix>.<operation>. . .]

各項目の意味は次のとおりです。

  • <prefix>

    は、式を開始するためのアンカーポイントです。

    プレフィックスは、データの単位を識別するピリオドで区切られたキーです。たとえば、次のプレフィックスは、HTTP リクエストで Content-Type という名前のヘッダーが存在するかどうかを調べます。

    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>

    は、複数のプレフィックスまたは prefix.operation 要素から複合式を形成するブール演算子または算術演算子です。

    たとえば、次の式を考えます。

    http.req.header(“Content-Type”).eq(“text/html”) && http.req.url.contains(“.html”)

プレフィックス

式のプレフィックスは、データの離散部分を表します。たとえば、式プレフィックスは、HTTP URL、HTTP Cookie ヘッダー、または HTTP POST リクエストの本文内の文字列を表すことができます。式のプレフィックスは、次のようなさまざまなデータ型を識別して返すことができます。

  • TCP/IP パケット内のクライアント IP アドレス
  • Citrix ADCシステム時刻
  • HTTP 経由の外部コールアウト
  • TCP または UDP レコードタイプ

ほとんどの場合、式プレフィックスは次のキーワードのいずれかで始まります。

  • CLIENT:
    • 次の例のように、要求を送信しているクライアントまたは応答を受信しているクライアントの特性を識別します。
    • プレフィクス client.ip.dst は、要求または応答の宛先 IP アドレスを指定します。
    • プレフィクス client.ip.src は、送信元 IP アドレスを指定します。
  • HTTP:
    • 次の例のように、HTTP リクエストまたはレスポンス内の要素を識別します。
    • プレフィックス http.req.body(整数)は、HTTP リクエストの本文を複数行テキストオブジェクトとして指定します。整数で指定された文字位置までです。
    • プレフィックス http.req.header(「ヘッダー名」)は、ヘッダー名で指定されたHTTPヘッダーを指定します。
    • プレフィックス http.req.url は、URL エンコード形式の HTTP URL を指定します。
  • SERVER:

    要求を処理中または応答を送信しているサーバー内の要素を識別します。

  • SYS:

    トラフィックを処理しているCitrix ADCの特性を識別します。

    注: DNSポリシーは、SYS、CLIENT、およびSERVERオブジェクトのみをサポートします。

    さらに、Citrix Gateway では、クライアントレスVPN機能は次の種類のプレフィックスを使用できます。

  • TEXT:

    リクエストまたはレスポンス内のテキストエレメントを識別します。

  • TARGET:

    接続のターゲットを識別します。

  • 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

指定できる式プレフィックスは、Citrix ADC の機能によって異なります。次の表は、フィーチャごとに対象となる式のプレフィックスについて説明しています。

機能 機能で使用される式プレフィックスのタイプ
DNS SYS, CLIENT, SERVER
保護機能のレスポンダー HTTP, SYS, CLIENT
コンテンツ スイッチ HTTP, SYS, CLIENT
書き換え HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN
統合キャッシュ HTTP, SYS, CLIENT, SERVER
Citrix Gateway、クライアントレスアクセス HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN

表1. さまざまなCitrix ADC機能で許可される式プレフィックスのタイプ

注: 機能で許可される式プレフィクスの詳細については、その機能のドキュメントを参照してください。

単一要素式

最も単純なタイプの Advanced ポリシー式には、要素が 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.ヘッダー(「MyHdr”).exists
EQ(<text>) 特定の非数値値がオブジェクトに存在します。以下に例を示します。
EQ(<integer>) 特定の数値はオブジェクトに存在します。次に、クライアント.ip.dst.eq (10.100.10.100) の例を示します。
LT(<integer>) オブジェクトの値が特定の値より小さい場合。以下は例である。コンテンツの長さの例 (5000)
GT(<integer>) オブジェクトの値が特定の値よりも大きい。以下に例を示します。内容の長さ.gt (5)

次の表は、使用可能な操作の種類をいくつかまとめたものです。

操作タイプ 説明
テキスト操作 個々の文字列と文字列のセットを、ターゲットの任意の部分と一致させます。ターゲットには、文字列全体、文字列の先頭、または文字列の先頭と末尾の間のテキストの任意の部分を指定できます。たとえば、「XYZSomeText」から文字列「XYZ」を抽出できます。または、HTTP ヘッダー値を異なる文字列の配列と比較することもできます。テキストを別の種類のデータに変換することもできます。例を次に示します。文字列を整数値に変換し、URL 内のクエリ文字列からリストを作成し、文字列を時間値に変換します。
数値演算 数値演算には、算術演算子の適用、コンテンツの長さの評価、リスト内の項目数、日付、時刻、および IP アドレスが含まれます。
高度なポリシー式の基本要素