Felder, Funktionen und Ausdrücke verwenden
Firewall-Regeln sind veraltet. CIS Bestehende Firewall-Regeln wurden 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 werden direkt aus dem Datenverkehr gewonnen – 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.pathin 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 in der vollständigen Anfrage-URI verwendete Hostname |
| http.referer | Zeichenfolge | HTTP-Referer-Header | |
| http.request.full_uri | Zeichenfolge | https://www.example.com/articles/index?section=539061&expand=comments |
Die vollständige URI, wie sie vom Webserver empfangen wird (ohne #fragment, da dieses 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 IP-Adresse des Client- TCP s, die gegebenenfalls an die tatsächliche IP-Adresse des ursprünglichen Clients angepasst werden kann (beispielsweise 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 | Boolescher Wert | 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 | Boolescher Wert | 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, und Werte über 40 weisen auf böswillige Akteure im Internet hin. Werte über 60 kommen nur selten vor. Passen Sie Ihre Firewall-Regeln daher so an, dass Werte über 10 abgefragt und Werte über 50 blockiert werden. |
| cf.waf.score | Zahl | 1–99 | Auf maschinellem Lernen basierende Bewertung, die die Wahrscheinlichkeit einer bösartigen Anfrage einschätzt. Die Punktzahl reicht von 1 (höchstwahrscheinlich bösartig) bis 99 (höchstwahrscheinlich sicher). Niedrigere Punktzahlen bedeuten ein höheres Risiko. Nützlich für die Erstellung schwellenwertbasierter Firewall-Regeln. |
Funktionen
Die Sprache der Firewall-Regeln verfügt über mehrere Funktionen zur Konvertierung 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. Zum 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 mit unterschiedlichen Strukturen 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/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} |
Bei der Auswertung von Ausdrücken, die Zeichenfolgenwerte verwenden, wird zwischen Groß- und Kleinschreibung unterschieden. 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 mithilfe logischer Operatoren gruppieren.
| Englisch | C-ähnlich | Beschreibung | Beispiel | Rangfolge |
|---|---|---|---|---|
| nicht | ! | Logisches NICHT | nicht ( 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)
while not wird zwar zum Gruppieren verwendet, kann aber auch dazu dienen, einen einzelnen Vergleich zu verneinen. 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:
- Bei CIDR-IP-Gleichheitstests erlaubt Wireshark Bereiche im Format
ip.src == 1.2.3.0/24, während CIS Gleichheitstests nur mit 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
sslgibt es ein Protokollfeld, das Hunderte weiterer Felder verschiedener Typen enthält, die auf vielfältige Weise verglichen werden können. In den Firewall-Regelnsslist jedoch ein einzelnes boolesches Feld, mit dem bestimmt wird, ob die Verbindung vom Client zu CIS verschlüsselt ist. - Der Operator
slicewird nicht unterstützt. - Nicht alle Funktionen werden unterstützt. Derzeit werden
len()undcount()nicht unterstützt.