IBM Cloud Docs
Utilizzo di campi, funzioni ed espressioni

Utilizzo di campi, funzioni ed espressioni

Le regole firewall sono deprecate. CIS spostato le regole firewall esistenti alle regole personalizzate WAF. Per ulteriori informazioni su questa modifica, vedere Migrazione a regole personalizzate.

Insieme alle azioni, i campi e le espressioni sono gli elementi costitutivi delle regole del firewall. Questi due elementi operano insieme quando definisci i criteri da utilizzare quando viene soddisfatta una regola del firewall.

Campi

Quando CIS riceve una richiesta HTTP, viene esaminata e viene generata una tabella di campi con cui deve essere messa in corrispondenza. Questa tabella di campo esiste mentre viene elaborata la richiesta corrente. Considerala come una tabella che contiene le proprietà della richiesta che devono essere messe in corrispondenza con le espressioni.

Ciascun valore di campo può avere origine da diverse fonti, ad esempio:

  • Le proprietà primitive sono ottenute direttamente dal traffico - ad esempio, http.request.uri.path.
  • Valori derivati, risultanti da una trasformazione, una composizione o un'operazione di base - ad esempio, rendendo il valore di http.request.uri.path tutto minuscolo e disponibile come campo di un altro campo.
  • Valori di computer, risultanti da una ricerca, un calcolo o altre intelligence – ad esempio, un cf.threat_score calcolato dinamicamente da un processo di machine learning che analizza la primitiva correlata e i valori derivati.

Campi disponibili

Campi disponibili
Nome campo Immettere Valore di esempio Note
http.cookie Stringa session=A12345;-background=light Cookie completo come una stringa
http.host Stringa www.example.com Il nome dell'host utilizzato nell'URI completo della richiesta
http.referer Stringa HTTP header referer
http.request.full_uri Stringa https://www.example.com/articles/index?section=539061&expand=comments L'URI completo ricevuto dal server web (non include #fragment, che non viene inviato ai server web)
http.request.method Stringa POST Il metodo dell' HTTP, in maiuscolo
http.request.uri Stringa /articles/index?section=539061&expand=comments L'URI assoluto della richiesta
http.request.uri.path Stringa /articles/index Il percorso della richiesta
http.request.uri.query Stringa section=539061&expand=comments L'intera stringa di query, meno il prefisso di delimitazione "?"
http.user_agent Stringa Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/65.0.3325.181 Safari/537.36 L'intero agent utente HTTP
http.x_forwarded_for Stringa L'intestazione completa X-Forwarded-For HTTP
ip.src Indirizzo IP 93.155.208.22 L'indirizzo IP TCP del client, che può essere adattato per riflettere l'IP reale del client originale (ad esempio, utilizzando intestazioni HTTP come X-Forwarded-For o X-Real-IP)
ip.geoip.asnum Numero 222 Il numero Autonomous System (AS)
ip.geoip.country Stringa GB Il codice paese di 2 lettere
ssl Booleano vero, true Se la connessione HTTP al client è codificata

Questi campi standard seguono la convenzione di denominazione del riferimento del campo di visualizzazione Wireshark. Tuttavia, potrebbero esistere alcune sottili variazioni nei valori di esempio precedenti.

Oltre ai campi standard, sono disponibili anche i seguenti campi definiti da Cloudflare:

Campi Cloudflare disponibili
Nome campo Immettere Valore di esempio Note
cf.client.bot Booleano vero, true Questo campo indica se la richiesta proviene da un bot o da un crawler noto, a prescindere dall'intento buono o cattivo.
cf.threat_score Numero Un valore da 0 a 100 Questo campo rappresenta un punteggio di rischio, 0 indica un rischio basso come stabilito da Cloudflare. I valori superiori a 10 possono rappresentare spammer o bot, mentre quelli superiori a 40 indicano la presenza di cattivi attori su Internet. È raro vedere valori superiori a 60, per cui è opportuno regolare le regole del firewall in modo da sfidare quelli superiori a 10 e bloccare quelli superiori a 50.

Funzioni

Il linguaggio delle regole del firewall dispone di diverse funzioni per la conversione dei campi.

Queste funzioni non sono attualmente supportate da Expression Builder.

Funzioni delle regole del firewall
Nome funzione Tipi di argomento Tipo di ritorno Esempio di utilizzo Note
lower Stringa Stringa lower(http.host) == "www.example.com" Converte un campo stringa in caratteri minuscoli. Vengono convertiti solo i byte ASCII maiuscoli. Ogni altro byte viene lasciato così com'è.
upper Stringa Stringa upper(http.host) == "www.example.com" Converte un campo stringa in caratteri maiuscoli. Vengono convertiti solo i byte ASCII minuscoli. Ogni altro byte viene lasciato così com'è.

Espressioni

Un'espressione restituisce true o false in base a una corrispondenza con il traffico in entrata. Ad esempio:

