Protección y filtrado de paquetes DDoS
1) Por qué es necesario
DDoS es una «degradación masiva» de recursos: bandas/pps, tablas de estado, CPU de núcleo/IRQ, agrupaciones de conexiones, límites de aplicaciones. El objetivo es relajar la protección: extinguir el volumen en el perímetro de la red, neutralizar las anomalías protocolarias a la pila TCP/IP, y en la L7 cortar las solicitudes no deseadas, manteniendo el SLO para usuarios legítimos.
2) Clases de ataque
2. 1 L3/L4 (volumetric/protocol)
Volumetric: UDP flood, UDP-reflection/amplification (DNS/CLDAP/NTP/SSDP/memcached/mDNS), GRE flood.
Protocol/state exhaustion: SYN flood, ACK/RST flood, TCP connection-exhaustion, ICMP flood, TCP fragmentation.
Características QUIC/UDP: falsas tormentas Initial/Retry, spoofed source.
2. 2 L7 (application)
HTTP/1. 1: consultas para rutas costosas, header oversize/field smuggling.
HTTP/2: Rapid Reset, stream-flood, HEADERS flood, PRIORITY abuse.
HTTP/3 (QUIC): conexiones/hilos sin completar, flood inicial.
Slow-атаки: slowloris/slow-read/slow-POST.
gRPC/WebSocket: interminables streams, message-flood, grandes marcos.
3) Arquitectura de protección básica
1. Anycast + Scrubbing
Pulverizar el tráfico globalmente y correr a través de los centros de scrubbing proveedores (corte volumétrico/spoofing en el borde).
2. Multi-CDN / Multi-Edge
Variedad de dominios (web, API, estática), agregación de protección y caché para carga de lectura.
3. Filtros de bajo nivel en su perímetro
ACL en enrutadores de border (RFC1918, bogon, puertos notoriamente falsos).
eBPF/XDP para early-drop en firmas y límites de rate a conntrack.
4. L7-perímetro (NGINX/Envoy/WAF)
Comprimir RPS por clave, desafío (captcha/PoW), caché, priorizar rutas «caras».
5. Sostenibilidad interna
Grupos de conexiones, colas, circuitos/timeout, aislamiento de servicios (bulkhead) y autoscaling con «tapones» (shedder).
4) «Válvulas de red»: qué incluir directamente
4. 1 Linux sysctl (núcleo/pila)
bash
TCP SYN flood sysctl -w net. ipv4. tcp_syncookies=1 sysctl -w net. ipv4. tcp_max_syn_backlog=4096 sysctl -w net. ipv4. tcp_synack_retries=3
Conntrack/sysctl -w net tables. netfilter. nf_conntrack_max=262144 sysctl -w net. netfilter. nf_conntrack_tcp_timeout_established=300
ICMP/redirect sysctl -w net. ipv4. icmp_echo_ignore_broadcasts=1 sysctl -w net. ipv4. conf. all. accept_redirects=0 sysctl -w net. ipv4. conf. all. send_redirects=0
sysctl -w net socket resources. core. somaxconn=4096 sysctl -w net. core. netdev_max_backlog=250000 sysctl -w net. core. rmem_max=134217728 sysctl -w net. core. wmem_max=134217728
4. 2 nftables: filtros básicos y ratelimit en paquetes
nft table inet filter {
sets {
bogon { type ipv4_addr; flags interval; elements = { 0. 0. 0. 0/8, 10. 0. 0. 0/8, 100. 64. 0. 0/10,
127. 0. 0. 0/8, 169. 254. 0. 0/16, 172. 16. 0. 0/12, 192. 0. 2. 0/24, 192. 168. 0. 0/16, 198. 18. 0. 0/15, 224. 0. 0. 0/4 } }
}
chains {
input {
type filter hook input priority 0; policy drop;
ip saddr @bogon drop ct state established,related accept
UDP amplification ports - limit pps udp dport {53,123,1900,11211,389,1900,5353} limit rate over 2000/second drop
SYN rate-limit tcp flags syn tcp dport {80,443} limit rate over 2000/second drop
ICMP flood ip protocol icmp limit rate 100/second accept
}
}
}
4. 3 XDP/eBPF (idea)
Paquetes Early-drop con origen spoofed (uRPF en el router es bienvenido).
hash baquetas pps per/32 y per/24; «cuarentena» dinámica de fuentes.
Firmas de reflexión UDP: DNS response-like a la entrada (filtrar fuera de contexto).
5) amplificación UDP: inventario y bloques
Reflectores/amplificadores frecuentes: DNS (resolvers abiertos), NTP (monlist), CLDAP, SSDP, mDNS, Memcached (UDP), Chargen.
Medidas:- Cerrar/restringir servicios UDP, minimizar los puertos abiertos.
- En el perímetro, limite el pps/bitrate para puertos conocidos.
- Recomendación DNS: Recursiva sólo para sus redes, RRL (Responder Rate Limiting), minimización de ANY.
- El NTP es solo un «bootstrap» a los de confianza, un 'noquery' para los públicos.
6) TCP state exhaustion
SYN flood: 'tcp _ syncookies = 1', elevado 'tcp _ max _ syn _ backlog', 'synack _ retries = 3', drop por pps.
ACK/RST flood: límites de bajo nivel, abandono de secuencias ilegítimas (nftables/ebpf).
Conntrack-less en el border: no gastar tablas de estado donde el filtro es posible por la firma sin estado.
7) Ataques HTTP/2/3 e «inteligentes» L7
HTTP/2 Rapid Reset: límite de frecuencia de marcos RST y número de subprocesos abiertos; cerrar la conexión en caso de anomalías.
Stream abuse: лимит concurrent streams, headers size, max frame size.
QUIC/HTTP/3: restringir los pps iniciales, habilitar Retry; tiempos cortos handshake.
NGINX (fragmento L7)
nginx
Header/body constraint client_max_body_size 1m;
large_client_header_buffers 4 8k;
HTTP/2 limits http2_max_concurrent_streams 128;
http2_recv_buffer_size 256k;
Rate limit by IP (example)
limit_req_zone $binary_remote_addr zone=reqs:20m rate=100r/s;
limit_req zone=reqs burst=200 nodelay;
Envoy (anti-reset y límites)
yaml http2_protocol_options:
max_concurrent_streams: 128 initial_stream_window_size: 65536 max_outbound_frames: 10000 stream_error_on_invalid_http_messaging: true
8) Ataques de slow y protección de recursos
Slowloris/slow-read/slow-POST: habilitar 'proxy _ request _ bufering on', idle-timeout bajo, mínimo aceptable 'read _ rate'.
Detenga las conexiones a intervalos largos entre paquetes por solicitud.
En la aplicación: lectura/eliminación temprana del cuerpo, límites de tamaño/profundidad JSON.
9) Filtración L7: quién es más importante - deje pasar
Clasificación de tráfico: known good (socios mTLS/JWT), usuarios registrados, anónimos.
Prioridades: rutas de escritura «caras» (depósitos/retiros) - proteger, pero saltarse las confirmadas; directorios de lectura - caché + throttle.
Challenge-capa: captcha/PoW/JS-challenge para zonas grises en pico.
10) Caché, calzado y degradación
Caché edge para respuestas estáticas/cuasiestáticas, 'stale-while-revalidate'.
Request coalescing: capturar solicitudes paralelas a una sola clave - en el proxy y en la aplicación.
Degrade-modo: desactivar los fichajes secundarios (personalización, informes pesados), emitir páginas «ligeras».
11) Observabilidad y telemetría
Métricas (per RR/nodo/clúster):- L3/L4: `pps_in/out`, `bps_in/out`, `drop_pps{reason}`, `syn_recv`, `conntrack_used/limit`, `xdp_drop_pps`.
- L7: `requests_total{route}`, `429_total`, `challenge_total{type}`, `h2_rst_rate`, `slow_req_total`.
- Dependencias: CPU IRQ soft/hard, NIC queue drops, run-queue length.
Logs: sampleados, agregados por/24, ASN, puertos y firmas; sin PII.
Trekking: incluir en las listas blancas, expandir accidentalmente sampling para depurar.
12) Planes de respuesta (runbook)
1. Detect: activación de los umbrales de pps/bps/429/h2_rst_rate.
2. Clasificación: nivel (L3/4/7), protocolo (UDP/TCP/h2/h3), geo/ASN.
- habilitar perfiles de scrubbing/blackhole en el proveedor,
- reforzar nftables/ebpf límites,
- reducir los límites L7 y aumentar los retos,
- habilitar Retry para QUIC (Flood inicial).
- 4. Comunicaciones: página de estado, plantillas de notificación a los socios.
- 5. Forenzika: captura de PCAP durante 60-120 segundos, muestra de talkers principales ASNs/ports.
- 6. Retrospectiva: actualizar firmas, umbrales, listas de reflectores.
13) Pruebas y ejercicios
Los playbooks de DDoS-drill son trimestrales: bursts sintéticos UDP/HTTP, tráfico slow, HTTP/2 reset.
Día de juego: conmutación Anycast/migración entre CDN, degradación a «modo fácil».
Verificación del proveedor: SLA scrubbing, tiempo de encendido/apagado de los filtros, max pps/bps.
14) Antipattern
Confiar sólo en el L7-WAF en un ataque volumétrico.
La ausencia de uRPF/ACL en el border y el filtrado «de frente» de conntrack-heavy.
Encabezados/cuerpos ilimitados y largo keep-alive en el pico.
Región única/RR sin Anycast/multi-edge.
No hay existencias de NIC/IRQ/CPU y monitoreo de colas.
Sin caché/coalesing - RPS extra en el backend.
15) Especificidad de iGaming/finanzas
Picos de tiempo (partidos/derbi/sorteos de lotería): amplía la capacidad POP de antemano, habilita un caché de coeficientes agresivo, pon retos canarios para los anónimos.
Rutas de pago/salida: grupo edge independiente con mTLS, tiempos cortos, límites de competencia; No hay 0-RTT.
Políticas geográficas: allow-laists regionales, filtrado ASN de «hostings», conmutación geo rápida.
Intersección con antifraude: los límites de velocidad y la API de riesgo pasan a un perfil «duro» en un incidente DDoS.
16) Lista de comprobación prod
- Anycast или multi-edge/CDN; canales de scrubbing verificados.
- Border-ACL/uRPF; nftables/ebpf/perfiles XDP, conntrack-less filtración.
- Ajuste Sysctl TCP/SYN, pps de límite para puertos amplificadores UDP.
- HTTP/2/3 límites (streams, frames, headers), slow-protection, body/header-limits.
- L7-limites y desafío; caché y calzado en el perímetro.
- Dashboards pps/bps/conntrack/IRQ + L7 RED; alertas a las anomalías h2_rst/429.
- Runbook/playbooks, contactos de proveedores, activación de perfiles de un solo clic.
- Enseñanzas: Burst, slow, HTTP/2 reset; informe y confirmación de mejoras.
- Agrupaciones separadas para rutas de pago/críticas, mTLS y límites estrictos.
17) TL; DR
Relajar la protección: Anycast + scrubbing extingue el volumen, eBPF/XDP + nftables cortan la basura a la pila, L7-limites/challenge/caché guardan SLA. Afine las cookies TCP (SYN, backklog), limite los amplificadores UDP, coloque los límites de protección HTTP/2/3 y slow. Tenga un runbook y entrenarlo; para iGaming: amplíe el edge de antemano en horas de pico y separe las rutas de pago con mTLS y límites estrictos.