IBM Cloud Docs
Utilisation des zones, fonctions et expressions

Utilisation des zones, fonctions et expressions

Les règles de pare-feu sont obsolètes. CIS déplacé les règles de pare-feu existantes vers les règles personnalisées WAF. Pour plus d'informations sur ce changement, voir Migrer vers des règles personnalisées.

Outre les actions, les zones et les expressions sont les blocs de construction des règles de pare-feu. Ces deux éléments fonctionnent ensemble lors de la définition des critères à utiliser lorsqu'une règle de pare-feu est mise en correspondance.

Zones

Lorsque CIS reçoit une demande HTTP, celle-ci est examinée et une table de zones est générée pour établir des correspondances. Cette table de champ existe pendant le traitement de la requête en cours. Considérez-la comme une table contenant les propriétés de la demande à comparer aux expressions.

Chaque valeur de zone peut être dérivée de différents emplacements, par exemple :

  • Les propriétés primitives sont obtenues directement à partir du trafic - par exemple, http.request.uri.path.
  • Valeurs dérivées, résultant d'une transformation, d'une composition ou d'une opération de base - par exemple, la valeur de http.request.uri.path est en minuscules et disponible en tant que zone d'une autre zone.
  • Valeurs informatiques, résultant d'une recherche, d'un calcul ou d'une autre intelligence - par exemple, une valeur cf.threat_score calculée dynamiquement par un processus d'apprentissage automatique qui inspecte les valeurs primitives et dérivées connexes.

Zones disponibles

Zones disponibles
Nom de zone Type Exemple de valeur Remarques
http.cookie Chaîne session=A12345;-background=light Cookie complet sous forme de chaîne
http.host Chaîne www.example.com Le nom d'hôte utilisé dans l'URI complet de la requête
http.referer Chaîne En-tête du référent HTTP
http.request.full_uri Chaîne https://www.example.com/articles/index?section=539061&expand=comments L'URI complet tel qu'il a été reçu par le serveur web (n'inclut pas #fragment, qui n'est pas envoyé aux serveurs web)
http.request.method Chaîne POST La méthode d' HTTP, en majuscules
http.request.uri Chaîne /articles/index?section=539061&expand=comments URI absolu de la demande
http.request.uri.path Chaîne /articles/index Chemin de la demande
http.request.uri.query Chaîne section=539061&expand=comments Chaîne de demande complète, moins le préfixe de délimitation "?"
http.user_agent Chaîne Mozilla/5.0 (X11 ; Linux x86_64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/65.0.3325.181 Safari/537.36 Agent utilisateur HTTP complet
http.x_forwarded_for Chaîne L'en-tête X-Forwarded-For HTTP complet
ip.src Adresse IP 93.155.208.22 L'adresse IP TCP du client, qui peut être ajustée pour refléter l'adresse IP réelle du client d'origine, le cas échéant (par exemple, en utilisant des en-têtes HTTP tels que X-Forwarded-For ou X-Real-IP)
ip.geoip.asnum Nombre 222 Numéro Système autonome (AS)
ip.geoip.country Chaîne Go Le code pays à 2 lettres
ssl Booléen Oui Indique si la connexion HTTP au client est chiffrée

Ces zones standard suivent la convention de dénomination de la référence de la zone d'affichage Wireshark. Toutefois, certaines variations subtiles peuvent exister dans les exemples de valeurs précédents.

En plus des zones standard, les zones Cloudflare suivantes sont également disponibles :

Champs Cloudflare disponibles
Nom de zone Type Exemple de valeur Remarques
cf.client.bot Booléen Oui Cette zone indique si la demande provient d'un bot ou d'un moteur de balayage connu, quelle que soit l'intention, bonne ou mauvaise.
cf.threat_score Nombre Valeur comprise entre 0 et 100 Cette zone représente un score de risque, 0 indique un faible risque, tel que déterminé par Cloudflare. Les valeurs supérieures à 10 peuvent représenter des spammeurs ou des bots, et les valeurs supérieures à 40 indiquent la présence de mauvais acteurs sur l'internet. Il est rare de voir des valeurs supérieures à 60, alors réglez les règles de votre pare-feu de manière à refuser celles qui sont supérieures à 10 et à bloquer celles qui sont supérieures à 50.

Fonctions

Le langage des règles de pare-feu dispose de plusieurs fonctions pour convertir les champs.

Ces fonctions ne sont actuellement pas prises en charge par l'Expression Builder.

Fonctions des règles de pare-feu
Nom de la fonction Types d'argument Type de retour Exemple d'utilisation Remarques
inférieur Chaîne Chaîne lower(http.host) == "www.example.com" Convertit une zone de chaîne en minuscules. Seuls les octets ASCII en majuscules sont convertis. Tous les autres octets sont laissés tels quels.
supérieur Chaîne Chaîne upper(http.host) == "www.example.com" Convertit une zone de chaîne en majuscules. Seuls les octets ASCII en minuscules sont convertis. Tous les autres octets sont laissés tels quels.

Expressions

Une expression renvoie la valeur true ou false en fonction d'une correspondance avec le trafic entrant. Exemple :

http.host eq "www.example.com" and ip.src in 92.182.212.0/24

Dans cet exemple, deux expressions uniques comprennent une expression composée. Pensez à chaque expression unique comme condition. Chaque condition est évaluée individuellement avant d'appliquer la logique pour déterminer le résultat final de l'expression composée.

En examinant la première expression unique, vous pouvez voir qu'elle contient :

  • une zone - http.host
  • un opérateur de comparaison - eq
  • une valeur - "www.example.com"

Toutes les conditions n'ont pas la même structure. D'autres exemples utilisant des structures différentes sont examinés dans la section suivante.

Opérateurs de comparaison

Les opérateurs de comparaison suivants sont disponibles pour utilisation dans les expressions :

Opérateurs de comparaison pour les expressions
Anglais De type C Description
eq == Egal
ne != Non égal
Lt < Inférieur à
le <= Inférieur ou égal à
Gt
Supérieur à
ge

=

Supérieur ou égal à
contient Contient exactement
Correspondances ~ Expression régulière inspirée de Re2
in La valeur apparaît dans un ensemble de valeurs. Prend en charge les plages qui utilisent la notation «.. ».
not ! Voir la comparaison des valeurs booléennes
bitwise_and & Valeur de la zone de bit de comparaison

Actuellement, l'Expression Builder ne prend en charge que les opérateurs anglais.

Une expression peut contenir un mélange d'opérateurs anglais et de type C. Par exemple, ip.src eq 93.184.216.34 est équivalent à ip.src == 93.184.216.34.

Certains opérateurs de comparaison s'appliquent à des zones spécifiques en fonction du type. La matrice suivante fournit des exemples des opérateurs disponibles pour différents types de zone :

Opérateurs de comparaison pour les champs
Anglais De type C Chaîne Adresse IP Nombre
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
Lt < 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

=

Supérieur ou égal à cf.threat_score ge 60
contient http.request.uri.path contains "/articles/"
Correspondances ~ 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}

