Eventos de seguridad

Ver en Markdown

Consulta los eventos de seguridad de una zona, con filtros, resúmenes, histogramas y un stream en directo (Server-Sent Events).

En esta página

Los eventos de seguridad son las peticiones que el borde bloqueó, desafió o registró (WAF, reglas, límites de peticiones, escudos). Todas las rutas comparten los mismos filtros; cada filtro se puede repetir y filtros distintos se combinan con Y.

OperaciónRuta
Listar eventosGET /v1/orgs/{org}/zones/{zone}/events
Resumir eventosGET /v1/orgs/{org}/zones/{zone}/events/summary
Histograma de eventosGET /v1/orgs/{org}/zones/{zone}/events/histogram
Stream de eventosGET /v1/orgs/{org}/zones/{zone}/events/stream

Listar eventos

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

Lista los eventos de seguridad de la zona, del más reciente al más antiguo. Cada filtro se puede repetir (action=block&action=log admite cualquiera de los valores) con como mucho 20 valores; filtros distintos se combinan con Y, y los filtros not_… excluyen los eventos con cualquiera de sus valores. q busca texto (sin distinguir mayúsculas) en el nombre, la ruta, la IP, el método, la regla, el tipo de ataque, el mensaje, el user agent, el país, el id de regla y el estado. Para paginar, pasa next_cursor en cursor.

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).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 24 h.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
actionconsultastringNoRepetible (cualquiera de los valores, como mucho 20). Uno de block, log, challenge, allow.
rule_idconsultaintegerNoRepetible. De 0 a 4294967295.
ipconsultastringNoIPv4 o IPv6 (se normaliza); repetible.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas); repetible. Patrón ^[A-Za-z]{2}$.
hostconsultastringNoNombre exacto (sin distinguir mayúsculas); repetible. De 1 a 253 caracteres.
pathconsultastringNoRuta exacta (1-2048 bytes); repetible. De 1 a 2048 caracteres.
statusconsultaintegerNoEstado HTTP de la respuesta; repetible. De 100 a 599.
rate_ruleconsultastringNoEventos de esa regla de límite de peticiones (rule_name rate_rule:<id>, attack_type rate_limit); repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
rule_nameconsultastringNorule_name exacto (el código de un bloqueo de egress, p. ej. injection_detected); repetible. De 1 a 200 caracteres.
not_actionconsultastringNoExcluye esas acciones; repetible. Uno de block, log, challenge, allow.
not_rule_idconsultaintegerNoExcluye esas reglas; repetible. De 0 a 4294967295.
not_ipconsultastringNoExcluye esas IP; repetible.
not_countryconsultastringNoExcluye esos países; repetible. Patrón ^[A-Za-z]{2}$.
not_hostconsultastringNoExcluye esos nombres; repetible. De 1 a 253 caracteres.
not_pathconsultastringNoExcluye esas rutas exactas; repetible. De 1 a 2048 caracteres.
not_statusconsultaintegerNoExcluye esos estados HTTP; repetible. De 100 a 599.
not_rate_ruleconsultastringNoExcluye los eventos de esas reglas de límite de peticiones; repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
not_rule_nameconsultastringNoExcluye esos rule_name; repetible. De 1 a 200 caracteres.
qconsultastringNoTexto libre (sin distinguir mayúsculas) en host, ruta, IP, método, rule_name, attack_type, msg, user agent, país, rule_id y status. Como mucho 200 caracteres.
limitconsultaintegerNoNúmero máximo de elementos. Por defecto 100. De 1 a 1000.
cursorconsultastringNonext_cursor de la página anterior.

Respuesta

  • 200: Devuelve un objeto con los campos de abajo.
