Utilización de campos, funciones y expresiones
Las reglas de cortafuegos están obsoletas. CIS trasladó las reglas de firewall existentes a las reglas personalizadas del WAF. Para obtener más información sobre este cambio, consulte Migración a reglas personalizadas.
Junto con las acciones, los campos y las expresiones son los bloques básicos de las reglas de cortafuegos. Estos dos elementos funcionan conjuntamente al definir los criterios a utilizar cuando hay coincidencia con una regla de cortafuegos.
Campos
Cuando CIS recibe una solicitud HTTP, se examina y se genera una tabla de campos con los que comparar. Esta tabla de campos existe mientras se procesa la solicitud actual. Considérela una tabla que contiene las propiedades de solicitud que deben coincidir con las expresiones.
Cada valor de campo se puede obtener de distintos lugares, como por ejemplo:
- Las propiedades primitivas son, obtenidas directamente del tráfico - por ejemplo,
http.request.uri.path
. - Valores derivados, resultantes de una transformación, composición u operación básica, por ejemplo hacer que el valor de
http.request.uri.path
esté todo en minúsculas y disponible como un campo de otro campo. - Valores de sistema, resultantes de una búsqueda, cálculo u otro proceso inteligente – por ejemplo, un
cf.threat_score
calculado dinámicamente por un proceso de aprendizaje automático que inspecciona los valores primitivos y derivados relacionados.
Campos disponibles
Nombre de campo | Tipo | Valor de ejemplo | Notas |
---|---|---|---|
http.cookie | Serie | session=A12345;-background=light | Toda una cookie como una serie |
http.host | Serie | www.example.com |
El nombre de host utilizado en la URI de solicitud completa |
http.referer | Serie | Cabecera del referenciador HTTP | |
http.request.full_uri | Serie | https://www.example.com/articles/index?section=539061&expand=comments |
La URI completa recibida por el servidor web (no incluye #fragment, que no se envía a los servidores web) |
http.request.method | Serie | POST | El método de encriptación de datos ( HTTP ), en mayúsculas |
http.request.uri | Serie | /articles/index?section=539061&expand=comments | El URI absoluto de la solicitud |
http.request.uri.path | Serie | /articles/index | La vía de acceso de la solicitud |
http.request.uri.query | Serie | section=539061&expand=comments | La cadena de consulta completa, menos el prefijo de delimitación "?" |
http.user_agent | Serie | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/65.0.3325.181 Safari/537.36 | El agente de usuario HTTP completo |
http.x_forwarded_for | Serie | La cabecera completa X-Forwarded-For HTTP | |
ip.src | Dirección IP | 93.155.208.22 | La dirección IP TCP del cliente, que puede ajustarse para reflejar la IP real del cliente original según proceda (por ejemplo, utilizando cabeceras HTTP como X-Forwarded-For o X-Real-IP) |
ip.geoip.asnum | Número | 222 | El número de Sistema autónomo (AS) |
ip.geoip.country | Serie | GB | El código de país de 2 letras |
ssl | Boolean | true | Indica si la conexión HTTP con el cliente es cifrada |
Estos campos estándar siguen el convenio de denominación de la referencia de campo de pantalla de Wireshark. Sin embargo, pueden existir algunas variaciones sutiles en los valores de ejemplo anteriores.
Además de los campos estándar, también están disponibles los siguientes campos definidos por Cloudflare:
Nombre de campo | Tipo | Valor de ejemplo | Notas |
---|---|---|---|
cf.client.bot | Boolean | true | Este campo indica si la solicitud viene de un bot o un rastreador conocido, independientemente de si la intención es buena o mala. |
cf.threat_score | Número | Un valor de 0 a 100 | Este campo representa una puntuación de riesgo, 0 indica bajo riesgo según determina Cloudflare. Los valores superiores a 10 pueden representar spammers o bots, y los superiores a 40 apuntan a malos actores en Internet. Es raro ver valores superiores a 60, así que ajusta las reglas de tu cortafuegos para que desafíen a los superiores a 10 y bloqueen a los superiores a 50. |
Funciones
El lenguaje de reglas del cortafuegos dispone de varias funciones para convertir campos.
Estas funciones no están soportadas actualmente en el Expression Builder.
Nombre de función | Tipos de argumentos | Tipo de retorno | Ejemplo de uso | Notas |
---|---|---|---|---|
lower | Serie | Serie | lower(http.host) == "www.example.com" |
Convierte un campo de serie a minúsculas. Solo se convierten los bytes ASCII en mayúsculas. Los demás bytes se dejan tal cual. |
upper | Serie | Serie | upper(http.host) == "www.example.com" |
Convierte un campo de serie a mayúsculas. Solo se convierten bytes ASCII en minúsculas. Los demás bytes se dejan tal cual. |
Expresiones
Una expresión devuelve true o false según si hay o no una coincidencia con el tráfico de entrada. Por ejemplo:
http.host eq "www.example.com" and ip.src in 92.182.212.0/24
En este ejemplo, dos expresiones individuales conforman una expresión compuesta. Se debe considerar cada una de las expresiones simples como una condición. Cada condición se evalúa individualmente antes de aplicarle la lógica para determinar el resultado final de la expresión compuesta.
Si observamos la primera expresión individual, podemos ver que contiene:
- un campo -
http.host
- un operador de comparación -
eq
- un valor -
"www.example.com"
No todas las condiciones tienen la misma estructura. En la siguiente sección se analizan otros ejemplos que utilizan estructuras diferentes.
Operadores de comparación
Hay los operadores de comparación siguientes disponibles para utilizar en expresiones:
Inglés | Tipo C | Descripción |
---|---|---|
eq | == | Igual |
ne | != | No igual a |
Lt | < | Menor que |
le | <= | Igual o menor que |
gt | Mayor que | |
ge |
|
Igual o mayor que |
contiene | Contiene exactamente | |
matches | ~ | expresión regular inspirada en Re2 |
in | El valor aparece en un conjunto de valores. Admite rangos que utilizan la notación «..». | |
not | ! | Ver comparación booleana |
bitwise_and | & | Comparar valor de campo de bit |
Actualmente, el Constructor de expresiones sólo admite operadores ingleses.
Una expresión puede contener una mezcla de operadores ingleses y de tipo C. Por ejemplo, ip.src eq 93.184.216.34
es equivalente a ip.src == 93.184.216.34
.
Ciertos operadores de comparación se aplican a campos específicos según su tipo. La matriz siguiente proporciona ejemplos de los operadores que están disponibles para los distintos tipos de campos:
Inglés | Tipo C | Serie | Dirección IP | Número |
---|---|---|---|---|
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 |
|
Igual o mayor que | cf.threat_score ge 60 | |
contiene | http.request.uri.path contains "/articles/" | |||
matches | ~ | http.request.uri.path ~ " [^/artículos/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 evaluación de expresiones que utilizan valores de cadena distingue entre mayúsculas y minúsculas. Como tal, una regla de cortafuegos puede requerir que se defina más de una condición de prueba. Los clientes de empresa pueden utilizar una expresión regular con el operador 'matches' para capturar varias variaciones con una sola expresión.
Comparación booleana
Para los campos de tipo booleano (por ejemplo, ssl
), el campo aparece por sí solo en la expresión al evaluar una condición de tipo true. Para una condición de tipo false, se aplica el operador not.
Sí | No |
---|---|
ssl | not ssl |
Expresiones compuestas
Puede crear expresiones compuestas agrupando dos o más expresiones simples mediante operadores lógicos.
Inglés | Tipo C | Descripción | Ejemplo | Prioridad |
---|---|---|---|---|
not | ! | NOT lógico | not ( http.host eq "www.example.com" y ip.src en 93.184.216.0/24 ) |
1 |
y | && | AND lógico | http.host eq "www.example.com" and ip.src in 93.184.216.0/24 |
2 |
xor | ^^ | XOR lógico | http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 |
3 |
o | || | OR lógico | http.host eq "www.example.com" or ip.src in 93.184.216.0/24 |
4 |
Para cambiar el orden de prioridad, puede agrupar expresiones mediante paréntesis. Si no se utilizan paréntesis, las expresiones se agrupan implícitamente según la prioridad estándar:
ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth
Aplicando una agrupación explícita:
(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth
Dando prioridad a or con paréntesis:
ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)
Mientras que not
se utiliza para agrupar, puede utilizarse para negar una comparación simple. Por ejemplo, not ip.src eq 93.184.216.0
es equivalente a not (ip.src eq 93.184.216.0)
.
Por último, también puede negar las expresiones agrupadas:
not (http.request.method eq "POST" and http.request.uri.path eq "/login")
Desviaciones de los filtros de visualización de Wireshark
Las expresiones de las reglas de cortafuegos se inspiran en los filtros de visualización de Wireshark. Sin embargo, la implementación es distinta en lo siguiente:
- Para las pruebas de igualdad de IP CIDR, Wireshark permite rangos en el formato
ip.src == 1.2.3.0/24
, mientras que CIS admite pruebas de igualdad utilizando una única dirección IP. Para comparar un CIDR, utilice el operadorin
; por ejemplo,ip.src in {1.2.3.0/24}
. - En Wireshark,
ssl
es un campo de protocolo que contiene cientos de otros campos de diversos tipos que se pueden comparar de múltiples maneras. Sin embargo, en las reglas de cortafuegos,ssl
es un único campo booleano que se utiliza para determinar si la conexión del cliente a CIS está cifrada. - El operador
slice
no está admitido. - No se admiten todas las funciones. Actualmente,
len()
ycount()
no reciben soporte.