Acerca de las reglas personalizadas de WAF

Utilice la función de reglas personalizadas del WAF para controlar el tráfico entrante filtrando las solicitudes a un dominio. Puede realizar acciones como Bloquear o Desafío gestionado en las solicitudes entrantes de acuerdo con las reglas que defina.

Al igual que otras reglas evaluadas por el motor de reglas, las reglas personalizadas de WAF requieren los siguientes parámetros básicos:

  • Expresión que especifica los criterios que se están comparando con el tráfico mediante el lenguaje de reglas.
  • Una acción que especifica qué hacer cuando se cumple la regla.

Las reglas personalizadas se evalúan en el orden en que se establecen, desde la primera hasta la última posición, en la tabla de reglas personalizadas. Puede ver la tabla navegando a Seguridad > Reglas de cortafuegos. Algunas acciones como Bloquear detienen la evaluación de otras reglas. Para obtener más detalles sobre las acciones y su comportamiento, consulte Acciones de reglas del motor de conjuntos de reglas.

Casos de uso comunes

Las siguientes secciones detallan ejemplos de casos de uso comunes para las reglas personalizadas de WAF.

Permitir únicamente el tráfico de países específicos

Mediante la acción Bloquear, este ejemplo bloquea las solicitudes en función de su código de país utilizando el campo ip.src.country, lo que permite solicitudes solo de dos países: Estados Unidos y México:

(not ip.src.country in {"US" "MX"})

Bloquear solicitudes por reputación de IP

La reputación IP es una puntuación de 0 (riesgo cero) a 100 (riesgo alto), que clasifica la reputación IP de un visitante.

La reputación de las direcciones IP se calcula a partir de Project Honeypot, información externa sobre direcciones IP públicas e inteligencia sobre amenazas internas procedente de reglas gestionadas y de DDoS.

Mediante la acción Bloquear, este ejemplo bloquea las solicitudes basadas en códigos de país (formato ISO 3166-1 alfa 2 ↗), de direcciones IP que obtienen una puntuación superior a 0:

(ip.src.country in {"CN" "TW" "US" "GB"} and cf.threat_score gt 0)

Permitir sólo el tráfico procedente de las direcciones IP especificadas

La acción Bloquear restringe el acceso a tu dominio, permitiendo sólo peticiones desde direcciones IP especificadas y denegando todas las demás.

Por ejemplo, para permitir el tráfico sólo desde las IP 192.0.2.10 y 203.0.113.25, ejecute la siguiente expresión:

(not ip.src in {"192.0.2.10" "203.0.113.25"})

Utilice una de las siguientes expresiones en función del protocolo que desee restringir:

  • Si desea especificar subredes en lugar de direcciones IP individuales, IBM Cloud CIS sólo admite:

    IPv4: /16 y /24

    IPv6: /32, /48, y /64

  • Incluya siempre tanto IPv4 como IPv6 para una cobertura completa.

  • Bloquear sólo IPv4 ( 0.0.0.0/0 ) sigue permitiendo el tráfico de IPv6. Para bloquear ambos:

    (ip.src in {0.0.0.0/0} or ip.src in {::/0})
    

Configurar una regla para omitir otras funciones de CIS

La acción de omitir admite diferentes opciones de omisión, según las funciones de seguridad o los productos que desee omitir.

Esta sección contiene ejemplos de diferentes escenarios de reglas de omisión para reglas personalizadas de WAF. Tenga en cuenta las siguientes consideraciones:

  • El valor " {zone_id} " es el ID de la zona donde desea agregar la regla.

  • El valor " {ruleset_id} " es el ID del conjunto de reglas del punto de entrada de la fase " http_request_firewall_custom ". Para obtener más información sobre cómo conseguir este ID de conjunto de reglas, consulte Lista y visualización de conjuntos de reglas. Los siguientes ejemplos de API añaden una regla de omisión a un conjunto de reglas existente mediante la operación de regla Crear un conjunto de reglas de zona.

    Sin embargo, es posible que el conjunto de reglas del punto de entrada aún no exista. En este caso, utilice la operación Actualizar conjunto de reglas de punto de entrada para crear el conjunto de reglas de punto de entrada con una regla de omisión.

  • Aunque cada ejemplo incluye solo un parámetro de acción, puede utilizar varias opciones de omisión en la misma regla especificando el conjunto de reglas, las fases y los parámetros de acción de los productos simultáneamente.

Omitir las reglas restantes del conjunto de reglas actual

En este ejemplo se utiliza la operación de regla Crear un conjunto de reglas de zona para agregar una regla de omisión al conjunto de reglas de punto de entrada de fase de http_request_firewall_custom existente con ID RULESET_ID. Si no conoce el ID del conjunto de reglas del punto de entrada, consulte Obtención del punto de entrada de reglas personalizadas para la API. La regla omite todas las reglas restantes en el conjunto de reglas actual para las solicitudes que coinciden con la expresión de la regla:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "ruleset": "current"
  },
  "expression": "http.request.uri.path contains \"/skip-current-ruleset/\"",
  "description": ""
}'

Saltar una fase

Este ejemplo utiliza el conjunto de reglas Crear una zona para añadir una regla al conjunto de reglas de punto de entrada de fase existente http_request_firewall_custom con ID RULESET_ID. La regla omite la fase de e http_ratelimit encia para las solicitudes que coinciden con la expresión de la regla:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "phases": [
      "http_ratelimit"
    ]
  },
  "expression": "http.request.uri.path contains \"/skip-phase/\"",
  "description": ""
}'

Saltar una fase y no registrar solicitudes coincidentes

En este ejemplo se utiliza la operación de regla Crear un conjunto de reglas de zona para agregar una regla que omite la fase de http_ratelimit o y desactiva el registro de eventos para la regla actual:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "phases": [
      "http_ratelimit"
    ]
  },
  "logging": {
    "enabled": false
  },
  "expression": "http.request.uri.path contains \"/disable-logging/\"",
  "description": ""
}'

Omitir productos de seguridad

Este ejemplo utiliza la operación de regla Crear un conjunto de reglas de zona para agregar una regla que omite los productos Bloqueo de zona y Bloqueo de agente de usuario para las solicitudes que coincidan con la expresión de la regla:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "products": [
      "zoneLockdown",
      "uaBlock"
    ]
  },
  "expression": "http.request.uri.path contains \"/skip-products/\"",
  "description": ""
}'