CampoTipoDescripción
itemsarray de EdgeEvent
next_cursorstring

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/events?action=block&limit=50" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "items": [
    {
      "event_id": "8b3e5f7a-1c2d-4e6f-9a0b-3c5d7e9f1a2b",
      "zone_id": "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
      "node_id": "edge-node",
      "ts": "2026-10-27T09:29:58Z",
      "host": "www.example.com",
      "ip": "203.0.113.10",
      "method": "POST",
      "path": "/login",
      "status": 429,
      "action": "block",
      "rule_id": 0,
      "rule_name": "rate_rule:login",
      "attack_type": "rate_limit",
      "msg": "",
      "country_code": "ES",
      "asn": 64500,
      "user_agent": "Mozilla/5.0",
      "tls_fingerprint": "",
      "received_at": "2026-10-27T09:29:59Z",
      "rate_rule": "login"
    }
  ],
  "next_cursor": ""
}

Resumir eventos

GET /v1/orgs/{org}/zones/{zone}/events/summary

Cuenta los eventos que cumplen los filtros (los mismos que Listar eventos) por acción, con las 10 reglas, los 10 países y las 10 reglas de límite de peticiones con más eventos.

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).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 24 h.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
actionconsultastringNoRepetible (cualquiera de los valores, como mucho 20). Uno de block, log, challenge, allow.
rule_idconsultaintegerNoRepetible. De 0 a 4294967295.
ipconsultastringNoIPv4 o IPv6 (se normaliza); repetible.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas); repetible. Patrón ^[A-Za-z]{2}$.
hostconsultastringNoNombre exacto (sin distinguir mayúsculas); repetible. De 1 a 253 caracteres.
pathconsultastringNoRuta exacta (1-2048 bytes); repetible. De 1 a 2048 caracteres.
statusconsultaintegerNoEstado HTTP de la respuesta; repetible. De 100 a 599.
rate_ruleconsultastringNoEventos de esa regla de límite de peticiones (rule_name rate_rule:<id>, attack_type rate_limit); repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
rule_nameconsultastringNorule_name exacto (el código de un bloqueo de egress, p. ej. injection_detected); repetible. De 1 a 200 caracteres.
not_actionconsultastringNoExcluye esas acciones; repetible. Uno de block, log, challenge, allow.
not_rule_idconsultaintegerNoExcluye esas reglas; repetible. De 0 a 4294967295.
not_ipconsultastringNoExcluye esas IP; repetible.
not_countryconsultastringNoExcluye esos países; repetible. Patrón ^[A-Za-z]{2}$.
not_hostconsultastringNoExcluye esos nombres; repetible. De 1 a 253 caracteres.
not_pathconsultastringNoExcluye esas rutas exactas; repetible. De 1 a 2048 caracteres.
not_statusconsultaintegerNoExcluye esos estados HTTP; repetible. De 100 a 599.
not_rate_ruleconsultastringNoExcluye los eventos de esas reglas de límite de peticiones; repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
not_rule_nameconsultastringNoExcluye esos rule_name; repetible. De 1 a 200 caracteres.
qconsultastringNoTexto libre (sin distinguir mayúsculas) en host, ruta, IP, método, rule_name, attack_type, msg, user agent, país, rule_id y status. Como mucho 200 caracteres.

Respuesta

  • 200: Devuelve un objeto con los campos de abajo.
CampoTipoDescripción
sincestring (date-time)
untilstring (date-time)
totalinteger
by_actionarray de KeyCount
top_rulesarray de object
top_rules[].rule_idintegerId de la regla.
top_rules[].rule_namestringNombre o código de la regla.
top_rules[].countinteger
top_countriesarray de KeyCount
top_rate_rulesarray de KeyCountEventos de reglas de límite de peticiones por id de regla (key).

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/events/summary" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "since": "2026-10-27T09:30:00Z",
  "until": "2026-10-27T09:30:00Z",
  "total": 128,
  "by_action": [
    {
      "key": "/pricing",
      "count": 128
    }
  ],
  "top_rules": [
    {
      "rule_id": 0,
      "rule_name": "example",
      "count": 128
    }
  ],
  "top_countries": [
    {
      "key": "/pricing",
      "count": 128
    }
  ],
  "top_rate_rules": [
    {
      "key": "/pricing",
      "count": 128
    }
  ]
}

