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.pathest 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_scorecalculée dynamiquement par un processus d'apprentissage automatique qui inspecte les valeurs primitives et dérivées connexes.
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 :
| 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.
| 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 :
| 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 :
| 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.
| 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.
| 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érateurin; par exemple,ip.src in {1.2.3.0/24}. - Dans Wireshark,
sslest 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,sslest un champ booléen unique qui sert à déterminer si la connexion entre le client et CIS est chiffrée. - L'opérateur
slicen'est pas pris en charge. - Toutes les fonctions ne sont pas prises en charge. Actuellement,
len()etcount()ne sont pas pris en charge.