Citrix ADC

Grundlegende Elemente eines erweiterten Richtlinienausdrucks

Ein erweiterter Richtlinienausdruck besteht mindestens aus einem Präfix (oder einem einzelnen Element, das anstelle eines Präfixes verwendet wird). Die meisten Ausdrücke geben auch eine Operation an, die für die Daten ausgeführt werden soll, die vom Präfix identifiziert werden. Sie formatieren einen Ausdruck mit bis zu 1.499 Zeichen wie folgt:

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

wobei

  • <prefix>

    ist ein Ankerpunkt zum Starten eines Ausdrucks.

    Das Präfix ist ein periodenbegrenzter Schlüssel, der eine Dateneinheit identifiziert. Das folgende Präfix untersucht beispielsweise HTTP-Anforderungen auf das Vorhandensein eines Headers namens Content-Type:

    http.req.header (Content-Type)

    Präfixe können auch alleine verwendet werden, um den Wert des Objekts zurückzugeben, das das Präfix identifiziert.

  • <operation>

    identifiziert eine Auswertung, die mit den durch das Präfix identifizierten Daten durchgeführt werden soll.

    Betrachten Sie beispielsweise den folgenden Ausdruck:

    http.req.header (Content-Type) .eq (text/html)

    In diesem Ausdruck ist der folgende Operator Komponente:

    eq (text/html)

    Dieser Operator bewirkt, dass Citrix ADC alle HTTP-Anforderungen auswertet, die einen Content-Type-Header enthalten, und insbesondere, um festzustellen, ob der Wert dieses Headers gleich der Zeichenfolge text/html ist. Weitere Informationen finden Sie unter “Vorgänge.”

  • <compound-operator>

    ist ein boolescher oder arithmetischer Operator, der einen zusammengesetzten Ausdruck aus mehreren Präfix- oder prefix.operationselementen bildet.

    Betrachten Sie beispielsweise den folgenden Ausdruck:

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

Präfixe

Ein Ausdruckspräfix stellt eine diskrete Datenmenge dar. Ein Ausdruckspräfix kann beispielsweise eine HTTP-URL, einen HTTP-Cookie-Header oder eine Zeichenfolge im Textkörper einer HTTP-POST-Anforderung darstellen. Ein Ausdruckspräfix kann eine Vielzahl von Datentypen identifizieren und zurückgeben, einschließlich der folgenden:

  • Eine Client-IP-Adresse in einem TCP/IP-Paket
  • Citrix ADC -Systemzeit
  • Eine externe Legende über HTTP
  • Ein TCP- oder UDP-Datensatztyp

In den meisten Fällen beginnt ein Ausdruckspräfix mit einem der folgenden Schlüsselwörter:

  • CLIENT:
    • Identifiziert ein Merkmal des Clients, der entweder eine Anfrage sendet oder eine Antwort empfängt, wie in den folgenden Beispielen:
    • Das Präfix client.ip.dst gibt die Ziel-IP-Adresse in der Anforderung oder Antwort an.
    • Das Präfix client.ip.src gibt die Quell-IP-Adresse an.
  • HTTP:
    • Identifiziert ein Element in einer HTTP-Anforderung oder einer Antwort, wie in den folgenden Beispielen:
    • Das Präfix http.req.body (integer) bezeichnet den Körper der HTTP-Anforderung als mehrzeiliges Textobjekt, bis zu der in Integer angegebenen Zeichenposition.
    • Das Präfix http.req.header (header_name) bezeichnet einen HTTP-Header, wie in header_name angegeben.
    • Das Präfix http.req.url bezeichnet eine HTTP-URL im URL-kodierten Format.
  • SERVER:

    Identifiziert ein Element auf dem Server, das entweder eine Anforderung verarbeitet oder eine Antwort sendet.

  • SYS:

    Identifiziert ein Merkmal des Citrix ADC, das den Datenverkehr verarbeitet.

    Hinweis: Beachten Sie, dass DNS-Richtlinien nur SYS, CLIENT und SERVER-Objekte unterstützen.

    Darüber hinaus kann die Clientless-VPN-Funktion in Citrix Gateway die folgenden Arten von Präfixen verwenden:

  • TEXT:

    Identifiziert ein beliebiges Textelement in einer Anforderung oder einer Antwort.

  • TARGET:

    Identifiziert das Ziel einer Verbindung.

  • URL:

    Identifiziert ein Element im URL-Teil einer HTTP-Anforderung oder -Antwort.

Als allgemeine Faustregel kann jedes Ausdruckspräfix ein eigenständiger Ausdruck sein. Das folgende Präfix ist beispielsweise ein vollständiger Ausdruck, der den Inhalt des HTTP-Headers zurückgibt, der im String-Argument angegeben ist (in Anführungszeichen eingeschlossen):

http.res.header.("myheader")

Oder Sie können Präfixe mit einfachen Operationen kombinieren, um TRUE und FALSE Werte zu bestimmen. Der folgende Wert gibt beispielsweise den Wert TRUE oder FALSE zurück:

http.res.header.("myheader").exists

Sie können auch komplexe Operationen für einzelne Präfixe und mehrere Präfixe innerhalb eines Ausdrucks verwenden, wie im folgenden Beispiel:

http.req.url.length + http.req.cookie.length <= 500

Welche Ausdruckspräfixe Sie angeben können, hängt von der Citrix ADC Funktion ab. In der folgenden Tabelle werden die Ausdruckspräfixe beschrieben, die auf Feature-Basis von Interesse sind.