Histograma de eventos

GET /v1/orgs/{org}/zones/{zone}/events/histogram

Cuenta los eventos que cumplen los filtros por intervalo de tiempo y acción. Las barras de step segundos se alinean a múltiplos de step desde la época Unix, sin huecos (las vacías cuentan 0); la primera contiene since y la última empieza antes de until.

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).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 24 h.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
stepconsultaintegerNoSegundos por barra (1-86400). Por defecto el menor de 1, 5, 10, 15, 30, 60, 120, 300, 600, 900, 1800, 3600, 10800, 21600, 43200 y 86400 que da como mucho 60 barras; con un step explícito, más de 1000 barras: 400. De 1 a 86400.
actionconsultastringNoRepetible (cualquiera de los valores, como mucho 20). Uno de block, log, challenge, allow.
rule_idconsultaintegerNoRepetible. De 0 a 4294967295.
ipconsultastringNoIPv4 o IPv6 (se normaliza); repetible.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas); repetible. Patrón ^[A-Za-z]{2}$.
hostconsultastringNoNombre exacto (sin distinguir mayúsculas); repetible. De 1 a 253 caracteres.
pathconsultastringNoRuta exacta (1-2048 bytes); repetible. De 1 a 2048 caracteres.
statusconsultaintegerNoEstado HTTP de la respuesta; repetible. De 100 a 599.
rate_ruleconsultastringNoEventos de esa regla de límite de peticiones (rule_name rate_rule:<id>, attack_type rate_limit); repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
rule_nameconsultastringNorule_name exacto (el código de un bloqueo de egress, p. ej. injection_detected); repetible. De 1 a 200 caracteres.
not_actionconsultastringNoExcluye esas acciones; repetible. Uno de block, log, challenge, allow.
not_rule_idconsultaintegerNoExcluye esas reglas; repetible. De 0 a 4294967295.
not_ipconsultastringNoExcluye esas IP; repetible.
not_countryconsultastringNoExcluye esos países; repetible. Patrón ^[A-Za-z]{2}$.
not_hostconsultastringNoExcluye esos nombres; repetible. De 1 a 253 caracteres.
not_pathconsultastringNoExcluye esas rutas exactas; repetible. De 1 a 2048 caracteres.
not_statusconsultaintegerNoExcluye esos estados HTTP; repetible. De 100 a 599.
not_rate_ruleconsultastringNoExcluye los eventos de esas reglas de límite de peticiones; repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
not_rule_nameconsultastringNoExcluye esos rule_name; repetible. De 1 a 200 caracteres.
qconsultastringNoTexto libre (sin distinguir mayúsculas) en host, ruta, IP, método, rule_name, attack_type, msg, user agent, país, rule_id y status. Como mucho 200 caracteres.

Respuesta

CampoTipoDescripción
sincestring (date-time)
untilstring (date-time)
stepintegerSegundos por barra.
totalintegerEventos de [since, until).
bucketsarray de object
buckets[].tsstring (date-time)Inicio de la barra.
buckets[].countinteger
buckets[].blockinteger
buckets[].loginteger
buckets[].challengeinteger
buckets[].allowinteger

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/events/histogram" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "since": "2026-10-27T09:30:00Z",
  "until": "2026-10-27T09:30:00Z",
  "step": 0,
  "total": 128,
  "buckets": [
    {
      "ts": "2026-10-27T09:30:00Z",
      "count": 128,
      "block": 0,
      "log": 0,
      "challenge": 0,
      "allow": 0
    }
  ]
}

Stream de eventos

GET /v1/orgs/{org}/zones/{zone}/events/stream

Emite como Server-Sent Events los eventos de la zona que cumplen los filtros (los mismos que Listar eventos; no se usan since, until ni limit), en el orden en que los recibe OpenWAF. La autenticación, la zona y los filtros se comprueban antes de empezar, así que los errores son respuestas JSON.

