IBM Cloud Docs
Felder, Funktionen und Ausdrücke verwenden

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

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:

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

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

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

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 mit Hilfe von logischen Operatoren gruppieren.

Zusammengesetzte Ausdrücke
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 Operator in; 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 ist ssl 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() und count() nicht unterstützt.