Felder, Funktionen und Ausdrücke verwenden
Firewall-Regeln sind veraltet. CIS vorhandene Firewall-Regeln in benutzerdefinierte WAF-Regeln verschoben. Weitere Informationen zu dieser Änderung finden Sie unter "Migration zu benutzerdefinierten Regeln ".
Zusammen mit den Aktionen sind Felder und Ausdrücke die Bausteine für Firewallregeln. Beim Definieren der Kriterien, die anzuwenden sind, wenn es eine Übereinstimmung mit einer Firewallregel gibt, arbeiten diese beiden Elemente zusammen.
Felder
Wenn CIS eine HTTP-Anforderung empfängt, wird sie untersucht und es wird eine Tabelle mit Feldern erstellt, die abgeglichen werden sollen. Diese Feldtabelle ist vorhanden, während die aktuelle Anfrage verarbeitet wird. Stellen Sie sich diese als eine Tabelle mit Anforderungseigenschaften vor, die mit den Ausdrücken abgeglichen werden sollen.
Die einzelnen Feldwerte können aus verschiedenen Bereichen bezogen werden, z. B.:
- Primitive Eigenschaften sind, die direkt aus dem Verkehr gewonnen werden - zum Beispiel
http.request.uri.path
. - Abgeleitete Werte, die sich aus einer Transformation, Zusammensetzung oder Basisoperation ergeben, z. B. den Wert von
http.request.uri.path
in Kleinbuchstaben und als Feld eines anderen Felds verfügbar machen. - Computerwerte, die sich aus einer Suche, einer Berechnung oder anderem geschäftsrelevantem Wissen ergeben, beispielsweise eine Bedrohungsbewertung (
cf.threat_score
), die dynamisch durch einen maschinellen Lernprozess berechnet wurde, bei dem zugehörige primitive und abgeleitete Werte untersucht wurden.
Verfügbare Felder
Feldname | Typ | Beispielwert | Anmerkungen |
---|---|---|---|
http.cookie | Zeichenfolge | session=A12345;-background=light | Vollständiges Cookie als Zeichenfolge |
http.host | Zeichenfolge | www.example.com |
Der im vollständigen URI der Anfrage verwendete Hostname |
http.referer | Zeichenfolge | HTTP-Referer-Header | |
http.request.full_uri | Zeichenfolge | https://www.example.com/articles/index?section=539061&expand=comments |
Der vollständige URI, wie er vom Webserver empfangen wurde (enthält nicht #fragment, das nicht an Webserver gesendet wird) |
http.request.method | Zeichenfolge | POST | Die HTTP-Methode, in Großbuchstaben |
http.request.uri | Zeichenfolge | /articles/index?section=539061&expand=comments | Der absolute URI der Anforderung |
http.request.uri.path | Zeichenfolge | /articles/index | Der Pfad der Anforderung |
http.request.uri.query | Zeichenfolge | section=539061&expand=comments | Die gesamte Abfragezeichenfolge ohne das Begrenzungspräfix "?" |
http.user_agent | Zeichenfolge | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/65.0.3325.181 Safari/537.36 | Der gesamte HTTP-Benutzeragent |
http.x_forwarded_for | Zeichenfolge | Der vollständige HTTP-Header 'X-Forwarded-For' | |
ip.src | IP-Adresse | 93.155.208.22 | Die Client-TCP-IP-Adresse, die gegebenenfalls so angepasst werden kann, dass sie die echte Client-IP des ursprünglichen Clients widerspiegelt (z. B. durch Verwendung von HTTP-Headern wie X-Forwarded-For oder X-Real-IP) |
ip.geoip.asnum | Zahl | 222 | Die Nummer des Autonomous System (AS) |
ip.geoip.country | Zeichenfolge | GB | Der aus zwei Buchstaben bestehende Landescode |
ssl | Boolesch | Ja | Gibt an, ob die HTTP-Verbindung zum Client verschlüsselt ist |
Diese Standardfelder folgen der Namenskonvention der Wireshark-Referenz für Anzeigefelder. Die oben angegebenen Beispielwerte können jedoch geringfügige Abweichungen enthalten.
Zusätzlich zu den Standardfeldern sind die folgenden, von Cloudflare definierten Felder verfügbar:
Feldname | Typ | Beispielwert | Anmerkungen |
---|---|---|---|
cf.client.bot | Boolesch | Ja | Dieses Feld gibt an, ob die Anforderung von einem bekannten Bot oder Crawler stammt, wobei die Absicht gut oder schlecht sein kann. |
cf.threat_score | Zahl | Wert zwischen 0 und 100 | Dieses Feld stellt die Risikobewertung dar, wobei 0 nach der Festlegung durch Cloudflare ein niedriges Risiko angibt. Werte über 10 können auf Spammer oder Bots hindeuten, Werte über 40 auf bösartige Akteure im Internet. Werte über 60 sind selten, daher sollten Sie Ihre Firewall-Regeln so einstellen, dass Werte über 10 abgelehnt und Werte über 50 blockiert werden. |
Funktionen
Die Firewall-Regelsprache verfügt über mehrere Funktionen zur Umwandlung von Feldern.
Diese Funktionen werden derzeit im Expression Builder nicht unterstützt.
Funktionsname | Argumenttypen | Rückgabetyp | Anwendungsbeispiel | Anmerkungen |
---|---|---|---|---|
unten | Zeichenfolge | Zeichenfolge | lower(http.host) == "www.example.com" |
Konvertiert ein Zeichenfolgefeld in Kleinbuchstaben. Es werden nur ASCII-Bytes in Großbuchstaben konvertiert. Alle anderen Bytes bleiben unverändert. |
oben | Zeichenfolge | Zeichenfolge | upper(http.host) == "www.example.com" |
Konvertiert ein Zeichenfolgefeld in Großbuchstaben. Es werden nur ASCII-Bytes in Kleinbuchstaben konvertiert. Alle anderen Bytes bleiben unverändert. |
Ausdrücke
Ein Ausdruck gibt basierend auf einer Übereinstimmung mit dem eingehenden Datenverkehr den Wert 'true' oder 'false' zurück. Beispiel:
http.host eq "www.example.com" and ip.src in 92.182.212.0/24
Im vorliegenden Beispiel bilden zwei einzelne Ausdrücke einen zusammengesetzten Ausdruck. Stellen Sie sich die einzelnen Ausdrücke als Bedingungen vor. Jede Bedingung wird vor dem Anwenden und der Logik einzeln ausgewertet, um das Endergebnis des zusammengesetzten Ausdrucks zu bestimmen.
Ein genauerer Blick auf den ersten einzelnen Ausdruck zeigt, dass er Folgendes enthält:
- ein Feld –
http.host
- einen Vergleichsoperator –
eq
- einen Wert –
"www.example.com"
Nicht alle Bedingungen weisen die gleiche Struktur auf. Weitere Beispiele, die andere Strukturen verwenden, werden im nächsten Abschnitt behandelt.
Vergleichsoperatoren
Die folgenden Vergleichsoperatoren sind zur Verwendung in Ausdrücken verfügbar:
Englisch | C-ähnlich | Beschreibung |
---|---|---|
eq | == | Gleich |
ne | != | Ungleich |
lt | < | Kleiner als |
le | <= | Kleiner-gleich |
gt | Größer als | |
ge |
|
Größer-gleich |
enthält | Enthält genau | |
entspricht | ~ | Von Re2 inspirierter regulärer Ausdruck |
in | Der Wert wird in einer Gruppe von Werten angezeigt. Unterstützt Bereiche, die die ".."-Notation verwenden. | |
nicht | ! | Siehe Boolescher Vergleich |
bitwise_and | & | Bitfeldwert vergleichen |
Derzeit unterstützt der Expression Builder nur englische Operatoren.
Ein Ausdruck kann eine Mischung aus englischen und C-ähnlichen Operatoren enthalten. Beispielsweise ist ip.src eq 93.184.216.34
äquivalent zu ip.src == 93.184.216.34
.
Einige Vergleichsoperatoren sind auf der Basis des Typs auf bestimmte Felder anzuwenden. Die folgende Matrix enthält Beispiele dafür, welche Operatoren für die verschiedenen Feldtypen verfügbar sind:
Englisch | C-ähnlich | Zeichenfolge | IP-Adresse | Zahl |
---|---|---|---|---|
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 |
|
Größer-gleich | cf.threat_score ge 60 | |
enthält | http.request.uri.path contains "/articles/" | |||
entspricht | ~ | 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} |
Bei der Auswertung von Ausdrücken, die Zeichenkettenwerte verwenden, wird die Groß- und Kleinschreibung beachtet. Eine Firewall als solches erfordert möglicherweise, dass mehr als eine Testbedingung definiert wird. Unternehmenskunden können einen regulären Ausdruck mit dem Operator "matches" verwenden, um mehrere Varianten mit einem einzigen Ausdruck zu erfassen.
Boolescher Vergleich
Für Felder des booleschen Typs (z. B. ssl
) wird das Feld selbst im Ausdruck angezeigt, wenn eine Auswertung für eine wahre Bedingung erfolgt. Für eine falsche Bedingung wird der Operator not angewendet.
Ja | Falsch |
---|---|
ssl | not ssl |
Zusammengesetzte Ausdrücke
Sie können zusammengesetzte Ausdrücke erstellen, indem Sie zwei oder mehr einzelne Ausdrücke mit Hilfe von logischen Operatoren gruppieren.
Englisch | C-ähnlich | Beschreibung | Beispiel | Rangfolge |
---|---|---|---|---|
nicht | ! | Logisches NICHT | not ( http.host eq "www.example.com" und ip.src in 93.184.216.0/24 ) |
1 |
und | && | Logisches UND | http.host eq "www.example.com" and ip.src in 93.184.216.0/24 |
2 |
xor | ^^ | Logisches Exklusiv-Oder (XOR) | http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 |
3 |
oder | & verbar; & verbar; | Logisches ODER | http.host eq "www.example.com" or ip.src in 93.184.216.0/24 |
4 |
Um die Reihenfolge der Vorrangstellung zu ändern, können Sie Ausdrücke mithilfe von runden Klammern gruppieren. Falls keine runden Klammern verwendet werden, werden Ausdrücke auf der Basis des Standardvorrangs implizit gruppiert:
ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth
Explizite Gruppierung anwenden:
(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth
Vorrang für 'or' mithilfe von runden Klammern einräumen:
ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)
Während not
für die Gruppierung verwendet wird, kann es auch verwendet werden, um einen einzelnen Vergleich zu negieren. Beispielsweise ist not ip.src eq 93.184.216.0
äquivalent zu not (ip.src eq 93.184.216.0)
.
Sie können schließlich auch gruppierte Ausdrücke verneinen:
not (http.request.method eq "POST" and http.request.uri.path eq "/login")
Abweichungen von Wireshark-Anzeigefiltern
Ausdrücke für Firewallregeln sind von Wireshark-Anzeigefiltern inspiriert. Die Implementierung weicht jedoch auf folgende Weise ab:
- Für CIDR-IP-Gleichheitstests erlaubt Wireshark Bereiche im Format
ip.src == 1.2.3.0/24
, während CIS Gleichheitstests mit nur einer einzigen IP-Adresse unterstützt. Zum Vergleichen einer CIDR verwenden Sie den Operatorin
; Beispiel:ip.src in {1.2.3.0/24}
. - In Wireshark ist
ssl
ein Protokollfeld, das Hunderte von anderen Feldern unterschiedlicher Art enthält, die auf verschiedene Weise für den Vergleich zur Verfügung stehen. In Firewall-Regeln istssl
jedoch ein einzelnes boolesches Feld, das verwendet wird, um festzustellen, ob die Verbindung vom Client zu CIS verschlüsselt ist. - Der Operator
slice
wird nicht unterstützt. - Nicht alle Funktionen werden unterstützt. Derzeit werden
len()
undcount()
nicht unterstützt.