El stream empieza tras Last-Event-ID (lo envía EventSource al reconectar) o cursor; sin ellos, 10 segundos antes de la petición. Carga antes GET …/events y descarta los event_id repetidos. Tramas:

  • event: ready primero, con {"poll_ms": 2000, "heartbeat_ms": 15000, "max_age_s": 600}.
  • event: event por cada evento, con su cursor en id y el evento en data (como en Listar eventos).
  • event: ping tras heartbeat_ms sin tráfico, para detectar conexiones colgadas.
  • event: bye tras max_age_s, y el stream se cierra; EventSource reconecta con Last-Event-ID sin perder eventos.
  • event: error con {"code": "unavailable"} si falla el almacén de eventos, y el stream se cierra.

Un evento recibido más de una hora después de producirse no aparece en el stream (sí en Listar eventos). Como mucho 10 streams por organización.

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).
Last-Event-IDcabecerastringNoid del último evento recibido de un stream (lo envía EventSource al reconectar); tiene prioridad sobre cursor.
cursorconsultastringNoid de un evento de un stream anterior: se empieza justo después.
actionconsultastringNoRepetible (cualquiera de los valores, como mucho 20). Uno de block, log, challenge, allow.
rule_idconsultaintegerNoRepetible. De 0 a 4294967295.
ipconsultastringNoIPv4 o IPv6 (se normaliza); repetible.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas); repetible. Patrón ^[A-Za-z]{2}$.
hostconsultastringNoNombre exacto (sin distinguir mayúsculas); repetible. De 1 a 253 caracteres.
pathconsultastringNoRuta exacta (1-2048 bytes); repetible. De 1 a 2048 caracteres.
statusconsultaintegerNoEstado HTTP de la respuesta; repetible. De 100 a 599.
rate_ruleconsultastringNoEventos de esa regla de límite de peticiones (rule_name rate_rule:<id>, attack_type rate_limit); repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
rule_nameconsultastringNorule_name exacto (el código de un bloqueo de egress, p. ej. injection_detected); repetible. De 1 a 200 caracteres.
not_actionconsultastringNoExcluye esas acciones; repetible. Uno de block, log, challenge, allow.
not_rule_idconsultaintegerNoExcluye esas reglas; repetible. De 0 a 4294967295.
not_ipconsultastringNoExcluye esas IP; repetible.
not_countryconsultastringNoExcluye esos países; repetible. Patrón ^[A-Za-z]{2}$.
not_hostconsultastringNoExcluye esos nombres; repetible. De 1 a 253 caracteres.
not_pathconsultastringNoExcluye esas rutas exactas; repetible. De 1 a 2048 caracteres.
not_statusconsultaintegerNoExcluye esos estados HTTP; repetible. De 100 a 599.
not_rate_ruleconsultastringNoExcluye los eventos de esas reglas de límite de peticiones; repetible. Patrón ^[a-z0-9][a-z0-9-]{0,39}$.
not_rule_nameconsultastringNoExcluye esos rule_name; repetible. De 1 a 200 caracteres.
qconsultastringNoTexto libre (sin distinguir mayúsculas) en host, ruta, IP, método, rule_name, attack_type, msg, user agent, país, rule_id y status. Como mucho 200 caracteres.

Respuesta

  • 200: Stream de Server-Sent Events (tramas descritas arriba). Cuerpo de tipo text/event-stream.

Errores

EstadoDescripción
400Petición mal formada (bad_request).
401Token ausente, no válido o caducado (unauthorized).
404No existe o el token no lo ve (not_found).
429too_many_streams: demasiados streams abiertos en la organización; Retry-After en segundos.
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

No está en los SDK: abre el stream con EventSource o con cualquier cliente de Server-Sent Events.

curl -N "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/events/stream?action=block" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
retry: 3000
event: ready
data: {"poll_ms":2000,"heartbeat_ms":15000,"max_age_s":600}

id: c2V0MTcz…
event: event
data: {"event_id":"…","action":"block","host":"www.example.com","path":"/wp-login.php","client_ip":"203.0.113.10"}

Última actualización:

↑↓ para moverte↵ para abriresc para cerrar