Reglas

Ver en Markdown

Añade, lista y borra las reglas de borde de una zona, reglas de IP y país, excepciones del WAF y límites de peticiones.

En esta página

Reglas de borde de una zona, que el borde aplica a todos los nombres con proxy o solo a los que lista hosts. Hay cuatro tipos, ip, geo, waf_exception y rate_limit. Consulta WAF y Reglas.

OperaciónRuta
Listar reglasGET /v1/orgs/{org}/zones/{zone}/rules
Crear una reglaPOST /v1/orgs/{org}/zones/{zone}/rules
Borrar una reglaDELETE /v1/orgs/{org}/zones/{zone}/rules/{rule}

Listar reglas

GET /v1/orgs/{org}/zones/{zone}/rules

Lista las reglas de borde de la zona con sus ids y los nombres a los que se limita cada una (hosts; vacío significa todos).

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).

Respuesta

  • 200: Devuelve items, un array de ZoneRule.
CampoTipoDescripción
items[].kindstringUno de ip, geo, waf_exception, rate_limit.
items[].ipstringIP o CIDR.
items[].actionstringUno de block, allow.
items[].country_codestringCódigo de país ISO 3166-1 alfa-2. Patrón ^[A-Za-z]{2}$.
items[].rule_idintegerId de la regla. Mínimo 0.
items[].path_patternstring"" o * = todas; acabado en * = prefijo; si no, exacta.
items[].methodstring
items[].rpmintegerMínimo 0.
items[].burstintegerPor defecto 0. Mínimo 0.
items[].notestringComo mucho 500 caracteres.
items[].hostsarray de stringNombres a los que se aplica; ausente = todos los nombres de la zona.
items[].idintegerId.
items[].zone_idstring (uuid)Id de la zona.
items[].created_atstring (date-time)Fecha de creación.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rules" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "items": [
    {
      "id": 3,
      "zone_id": "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
      "kind": "ip",
      "ip": "203.0.113.0/24",
      "action": "block",
      "note": "Abusive scanner",
      "hosts": [],
      "created_at": "2026-10-27T09:30:00Z"
    }
  ]
}

Crear una regla

POST /v1/orgs/{org}/zones/{zone}/rules

Añade una regla de borde. Los campos dependen de kind:

kindCampos
ipip (dirección o CIDR), action
geocountry_code, action
waf_exceptionrule_id (0 = todas las reglas del WAF), path_pattern
rate_limitpath_pattern, method, rpm, burst

Las reglas rate_limit son los límites de peticiones avanzados, por ruta; el límite básico por IP es rate_limit_rpm de los ajustes de borde. hosts limita la regla a esos nombres (la zona o por debajo); un nombre sin registro con proxy da un aviso.

Rol necesario: tech o superior.

Controles de cambio: dry_run · If-Match (opcional) · X-Change-Reason (obligatorio)

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
X-Change-ReasoncabecerastringSíMotivo del cambio: 1-500 caracteres UTF-8 tras recortar espacios, sin caracteres de control. Si falta o no es válido: 422 reason_required. De 1 a 500 caracteres.
If-MatchcabecerastringNoVersión de configuración esperada, p. ej. "12" (se admite W/). Si no es la actual: 412 version_conflict.
dry_runconsultastringNo1/true simula el cambio: responde 200 con el plan (Applied) y no guarda nada. Admite 0/false; otro valor: 400. Uno de 1, true, 0, false.

Cuerpo de la petición

Tipo de contenido application/json. Esquema: RuleInput.

CampoTipoObligatorioDescripción
kindstringSíUno de ip, geo, waf_exception, rate_limit.
ipstringNoIP o CIDR.
actionstringNoUno de block, allow.
country_codestringNoCódigo de país ISO 3166-1 alfa-2. Patrón ^[A-Za-z]{2}$.
rule_idintegerNoId de la regla. Mínimo 0.
path_patternstringNo"" o * = todas; acabado en * = prefijo; si no, exacta.
methodstringNo
rpmintegerNoMínimo 0.
burstintegerNoPor defecto 0. Mínimo 0.
notestringNoComo mucho 500 caracteres.
hostsarray de stringNoNombres de la zona (la zona o por debajo) a los que se aplica; ausente o vacío = todos.

Respuesta

  • 200: Con dry_run=1, el plan del cambio (Applied); no se guarda nada.
  • 201: Creada. Devuelve ZoneRule.
CampoTipoDescripción
kindstringUno de ip, geo, waf_exception, rate_limit.
ipstringIP o CIDR.
actionstringUno de block, allow.
country_codestringCódigo de país ISO 3166-1 alfa-2. Patrón ^[A-Za-z]{2}$.
rule_idintegerId de la regla. Mínimo 0.
path_patternstring"" o * = todas; acabado en * = prefijo; si no, exacta.
methodstring
rpmintegerMínimo 0.
burstintegerPor defecto 0. Mínimo 0.
notestringComo mucho 500 caracteres.
hostsarray de stringNombres a los que se aplica; ausente = todos los nombres de la zona.
idintegerId.
zone_idstring (uuid)Id de la zona.
created_atstring (date-time)Fecha de creación.

Cabeceras de la respuesta: ETag, X-Config-Version.

Errores

EstadoDescripción
400Petición mal formada (bad_request).
409zone_merged: la zona está fusionada en otra.
412version_conflict: If-Match no coincide con la versión actual.
422Error de validación (invalid) o motivo ausente/no válido (reason_required).

Ejemplo

curl -X POST "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rules" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "X-Change-Reason: Block an abusive network" \
  -H 'If-Match: "12"' \
  -H "Content-Type: application/json" \
  --data '{
    "kind": "ip",
    "ip": "203.0.113.0/24",
    "action": "block",
    "note": "Abusive scanner"
  }'
201
{
  "id": 3,
  "zone_id": "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
  "kind": "ip",
  "ip": "203.0.113.0/24",
  "action": "block",
  "note": "Abusive scanner",
  "hosts": [],
  "created_at": "2026-10-27T09:30:00Z"
}

Borrar una regla

DELETE /v1/orgs/{org}/zones/{zone}/rules/{rule}

Quita una regla de borde de la zona.

Rol necesario: tech o superior.

Controles de cambio: dry_run · If-Match (opcional) · X-Change-Reason (obligatorio)

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
rulerutaintegerSíId de la regla.
X-Change-ReasoncabecerastringSíMotivo del cambio: 1-500 caracteres UTF-8 tras recortar espacios, sin caracteres de control. Si falta o no es válido: 422 reason_required. De 1 a 500 caracteres.
If-MatchcabecerastringNoVersión de configuración esperada, p. ej. "12" (se admite W/). Si no es la actual: 412 version_conflict.
dry_runconsultastringNo1/true simula el cambio: responde 200 con el plan (Applied) y no guarda nada. Admite 0/false; otro valor: 400. Uno de 1, true, 0, false.

Respuesta

  • 200: Con dry_run=1, el plan del cambio (Applied); no se guarda nada.
  • 204: Borrada. Sin cuerpo.

Cabeceras de la respuesta: ETag, X-Config-Version.

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
409zone_merged: la zona está fusionada en otra.
412version_conflict: If-Match no coincide con la versión actual.
422Error de validación (invalid) o motivo ausente/no válido (reason_required).

Ejemplo

curl -X DELETE "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rules/3" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "X-Change-Reason: The network is no longer abusive" \
  -H 'If-Match: "12"'

Última actualización:

↑↓ para moverte↵ para abriresc para cerrar