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.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

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:

Verfügbare Cloudflare-Felder
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.

Funktionen der Firewall-Regeln
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:

Vergleichsoperatoren für Ausdrücke
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:

Vergleichsoperatoren für Felder
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.

Boolescher Vergleich
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.

Zusammengesetzte Ausdrücke
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 Operator in; Beispiel: ip.src in {1.2.3.0/24}.
  • In Wireshark ssl gibt es ein Protokollfeld, das Hunderte weiterer Felder verschiedener Typen enthält, die auf vielfältige Weise verglichen werden können. In den Firewall-Regeln ssl ist jedoch ein einzelnes boolesches Feld, mit dem bestimmt wird, 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() und count() nicht unterstützt.