http.host eq "www.example.com" and ip.src in 92.182.212.0/24

In questo esempio, due espressioni singole costituiscono un'espressione composta. Pensa ad ogni singola espressione come a una condizione. Ciascuna condizione viene valutata singolarmente prima di applicare la logica and per determinare il risultato finale dell'espressione composta.

Osservando la prima espressione singola, si può notare che contiene:

  • un campo - http.host
  • un operatore di confronto - eq
  • un valore - "www.example.com"

Non tutte le condizioni hanno la stessa struttura. Altri esempi che utilizzano strutture diverse sono discussi nella sezione successiva.

Operatori di confronto

Sono disponibili per essere utilizzati nelle espressioni i seguenti operatori di confronto:

Operatori di confronto per le espressioni
Inglese Simile a C Descrizione
eq == Uguale a
ne != Diverso da
lt < Minore di
le <= Minore o uguale a
GT
Maggiore di
ge traduzione: "Non è vero che non c'è niente da fare. Maggiore o uguale a
contains Contiene esattamente
corrisponde ~ Espressione regolare ispirata a Re2
in Il valore compare in una serie di valori. Supporta intervalli che utilizzano la notazione "..".
not ! Vedi Confronto booleano
bitwise_and & Valore del campo bit di confronto

Attualmente l'Expression Builder supporta solo operatori inglesi.

Un'espressione può contenere un mix di operatori inglesi e C-like. Ad esempio, ip.src eq 93.184.216.34 equivale a ip.src == 93.184.216.34.

Determinati operatori di confronto si applicano a campi specifici in base al tipo. La seguente matrice fornisce gli esempi di quali operatori sono disponibili per i diversi tipi di campo:

Operatori di confronto per i campi
Inglese Simile a C Stringa Indirizzo IP Numero
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 traduzione: "Non è vero che non c'è niente da fare. Maggiore o uguale a cf.threat_score ge 60
contains http.request.uri.path contains "/articles/"
corrisponde ~ http.request.uri.path ~ " [^/articoli/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}

La valutazione delle espressioni che utilizzano valori stringa è sensibile alle maiuscole e alle minuscole. Per questo motivo, una regola del firewall potrebbe richiedere la definizione di più di una condizione di test. I clienti Enterprise possono utilizzare un'espressione regolare con l'operatore matches per acquisire più variazioni con una singola espressione.

Confronto booleano

Per i campi di tipo booleano (ad esempio, ssl), il campo compare da solo nell'espressione quando viene valutata una condizione true. Per una condizione false, viene applicato l'operatore not.

Confronto booleano
Vero False
ssl not ssl

Espressioni composte

È possibile creare espressioni composte raggruppando due o più espressioni singole utilizzando gli operatori logici.

Espressioni composte
Inglese Simile a C Descrizione Esempio Precedenza
not ! NOT logico not ( http.host eq "www.example.com" e ip.src in 93.184.216.0/24 ) 1
e && AND logico http.host eq "www.example.com" and ip.src in 93.184.216.0/24 2
xor ^^ XOR logico http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 3
oppure | | OR logico http.host eq "www.example.com" or ip.src in 93.184.216.0/24 4

Per modificare l'ordine di precedenza, puoi raggruppare le espressioni con le parentesi. Senza utilizzare le parentesi, le espressioni vengono raggruppate implicitamente in base alla precedenza standard:

ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth

Applicazione del raggruppamento esplicito:

(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth

Dare la precedenza o utilizzare le parentesi:

ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)

Mentre not viene utilizzato per raggruppare, può essere usato per annullare un singolo confronto. Ad esempio, not ip.src eq 93.184.216.0 equivale a not (ip.src eq 93.184.216.0).

Infine, puoi anche negare le espressioni raggruppate:

not (http.request.method eq "POST" and http.request.uri.path eq "/login")

Deviazioni dai filtri di visualizzazione Wireshark

Le espressioni delle regole del firewall sono ispirate ai filtri di visualizzazione Wireshark. Tuttavia, l'implementazione si discosta nei seguenti modi:

  • Per i test di uguaglianza IP CIDR, Wireshark consente intervalli nel formato ip.src == 1.2.3.0/24, mentre CIS supporta test di uguaglianza che utilizzano solo un singolo indirizzo IP. Per confrontare un CIDR, utilizza l'operatore in; ad esempio, ip.src in {1.2.3.0/24}.
  • In Wireshark, ssl è un campo di protocollo che contiene centinaia di altri campi di vario tipo, disponibili per il confronto in più modi. Tuttavia, nelle regole del firewall, ssl è un singolo campo booleano utilizzato per determinare se la connessione dal client a CIS è crittografata.
  • L'operatore slice non è supportato.
  • Non tutte le funzioni sono supportate. Attualmente, len() e count() non sono supportati.