Feature Typen von Ausdruckspräfix, die im Feature verwendet werden
DNS SYS, CLIENT, SERVER
Responder in Schutzfunktionen HTTP, SYS, CLIENT
Content Switching HTTP, SYS, CLIENT
Neuschreiben HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN
Integriertes Caching HTTP, SYS, CLIENT, SERVER
Citrix Gateway, Clientloser Zugriff HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN

Tabelle 1. Zulässige Typen von Ausdruckspräfixen in verschiedenen Citrix ADC Features

Hinweis: Einzelheiten zu den zulässigen Ausdruckspräfixen in einem Feature finden Sie in der Dokumentation zu diesem Feature.

Ausdrücke mit einem Element

Der einfachste Typ des erweiterten Richtlinienausdrucks enthält ein einzelnes Element. Dieses Element kann eines der folgenden sein:

  • wahr. Ein erweiterter Richtlinienausdruck kann einfach aus dem Wert true bestehen. Dieser Ausdruckstyp gibt immer den Wert TRUE zurück. Es ist nützlich, um Richtlinienaktionen zu verketten und Goto-Ausdrücke auszulösen.
  • falsch. Ein erweiterter Richtlinienausdruck kann einfach aus dem Wert false bestehen. Dieser Ausdruckstyp gibt immer den Wert FALSE zurück.
  • Ein Präfix für einen zusammengesetzten Ausdruck. Beispielsweise ist das Präfix HTTP.REQ.HOSTNAME ein vollständiger Ausdruck, der einen Hostnamen zurückgibt, und HTTP.REQ.URL ist ein vollständiger Ausdruck, der eine URL zurückgibt. Das Präfix könnte auch in Verbindung mit Operationen und zusätzlichen Präfixen verwendet werden, um einen zusammengesetzten Ausdruck zu bilden.

Vorgänge

In den meisten Ausdrücken geben Sie auch eine Operation für die Daten an, die vom Präfix identifiziert werden. Angenommen, Sie geben das folgende Präfix an:

http.req.url

Dieses Präfix extrahiert URLs in HTTP-Anforderungen. Für dieses Ausdruckspräfix müssen keine Operatoren in einem Ausdruck verwendet werden. Wenn Sie jedoch einen Ausdruck konfigurieren, der HTTP-Anforderungs-URLs verarbeitet, können Sie Vorgänge angeben, die bestimmte Merkmale der URL analysieren. Im Folgenden sind ein paar Möglichkeiten:

  • Suchen Sie in der URL nach einem bestimmten Hostnamen.
  • Suchen Sie in der URL nach einem bestimmten Pfad.
  • Bewerten Sie die Länge der URL.
  • Suchen Sie in der URL nach einer Zeichenfolge, die einen Zeitstempel angibt, und konvertieren Sie ihn in GMT.

Im Folgenden finden Sie ein Beispiel für ein Präfix, das einen HTTP-Header namens Server und einen Vorgang identifiziert, der im Headerwert nach der Zeichenfolge IIS sucht:

http.res.header("Server").contains("IIS")

Es folgt ein Beispiel für ein Präfix, das Hostnamen identifiziert und eine Operation, die nach der Zeichenfolge www.mycompany.com als Wert des Namens sucht:

http.req.hostname.eq("www.mycompany.com")

Grundlegende Operationen für Ausdruckspräfixe

In der folgenden Tabelle werden einige der grundlegenden Operationen beschrieben, die für Ausdruckspräfixe ausgeführt werden können.

Vorgang Bestimmt, ob
CONTAINS(<string>) Das Objekt mit <string> übereinstimmt. Es folgt ein Beispiel: http.req.header(“Cache-Control”).contains(“no-cache”)
EXISTS Ein bestimmtes Element ist in einem Objekt vorhanden. Es folgt ein Beispiel: http.res.header (“MyHDR”) .exists
EQ(<text>) Ein bestimmter nicht-numerischer Wert ist in einem Objekt vorhanden. Es folgt ein Beispiel: http.req.method.eq(post)
EQ(<integer>) Ein bestimmter numerischer Wert ist in einem Objekt vorhanden. Es folgt ein Beispiel: client.ip.dst.eq(10.100.10.100)
LT(<integer>) Der Wert eines Objekts ist kleiner als ein bestimmter Wert. Es folgt ein Beispiel: http.req.content_length.lt(5000)
GT(<integer>) Der Wert eines Objekts ist größer als ein bestimmter Wert. Es folgt ein Beispiel: http.req.content_length.gt(5)

In der folgenden Tabelle werden einige der verfügbaren Arten von Vorgängen zusammengefasst.

Arbeitsvorgangsart Beschreibung
Textoperationen Passen Sie einzelne Strings und Sätze von Strings mit einem beliebigen Teil eines Ziels an. Das Ziel kann eine ganze Zeichenfolge, der Anfang einer Zeichenfolge oder ein beliebiger Teil des Textes zwischen dem Anfang und dem Ende der Zeichenfolge sein. Beispielsweise können Sie die Zeichenfolge XYZ aus XYZsoMEText extrahieren. Oder Sie können einen HTTP-Header-Wert mit einem Array verschiedener Zeichenfolgen vergleichen. Sie können Text auch in einen anderen Datentyp umwandeln. Im Folgenden sind Beispiele: Transformieren Sie eine Zeichenfolge in einen Ganzzahlwert, erstellen Sie eine Liste aus den Abfragezeichenfolgen in einer URL und transformieren Sie eine Zeichenfolge in einen Zeitwert.
Numerische Operationen Numerische Operationen umfassen das Anwenden von arithmetischen Operatoren, das Auswerten der Inhaltslänge, die Anzahl der Elemente in einer Liste, Datums-, Uhrzeit- und IP-Adressen.

Grundlegende Elemente eines erweiterten Richtlinienausdrucks