# Referencia de reglas

> Campos de los cuatro tipos de regla de borde y de las reglas de límite de peticiones, con sus límites y valores por defecto.

## Reglas de borde

Las reglas de borde se crean con `POST /v1/orgs/{org}/zones/{zone}/rules` (`rules add` en la CLI, `add_rule` en MCP) y se borran con `DELETE …/rules/{rule}` (`rules rm`, `remove_rule`). No se editan: se borran y se vuelven a crear. Solo se aplican los campos del tipo de la regla.

| Campo | Tipos | Reglas |
|---|---|---|
| `kind` | todos | `ip`, `geo`, `waf_exception` o `rate_limit`. Obligatorio. |
| `ip` | `ip` | Dirección IPv4 o IPv6, o rango CIDR. Se guarda en forma canónica. |
| `action` | `ip`, `geo` | `block` o `allow`. |
| `country_code` | `geo` | ISO 3166-1 alfa-2; se guarda en mayúsculas. |
| `rule_id` | `waf_exception` | Entero ≥ 0. `0` = todas las reglas del WAF; `1001`–`1008` = un [escudo](https://developers.openwaf.dev/es/waf/shields/). Obligatorio. |
| `path_pattern` | `waf_exception`, `rate_limit` | Vacío o `*` = cualquier ruta; acabado en `*` = prefijo; si no, exacta. En otro caso tiene que empezar por `/`. |
| `method` | `rate_limit` | Método HTTP en mayúsculas; vacío = cualquiera. |
| `rpm` | `rate_limit` | Peticiones por minuto y por IP, ≥ 0. `0` bloquea todas las peticiones que casan. Obligatorio. |
| `burst` | `rate_limit` | Peticiones de más por minuto, ≥ 0. Por defecto `0`. |
| `note` | todos | Hasta 500 caracteres. |
| `hosts` | todos | Nombres de la zona (la zona o por debajo) a los que se aplica la regla. Ausente o vacío = todos. |

La respuesta añade `id`, `zone_id` y `created_at`. `GET …/rules` las lista por orden de identificador.

## Campos de las reglas de límite de peticiones

Las [reglas de límite de peticiones](https://developers.openwaf.dev/es/waf/rate-limiting/#per-path-rules) viven en el ajuste de borde `rate_rules` (y en `hosts.<nombre>.rate_rules`).

| Campo | Por defecto | Reglas |
|---|---|---|
| `id` | a partir de `name` | `a-z`, `0-9` y `-`, hasta 40 caracteres, único en la lista. `Login` pasa a `login`; uno repetido, a `login-2`. Los eventos nombran la regla `rate_rule:<id>`. |
| `name` | — | Hasta 100 caracteres. |
| `enabled` | `true` | Una regla desactivada se guarda, pero no se envía al borde. |
| `hosts` | `[]` | Nombres de la zona; `[]` = todos. Siempre `[]` en la lista propia de un nombre. |
| `path_prefix` / `path_exact` | — | Exactamente uno. Un prefijo casa en un límite de segmento (`/auth/login` casa con `/auth/login` y `/auth/login/x`, no con `/auth/loginx`; `/` = todo). Una ruta exacta ignora la `/` final. Los dos ignoran mayúsculas y se guardan en minúsculas. |
| `methods` | `[]` | P. ej. `["POST"]`; `[]` = cualquiera. |
| `header_present` | — | Solo las peticiones que llevan esa cabecera (nombre en minúsculas). |
| `query_present` | — | Solo las peticiones que llevan ese parámetro en la query. |
| `key` | `ip` | `ip`, `header`, `cookie` o `body_field`. |
| `key_name` | — | Nombre de la cabecera, de la cookie o ruta JSON (`a.b`, hasta 4 niveles). Vacío para `ip`. |
| `requests` | — | 1–1 000 000. Obligatorio. |
| `period` | — | Segundos, 1–86 400. Obligatorio. |
| `algorithm` | `sliding_window` | `sliding_window` o `gcra`. |
| `action` | `block` | `block`, `challenge` o `log`. |
| `mitigation_timeout` | `0` | Segundos, 0–86 400. |
| `per_node_divisor` | `true` | Repartir `requests` entre los nodos de borde que sirven el sitio. |
