Citrix ADC

Éléments de base d’une expression de stratégie avancée

Une expression de stratégie avancée se compose, au minimum, d’un préfixe (ou d’un seul élément utilisé à la place d’un préfixe). La plupart des expressions spécifient également une opération à effectuer sur les données identifiées par le préfixe. Vous formatez une expression de 1 499 caractères au maximum comme suit :

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

  • <prefix>

    est un point d’ancrage pour le démarrage d’une expression.

    Le préfixe est une clé délimitée par une période qui identifie une unité de données. Par exemple, le préfixe suivant examine les requêtes HTTP pour la présence d’un en-tête nommé Content-Type :

    http.req.header (« Content-Type »)

    Les préfixes peuvent également être utilisés seuls pour renvoyer la valeur de l’objet que le préfixe identifie.

  • <operation>

    identifie une évaluation à effectuer sur les données identifiées par le préfixe.

    Par exemple, considérez l’expression suivante :

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

    Dans cette expression, ce qui suit est le composant opérateur :

    eq(“text/html”)

    Cet opérateur fait en sorte que Citrix ADC évalue toutes les requêtes HTTP qui contiennent un en-tête Content-Type, et en particulier, détermine si la valeur de cet en-tête est égale à la chaîne “text/html”. Pour plus d’informations, reportez-vous à la section “Opérations.”

  • <compound-operator>

    est un opérateur booléen ou arithmétique qui forme une expression composée à partir de plusieurs éléments préfixes ou préfix.operation.

    Par exemple, considérez l’expression suivante :

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

Préfixes

Un préfixe d’expression représente une donnée discrète. Par exemple, un préfixe d’expression peut représenter une URL HTTP, un en-tête de cookie HTTP ou une chaîne dans le corps d’une requête HTTP POST. Un préfixe d’expression peut identifier et renvoyer une grande variété de types de données, notamment les suivants :

  • Une adresse IP du client dans un paquet TCP/IP
  • Heure système Citrix ADC
  • Une légende externe sur HTTP
  • Type d’enregistrement TCP ou UDP

Dans la plupart des cas, un préfixe d’expression commence par l’un des mots-clés suivants :

  • CLIENT:
    • Identifie une caractéristique du client qui envoie une demande ou reçoit une réponse, comme dans les exemples suivants :
    • Le préfixe client.ip.dst désigne l’adresse IP de destination dans la requête ou la réponse.
    • Le préfixe client.ip.src désigne l’adresse IP source.
  • HTTP:
    • Identifie un élément dans une requête HTTP ou une réponse, comme dans les exemples suivants :
    • Le préfixe http.req.body (integer) désigne le corps de la requête HTTP comme un objet texte multiligne, jusqu’à la position du caractère désignée dans un entier.
    • Le préfixe http.req.header (« header_name ») désigne un en-tête HTTP, comme spécifié dans header_name.
    • Le préfixe http.req.url désigne une URL HTTP au format URL.
  • SERVER:

    Identifie un élément du serveur qui traite une demande ou envoie une réponse.

  • SYS:

    Identifie une caractéristique de Citrix ADC qui traite le trafic.

    Remarque : Notez que les stratégies DNS prennent en charge uniquement les objets SYS, CLIENT et SERVER.

    En outre, dans Citrix Gateway, la fonction VPN sans client peut utiliser les types de préfixes suivants :

  • TEXT:

    Identifie tout élément de texte dans une requête ou une réponse.

  • CIBLE :

    Identifie la cible d’une connexion.

  • URL :

    Identifie un élément dans la partie URL d’une requête ou d’une réponse HTTP.

En règle générale, tout préfixe d’expression peut être une expression autonome. Par exemple, le préfixe suivant est une expression complète qui renvoie le contenu de l’en-tête HTTP spécifié dans l’argument chaîne (entre guillemets) :

http.res.header.("myheader")

Ou vous pouvez combiner des préfixes avec des opérations simples pour déterminer les valeurs TRUE et FALSE. Par exemple, ce qui suit renvoie une valeur TRUE ou FALSE :

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

Vous pouvez également utiliser des opérations complexes sur des préfixes individuels et plusieurs préfixes au sein d’une expression, comme dans l’exemple suivant :

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

Les préfixes d’expression que vous pouvez spécifier dépendent de la fonctionnalité Citrix ADC. Le tableau suivant décrit les préfixes d’expression qui présentent un intérêt sur une base par entité

