Rendimiento de nivel operador, del driver de la tarjeta al panel
Un motor en Rust sin garbage collector, filtros eBPF/XDP que corren en el driver de la NIC y una base de datos columnar hecha para miles de millones de flows. Todo queda instalado en su propio servidor, sin depender de una nube de terceros para detectar ni para mitigar.
- pruebas automatizadas en el core
- 1.198
- vectores de ataque decodificados
- 50
- tablas analíticas en ClickHouse
- 125
- materialized views
- 20
- reflectores bloqueados en XDP
- 13
- endpoints en la API REST v1
- 46
Cómo circulan los datos
La telemetría entra por la izquierda, el motor decide cada 10 s y la respuesta vuelve al borde por BGP o pasa por el scrubber. Todo queda registrado en ClickHouse: flows, ataques, decisiones y auditoría.
Deslice hacia el lado para ver el diagrama completo.
- Routers de bordeJuniper, Huawei, MikroTik, Cisco y cualquier equipo que exporte flow.
- ColectorNetFlow, IPFIX y sFlow en
UDP 2055/6343, BMP enTCP 11019, SNMP y captura de paquetes. - EnriquecimientoASN, GeoIP, rDNS, sonda TLS, DNS pasivo, decodificador de túneles y mapa puerto → proveedor.
- Motor de análisisCiclo de 10 s, configurable hasta 1 s: decoders, umbrales, baseline, burst, carpet bomb, spoofing, RPKI/IRR y threat intel.
- DecisiónCascada determinista con bloqueo de CGNAT y techo del 80 % de la capacidad medida del scrubber.
- AcciónGoBGP o ExaBGP anuncian a los routers; el scrubber XDP/nftables limpia; el proveedor de mitigación recibe lo que no cabe.
- Panel e integracionesInterfaz web, API REST v1, correo, Telegram, webhook, Syslog y SNMP Trap.
Elegido para no atascarse en medio de un ataque
Cada pieza hace una sola cosa y está donde más rinde. Ninguna depende de un servicio externo para funcionar.
Rust + TokioEl motor
Recolección, análisis, decisión y mitigación en un binario asíncrono, sin garbage collector y sin pausas en medio de un ataque. El build de release usa LTO y jemalloc, y está protegido contra ingeniería inversa.
eBPF/XDP con ayaEl plano de datos
Filtro y scrubber corren en el driver de la tarjeta, antes de la pila de red de Linux. Un destino que no está en mitigación pasa con una sola búsqueda en un hash.
ClickHouseFlows e historial
Base de datos columnar para miles de millones de flows, con consultas en milisegundos y compresión cercana a 10:1. También guarda la cola de mitigación, las decisiones y la auditoría.
MariaDB / MySQLUsuarios y configuración
Usuarios y roles, dashboards, Managed Objects, claves de API e informes programados.
RedisEstado en caliente
Baselines estadísticas y alertas en tiempo real. Después de un reinicio, el motor restaura las baselines desde Redis en lugar de volver a aprender la red desde cero.
GoBGP v3 / ExaBGPSesiones BGP
GoBGP por gRPC nativo, o ExaBGP. La configuración generada por la interfaz muestra el diff antes de aplicarse y admite rollback.
Next.js 16 + React 19Interfaz
Más de 60 pantallas en portugués de Brasil, tema claro y oscuro, terminal SSH en el navegador, dashboards que se reorganizan arrastrando y Swagger UI integrado.
Separe a quien decide del equipo que recibe el ataque
El mismo paquete de instalación funciona en tres roles, elegidos con una línea en config.toml. Los nodos se comunican por la cola de mitigación en ClickHouse, sin protocolo propietario.
| Función | All-in-oneel predeterminado | Analyzerfuera del camino del tráfico | Scrubberen el camino del tráfico desviado |
|---|---|---|---|
| Recibe flows y detecta | Sí | Sí | No, el colector escucha solo en loopback |
| Decide y anuncia por BGP | Sí | Sí | No |
| Filtra con XDP y nftables | Sí | Nunca toca el filtro local | Sí, leyendo la cola de mitigación |
| Interfaz web y API | Sí | Sí | No, arranca liviano |
| Cuándo usarlo | Red única, un servidor para todo | Separar la inteligencia del equipo que recibe el ataque | Appliance de limpieza dedicado, con cuota de nodos en la licencia |
Monitor de salud: el desvío nunca se convierte en agujero negro
El analyzer consulta el /health del scrubber cada 10 s. Tras 3 fallas seguidas, los desvíos activos se retiran y no se anuncia ninguno nuevo. Con la primera respuesta correcta, todo vuelve. El scrubber responde 503 si el filtro no cargó o si el nodo está fuera de la cuota de la licencia.
- responde
- responde
- 1.ª falla
- 2.ª falla
- 3.ª falla
- desvíos retirados
- vuelve a desviar
Filtrado en el driver de la tarjeta
El programa XDP de EdgeWarden corre antes de la pila de red de Linux. Con el mapa vacío, la máquina se comporta como si el filtro no existiera, así que se puede instalar sin riesgo. Cualquier falla deja pasar el paquete, nunca lo descarta. Función del plan Enterprise.
Sanidad L3/L4
Descarta direcciones martian, fragmentos y combinaciones de flags imposibles.
Amplificación
Bloquea 13 reflectores conocidos por puerto de origen y tamaño mínimo de paquete.
13 reflectoresRate limit por origen
Token bucket por dirección de origen, para botnets y reflectores con IP real.
hasta 65.536 orígenesProtección SYN Nuevo
Descarta el primer SYN y deja pasar a quien retransmite, sin convertir el scrubber en reflector como haría un SYN cookie.
Límite por destino
Techo de tráfico por víctima, ajustable por cliente en el Managed Object.
hasta 16.384 víctimasFirmas de contenido Nuevo
Firmas UDP de 4 u 8 bytes más puerto, registradas por el operador, con contador por firma.
hasta 1.024 firmasLos 13 reflectores bloqueados en el driver
Puerto de origen UDP. QUIC en UDP/443 queda fuera a propósito: lo tratan el detector QUIC y FlowSpec.
- QOTD17
- chargen19
- DNS53
- portmap111
- NTP123
- NetBIOS137
- SNMP161
- CLDAP389
- RIPv1520
- SSDP1900
- WS-Discovery3702
- mDNS5353
- memcached11211
Modo observación. Con una heurística desactivada, el filtro cuenta lo que descartaría sin descartar nada, y el panel Plano de datos (Plano de dados) muestra los aciertos por heurística cada minuto. El carpet bomb en IPv4 e IPv6 se trata por prefijo, buscando a la víctima en una trie LPM.
Centro de limpieza 100G de referencia
La implementación de referencia usa un Dell PowerEdge R760 con dos tarjetas NVIDIA/Mellanox ConnectX-6 Dx (4 puertos de 100G), Debian 13 y kernel 6.12 LTS. Cada router recibe un puerto de 100G, o 200G con LACP usando un puerto de cada tarjeta, lo que mantiene el servicio aunque falle una tarjeta completa.
- Arquitectura 100G/200G por router, con capacidad validada en cada implementación
- Descarte de decenas de Mpps por puerto con NIC de XDP nativo
- Camino sin bucles por diseño: desvío
/32o/128con community yNO_EXPORT; el tráfico limpio vuelve por una tabla que nunca contiene el desvío - Driver
mlx5estándar del kernel, sin instalar paquetes del fabricante - NIC recomendadas: Mellanox ConnectX-5/6 e Intel E810 en la gama alta; X710, X520/X540 y ConnectX-4 en costo-beneficio
Dos modos de implementación
| Ítem | Modo A: todo en el R760 | Modo B: analyzer separado recomendado |
|---|---|---|
| En el R760 | Colector, ClickHouse, MariaDB, interfaz, GoBGP y XDP | Solo el core con XDP |
| BGP con el borde | El propio R760 | El analyzer |
| Monitor de salud | No hace falta | Obligatorio |
Bordes con plantilla de camino limpio
Un puerto por router, tráfico sucio y limpio en el mismo cable; un filtro de entrada envía el limpio a la routing-instance CLEAN. IPv4 e IPv6.
Plantilla VRP8 escrita a partir de la documentación oficial, con un puerto sucio y uno limpio. Aún necesita validación en laboratorio.
Capacidad medida, no prometida. La capacidad de reenvío limpio se mide en cada implementación y queda registrada en el sistema. EdgeWarden solo desvía hasta el 80 % del valor medido; por encima de eso, la decisión pasa a scrubbing externo, luego a FlowSpec sobre el vector y, en último caso, a RTBH.
Protocolos abiertos, fabricantes reales
Cualquier router que exporte flow y hable BGP FlowSpec o RTBH queda cubierto por las funciones estándar. Las funciones específicas de cada fabricante se listan abajo, sin exagerar.
Recolección y telemetría
- NetFlow v5
- NetFlow v9RFC 3954
- IPFIXRFC 7011
- sFlow v5
- SNMP v1/v2c/v3
- BMPRFC 7854
- libpcap · AF_PACKET v3
- AF_XDP · DPDKpróximamente
Mitigación
- BGP FlowSpecRFC 5575/8955
- RTBH
- GoBGPgRPC
- ExaBGP
- eBPF/XDP
- nftables
Validación de rutas
- RPKI/RTR
- IRRRIPE · RADb
Túneles decodificados
- VxLAN
- GENEVE
- GRE
- L2TP
- IP-in-IP
- MPLS-in-UDP
| Fabricante | Flow y BGP estándar | Funciones específicas |
|---|---|---|
| JuniperJunOS, MX | Sí | FlowSpec y RTBH en producción, plantillas de scrubbing IPv4/IPv6, contadores de firewall (JUNIPER-FIREWALL-MIB), hardening de filtros estáticos, PBR vía prefix-list, terminal SSH |
| HuaweiVRP8, NE40E/NE8000 | Sí | PBR vía ACL y terminal SSH. Plantilla de scrubbing escrita, a la espera de validación en laboratorio |
| MikroTikRouterOS | Sí | PBR vía address-list y terminal SSH |
| CiscoIOS, IOS-XR | Sí | Terminal SSH en el navegador. Sin PBR automático |
| Nokia, Arista y otros | Sí | Sin integración específica: funcionan por NetFlow/IPFIX/sFlow y BGP FlowSpec/RTBH |
Intégrelo a su NOC, Zabbix, SIEM o portal
API REST v1 documentada en OpenAPI/Swagger: 46 endpoints, claves con alcance, restricción por IP y por cliente, límite de tasa y webhooks.
- Swagger UI integrado en
/api-docs, que funciona incluso en un appliance sin internet - La clave se muestra una sola vez; el servidor guarda solo el hash SHA-256
- Alcances para tráfico, flows, ataques, violaciones, mitigaciones, Managed Objects, informes y sistema
- Aplique FlowSpec, RTBH, desvío o scrubbing externo con un
POST, con los mismos bloqueos de seguridad de la interfaz - Límite predeterminado de 120 solicitudes por minuto por clave, con respuesta
429yRetry-After - Health check listo para Zabbix en
/api/v1/system/health
# clave de ejemplo: cree la suya en Configurações → Chaves de API (Configuración → Claves de API) export EW=https://edgewarden.example.net export FSK=fsk_a1b2c3d4e5f60718_SU_SECRETO curl -s -H "Authorization: Bearer $FSK" \ "$EW/api/v1/attacks?status=active&hours=1" { "data": [{ "target_ip": "203.0.113.9", "attack_type": "udp_flood", "severity": "high", "status": "active", "bytes_per_sec": 3750000000, "source_count": 18422, "zone_group": "AS65000-CLIENTES", "zone_cidr": "203.0.113.0/24" }], "pagination": { "page": 1, "total": 1 } }
La respuesta de arriba está abreviada. Las mitigaciones solicitadas por la API entran como pending y el core las aplica en el ciclo siguiente, en unos 10 s.
La alerta llega sin que nadie pregunte
Cada Managed Object puede tener sus propios canales. Use la API para enriquecer el evento, no para enterarse del ataque.
- Syslog y SIEMEventos en
CEF,JSONoRFC 5424, por UDP o TCP. - SNMP Trap v2cPara Zabbix, PRTG, LibreNMS y SolarWinds, con una codificación que aguanta ráfagas.
- TelegramObjetivo, vector y acción tomada, directo al grupo del NOC.
- CorreoPor su propio SMTP, con informes programados y boletines del Analista de Ataques.
- WebhookEvento
attack_detecteden JSON para su sistema. - Slack y TeamsMediante el webhook de entrada del canal.
Su red no se detiene porque se cayó un servidor de licencias
Licenciamiento
- Licencia firmada con Ed25519 y verificada sin conexión
- Heartbeat cada 24 h y 30 días de gracia sin contacto con el servidor
- Identificación de hardware que resiste bond, LACP y VLAN
- El binario es el mismo en todos los planes; la licencia habilita las funciones y la cuota de routers y de nodos de limpieza
El propio servidor
- Los servicios corren como
www-data, sin sudo, solo con las capabilities necesarias:CAP_NET_RAWCAP_NET_BIND_SERVICECAP_BPFCAP_NET_ADMIN - Credenciales de router cifradas con AES-256-GCM; el SSH hacia el borde está hecho en Rust puro
- Secreto de sesión único generado en cada instalación
- Firewall del propio servidor en nftables, editable desde la interfaz
- Actualización verificada con
sha256sum, que preserva configuración y logs, con rollback
Dimensionamiento recomendado
Elija el tier según el volumen de flows de su red. La guía de instalación trae los comandos de cada etapa, del sysctl al HTTPS.
| Recurso | SmallISP regional | Medium recomendadoISP / DC mediano | EnterpriseTier-1 / DC grande |
|---|---|---|---|
| Volumen | Hasta 20K flows/s, redes de hasta ~5 Gbps | Hasta 50K flows/s, redes de hasta ~20 Gbps | 100K+ flows/s, redes de 40 Gbps+ |
| CPU | 8 núcleos (Xeon / EPYC) | 16 núcleos (Xeon Scalable / EPYC) | 32+ núcleos (EPYC / Xeon Platinum) |
| RAM | 32 GB DDR4 | 64 GB DDR4 ECC | 128+ GB DDR4/DDR5 ECC |
| Disco | 500 GB NVMe SSD | 2 TB NVMe SSD | 4+ TB NVMe (RAID 10) |
| Red | 1 Gbps | 10 Gbps | 25 / 40 / 100 Gbps |
| Sistema | Debian 13+ (Trixie) | Debian 13+ (Trixie) | Debian 13+ (Trixie) |
- eBPF/XDP: Debian 13 ya trae kernel 6.x; use una NIC con XDP nativo (se recomiendan Mellanox o Intel).
- ClickHouse: a partir del tier Medium, sepárelo en un servidor dedicado.
- Retención: dimensione el disco según el período de retención deseado (compresión de cerca de 10:1).
- Alta disponibilidad: en Enterprise, se recomienda un clúster de 2 o más nodos.
Arquitectura revisada. ¿La probamos en su red?
Le mostramos EdgeWarden funcionando con los flows de sus routers, y usted recibe una licencia demo con todas las funciones Enterprise por 7 días. La demostración y el soporte son en portugués.