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
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 :
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.
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 :
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/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.
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 | 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érateurin
; 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()
etcount()
ne sont pas pris en charge.