L'évaluation des expressions utilisant des chaînes de caractères est sensible à la casse. Par conséquent, une règle de pare-feu peut nécessiter la définition de plusieurs conditions de test. Les clients d'entreprise peuvent utiliser une expression régulière avec l'opérateur de correspondances pour capturer plusieurs variations avec une expression unique.

Comparaison booléenne

Pour les zones de type booléen (par exemple, ssl), la zone apparaît par elle-même dans l'expression lors de l'évaluation d'une condition true. Pour une condition false, l'opérateur not s'applique.

Comparaison booléenne
Oui Faux
ssl not ssl

Expressions composées

Vous pouvez créer des expressions composées en regroupant deux ou plusieurs expressions simples à l'aide d'opérateurs logiques.

Expressions composées
Anglais De type C Description Exemple Priorité
not ! NOT logique not ( http.host eq "www.example.com" et ip.src in 93.184.216.0/24 ) 1
and && AND logique http.host eq "www.example.com" and ip.src in 93.184.216.0/24 2
xor ^^ XOR logique http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 3
ou & verbar; & verbar; OU logique http.host eq "www.example.com" or ip.src in 93.184.216.0/24 4

Pour modifier l'ordre de priorité, vous pouvez regrouper des expressions entre parenthèses. En l'absence de parenthèses, les expressions sont implicitement regroupées en fonction de la priorité standard :

ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth

Application d'un regroupement explicite :

(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth

Donner la priorité à OR avec des parenthèses :

ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)

Alors que not est utilisé pour le regroupement, il peut être utilisé pour annuler une comparaison unique. Par exemple, not ip.src eq 93.184.216.0 est équivalent à not (ip.src eq 93.184.216.0).

Enfin, vous pouvez également annuler les expressions groupées :

not (http.request.method eq "POST" and http.request.uri.path eq "/login")

Ecarts par rapport aux filtres d'affichage de Wireshark

Les expressions de règles de pare-feu sont inspirées par les filtres d'affichage de Wireshark. Toutefois, l'implémentation dévie de la façon suivante :

  • Pour les tests d'égalité IP CIDR, Wireshark autorise les plages au format ip.src == 1.2.3.0/24, tandis que CIS prend en charge les tests d'égalité n'utilisant qu'une seule adresse IP. Pour comparer un CIDR, utilisez l'opérateur in ; par exemple, ip.src in {1.2.3.0/24}.
  • Dans Wireshark, ssl est un champ de protocole qui contient des centaines d'autres champs de différents types qui peuvent être comparés de multiples façons. Toutefois, dans les règles de pare-feu, ssl est un champ booléen unique utilisé pour déterminer si la connexion du client à CIS est cryptée.
  • L'opérateur slice n'est pas pris en charge.
  • Toutes les fonctions ne sont pas prises en charge. Actuellement, len() et count() ne sont pas pris en charge.