Fonctionnalité Types de préfixe d’expression utilisés dans la fonction
DNS SYS, CLIENT, SERVEUR
Répondeur dans les fonctions de protection HTTP, SYS, CLIENT
Commutation de contenu HTTP, SYS, CLIENT
Réécrire HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN
Mise en cache intégrée HTTP, SYS, CLIENT, SERVEUR
Citrix Gateway, accès sans client HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN

Tableau 1. Types autorisés de préfixes d’expression dans diverses fonctionnalités de Citrix ADC

Remarque : Pour plus d’informations sur les préfixes d’expression autorisés dans une fonction, reportez-vous à la documentation de cette fonction.

Expressions à un seul élément

Le type le plus simple d’expression de stratégie avancée contient un seul élément. Cet élément peut être l’un des éléments suivants :

  • C’est vrai. Une expression de stratégie avancée peut simplement consister en la valeur true. Ce type d’expression renvoie toujours une valeur TRUE. Il est utile pour chaîner des actions de stratégie et déclencher des expressions Goto.
  • Faux. Une expression de stratégie avancée peut simplement consister en la valeur false. Ce type d’expression renvoie toujours une valeur FALSE.
  • Préfixe d’une expression composée. Par exemple, le préfixe HTTP.REQ.HOSTNAME est une expression complète qui renvoie un nom d’hôte et HTTP.REQ.URL est une expression complète qui renvoie une URL. Le préfixe peut également être utilisé conjointement avec des opérations et des préfixes supplémentaires pour former une expression composée.

Opérations

Dans la plupart des expressions, vous spécifiez également une opération sur les données identifiées par le préfixe. Par exemple, supposons que vous spécifiez le préfixe suivant :

http.req.url

Ce préfixe extrait les URL dans les requêtes HTTP. Ce préfixe d’expression ne nécessite pas l’utilisation d’opérateurs dans une expression. Toutefois, lorsque vous configurez une expression qui traite les URL de requête HTTP, vous pouvez spécifier des opérations qui analysent des caractéristiques particulières de l’URL. Voici quelques possibilités :

  • Recherchez un nom d’hôte particulier dans l’URL.
  • Recherchez un chemin particulier dans l’URL.
  • Évaluez la longueur de l’URL.
  • Recherchez une chaîne dans l’URL qui indique un horodatage et convertissez-la en GMT.

Voici un exemple de préfixe qui identifie un en-tête HTTP nommé Serveur et une opération qui recherche la chaîne IIS dans la valeur d’en-tête :

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

Voici un exemple de préfixe qui identifie les noms d’hôtes et une opération qui recherche la chaîne « www.mycompany.com » comme valeur du nom :

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

Opérations de base sur les préfixes d’expression

Le tableau suivant décrit quelques-unes des opérations de base qui peuvent être effectuées sur les préfixes d’expression.

Opération Détermine si oui ou non
CONTAINS(<string>) L’objet correspond <string>. Voici un exemple : http.req.header (« Cache-Control ») .contains (« no-cache »)
EXISTE Un élément particulier est présent dans un objet. Voici un exemple : http.res.header (« myHDR ») .exists
EQ(<text>) Une valeur non numérique particulière est présente dans un objet. Voici un exemple : http.req.method.eq (post)
EQ(<integer>) Une valeur numérique particulière est présente dans un objet. Voici un exemple : client.ip.dst.eq (10.100.10.100)
LT (<integer>) La valeur d’un objet est inférieure à une valeur particulière. Voici un exemple : http.req.content_length.lt (5000)
GT (<integer>) La valeur d’un objet est supérieure à une valeur particulière. Voici un exemple : http.req.content_length.gt (5)

Le tableau suivant résume quelques-uns des types d’opérations disponibles.

Type d’opération Description
Opérations de texte Faites correspondre des chaînes individuelles et des ensembles de chaînes avec n’importe quelle partie d’une cible. La cible peut être une chaîne entière, le début d’une chaîne ou n’importe quelle partie du texte entre le début et la fin de la chaîne. Par exemple, vous pouvez extraire la chaîne « XYZ » de « XYZSomeText ». Ou, vous pouvez comparer une valeur d’en-tête HTTP avec un tableau de chaînes différentes. Vous pouvez également transformer du texte en un autre type de données. Voici des exemples : Transformer une chaîne en une valeur entière, créer une liste à partir des chaînes de requête dans une URL et transformer une chaîne en une valeur de temps.
Opérations numériques Les opérations numériques incluent l’application d’opérateurs arithmétiques, l’évaluation de la longueur du contenu, le nombre d’éléments dans une liste, les dates, les heures et les adresses IP.

Éléments de base d’une expression de stratégie avancée