# rules

> Órdenes openwaf-cloud ctl rules para listar, añadir y quitar las reglas de borde de una zona: IP, país, excepciones del WAF y límites sencillos.

Las reglas de borde se aplican a todos los nombres de la zona salvo que las limites con `hosts`. Cada cambio es una versión nueva de la zona y admite `--reason`, `--dry-run`, `--yes` y `--wait`.

## rules list

```text
rules list <zona> [--json]
```

Las reglas de la zona con su id, tipo, detalle, acción, los nombres a los que se limitan y su nota.

## rules add

```text
rules add <zona> kind=… clave=valor … [hosts:='["a.example.com"]'] [note=…] --reason "…"
```

| `kind` | Claves |
|---|---|
| `ip` | `ip` (una dirección o un rango CIDR, como `203.0.113.0/24`), `action` (`block` o `allow`). |
| `geo` | `country_code` (dos letras, como `ES`), `action` (`block` o `allow`). |
| `waf_exception` | `rule_id` (obligatoria: la regla del WAF que se salta), `path_pattern` (vacío: todas las rutas). |
| `rate_limit` | `rpm` (obligatoria: peticiones por minuto), `burst` (0 por defecto), `path_pattern`, `method`. |

Cualquier tipo admite además:

| Clave | Significado |
|---|---|
| `hosts:='["a.example.com"]'` | Limitar la regla a estos nombres de la zona. Sin ella, se aplica a todos. |
| `note` | Una nota de hasta 500 caracteres. |

```sh
openwaf-cloud ctl rules add example.com kind=ip ip=203.0.113.0/24 action=block note="Escáner" --reason "Bloquear escáner"
openwaf-cloud ctl rules add example.com kind=geo country_code=ES action=allow --reason "Permitir España"
openwaf-cloud ctl rules add example.com kind=waf_exception rule_id=941100 path_pattern='/wp-admin/*' \
  hosts:='["blog.example.com"]' --reason "Falso positivo del editor"
```

Para límites de peticiones por ruta con más control (claves, periodos, acciones), usa [`ratelimit`](https://developers.openwaf.dev/es/cli/reference/ratelimit/).

## rules rm

```text
rules rm <zona> <id> --reason "…"
```

Quita la regla con ese id (de `rules list`).
