# zones

> Todas las órdenes openwaf-cloud ctl zones: listar, consultar, dar de alta, ajustes de borde, delegación, historial, diferencias, vuelta atrás, propagación, fusión y borrado.

`<zona>` es el dominio o el id de la zona. Las consultas admiten `--json`; los cambios reciben `--reason`, `--dry-run` y `--yes` ([opciones globales](https://developers.openwaf.dev/es/cli/reference/options/)).

## Consultar

### zones list

```text
zones list [--merged]
```

Las zonas de la organización con su estado, su modo DNS y su versión actual. Un token de zona o de cliente solo ve las suyas.

| Opción | Significado |
|---|---|
| `--merged` | Incluir las zonas fusionadas en otra (ocultas por defecto). |

### zones show

```text
zones show <zona>
```

La zona, su versión actual y sus ajustes de borde. En una zona externa enseña además el registro TXT de propiedad que hay que publicar, el destino CNAME (`edge.openwaf.dev`) y las direcciones del borde para los registros de la raíz.

### zones hosts

```text
zones hosts <zona>
```

Solo zonas externas: si cada nombre con proxy apunta ya a OpenWAF en el DNS público (por CNAME o A/AAAA). Las respuestas se guardan en caché un minuto aproximadamente.

### zones check

```text
zones check <zona>
```

Comprueba ahora la delegación de una zona delegada (sus servidores de nombres en el registrador), o el registro TXT de propiedad de una externa, y activa la zona cuando queda verificada. Imprime el resultado y lo que respondió cada resolvedor público. Requiere el rol Técnico; no lleva motivo porque no cambia la configuración.

### zones effective

```text
zones effective <zona> <nombre>
```

La configuración que recibe un nombre en el borde: los ajustes de la zona combinados con los propios del nombre, su origen, las reglas que le aplican, sus límites de peticiones y sus redirecciones.

### zones history

```text
zones history <zona> [<versión>] [--limit N] [--before V]
```

Sin `<versión>`: las versiones de la zona, de la más reciente a la más antigua, con fecha, autor, acción y motivo (una vuelta atrás indica `[revierte a N]`). Con `<versión>`: los datos de esa versión y su instantánea completa. Funciona con el id de una zona borrada. Ver [Ver el historial](https://developers.openwaf.dev/es/change-control/view-history/).

| Opción | Significado |
|---|---|
| `--limit N` | Como mucho N versiones (50 por defecto en la API, máximo 500). |
| `--before V` | Solo las versiones anteriores a V. |

### zones diff

```text
zones diff <zona> <desde> [<hasta>]
```

Qué cambió de la versión `<desde>` a `<hasta>` (por defecto, la actual), una línea por cambio.

### zones propagation

```text
zones propagation <zona>
```

La versión deseada y, para cada nodo de borde que sirve la zona, su estado, la versión aplicada, desde cuándo está pendiente, el retraso y la última consulta. Ver [Propagación al borde](https://developers.openwaf.dev/es/change-control/propagation/).

## Cambiar

### zones add

```text
zones add <nombre> [--mode delegated|external] --reason "…"
```

Da de alta una zona (versión 1).

| Opción | Significado |
|---|---|
| `--mode delegated` | Por defecto. OpenWAF sirve el DNS de la zona en cuanto la delegas en los servidores de nombres que indica `zones show`. |
| `--mode external` | Tu DNS se queda donde está. La zona se activa al publicar su registro TXT de propiedad (ver `zones show`) y tú apuntas cada nombre con proxy al borde. |

### zones set

```text
zones set <zona> clave=valor … --reason "…" [--wait]
zones set <zona> --host <nombre> clave=valor … [--unset <clave>]… --reason "…" [--wait]
```

Cambia los ajustes de borde de la zona con [argumentos `clave=valor`](https://developers.openwaf.dev/es/cli/output-and-exit-codes/#key-value). Con `--host` cambia los ajustes propios de un nombre de la zona, que sustituyen a los de la zona para ese nombre.

| Opción | Significado |
|---|---|
| `--host <nombre>` | Cambiar los ajustes de este nombre (completo) en lugar de los de la zona. |
| `--unset <clave>` | Con `--host`: el nombre deja de tener esta clave propia y vuelve a heredarla de la zona. Repetible. |
| `--wait[=120s]` | Esperar a la propagación. |

Algunos ejemplos, por área:

| Área | Ejemplo |
|---|---|
| WAF | `waf_level=high`, `mode=active` |
| HSTS | `hsts.max_age=31536000` |
| Origen | `origin.port=8443` (con `--host`), `origin.tls_verify=full_strict`, `origin.server_name=origin.example.com`, `origin.client_cert:=true` |
| Caché | `cache.enabled:=true`, `cache.query.mode=ignore`, `cache.rules:='[…]'` |
| 103 Early Hints | `early_hints.enabled:=true`, `early_hints.mode=html_head`, `early_hints.extra_origins:='["https://cdn.example.com"]'` |
| Medición de usuarios reales | `rum.enabled=true`, `rum.sample_rate=0.25`, `rum.exclude_paths=/admin,/wp-login.php` |
| Agentes de IA | `ai_agents.enabled=true`, `ai_agents.mode=log` o `enforce`, `ai_agents.template=search_ok_block_training`, `verified_only` o `block_unverified_automation`, `ai_agents.policy.ai_training=block`, `ai_agents.bot_overrides=gptbot:block,ccbot:allow`, `ai_agents.trap.enabled=true`, `ai_agents.endpoints:='[…]'` |
| Redirecciones | `redirects:='[…]'` (sustituye la lista entera) |
| Límites de peticiones | `rate_rules:='[…]'` (sustituye la lista entera; [`ratelimit`](https://developers.openwaf.dev/es/cli/reference/ratelimit/) cambia una regla cada vez) |

Con `--host`, los `early_hints`, `ai_agents` y `rate_rules` de un nombre sustituyen enteros a los de la zona. La lista completa de ajustes y sus valores está en la [referencia de la API](https://developers.openwaf.dev/es/api/).

```sh
openwaf-cloud ctl zones set example.com waf_level=high --reason "Subir el nivel del WAF" --wait
openwaf-cloud ctl zones set example.com --host api.example.com origin.port=8443 --reason "Puerto del origen de la API"
openwaf-cloud ctl zones set example.com --host api.example.com --unset origin.port --reason "Volver al puerto de la zona"
```

### zones revert

```text
zones revert <zona> <versión> --reason "…" [--allow-missing-certs] [--wait]
```

Restaura la configuración de `<versión>` como una versión nueva. Ver [Volver a una versión anterior](https://developers.openwaf.dev/es/change-control/revert-a-zone/).

| Opción | Significado |
|---|---|
| `--allow-missing-certs` | Aplicar aunque algún sitio se quede sin certificado válido. |
| `--wait[=120s]` | Esperar a la propagación. |

### zones set-client

```text
zones set-client <zona> <cliente|-> --reason "…" [--wait]
```

Asigna la zona a un cliente final (por nombre o id) o, con `-`, le quita el cliente. Requiere una credencial de toda la organización.

### zones merge

```text
zones merge <hija> --into <padre> --reason "…"
```

Fusiona una zona en otra: los nombres, registros y ajustes de la hija pasan a la padre. La simulación enseña, nombre por nombre, que la configuración servida sigue siendo equivalente, y la fusión solo se aplica si lo es. La hija queda en solo lectura y se conserva 14 días para poder deshacer la fusión. Requiere un administrador de la organización.

### zones unmerge

```text
zones unmerge <hija> --reason "…"
```

Deshace una fusión mientras la padre no haya cambiado desde entonces: las dos zonas vuelven a sus versiones de antes de la fusión. Requiere un administrador de la organización.

### zones rm

```text
zones rm <zona> --reason "…"
```

Borra la zona con sus registros, ajustes y reglas; OpenWAF deja de servir su DNS y sus sitios. Su historial se conserva y termina con una versión `zone.delete`.
