Utilisation des zones, fonctions et expressions

Les règles de pare-feu sont obsolètes. CIS Les règles de pare-feu existantes ont été transférées vers les règles personnalisées du 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 est reçu par le serveur web (n'inclut pas le #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 d' TCP, 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 d' 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 correspondre à des spammeurs ou à des robots, et celles supérieures à 40 indiquent la présence d'acteurs malveillants sur Internet. Il est rare de voir des valeurs supérieures à 60; configurez donc vos règles de pare-feu pour demander une authentification lorsque la valeur est supérieure à 10, et pour bloquer les valeurs supérieures à 50.
cf.waf.score Nombre 1-99 Score basé sur l'apprentissage automatique qui estime la probabilité qu'une requête soit malveillante. Les scores vont de 1 (très probablement malveillant) à 99 (très probablement sûr). Des scores plus faibles indiquent un risque plus élevé. Utile pour créer des règles de pare-feu basées sur des seuils.

Fonctions

Le langage des règles de pare-feu dispose de plusieurs fonctions permettant de convertir des 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 abordé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/200 [7-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 valeurs de type chaîne 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 (et non : http.host eq "www.example.com" et ip.src dans 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)

Bien que not soit utilisé pour regrouper, il peut servir à nier une comparaison isolée. 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é d'adresses 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é utilisant uniquement 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 types variés pouvant être comparés de multiples façons. Cependant, dans les règles de pare-feu, ssl est un champ booléen unique qui sert à déterminer si la connexion entre le client et CIS est chiffré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.