Protezione e filtraggio dei pacchetti
1) Perché è necessario
DDoS è la «degradazione di massa» delle risorse: banda/pps, tabelle di stato, CPU kernel/IRQ, pool di connessione, limiti delle applicazioni. Lo scopo è di disattivare la protezione: spegnere il volume sul perimetro della rete, neutralizzare le anomalie protocollari fino alla pila TCP/IP, e ritagliare le richieste indesiderate su L7, mantenendo SLO per gli utenti legittimi.
2) Classi di attacco
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.
Le caratteristiche di QUIC/UDP sono le tempeste iniziali/Retry false, spoofed source.
2. 2 L7 (application)
HTTP/1. 1: richieste per percorsi costosi, header oversize/field smuggling.
HTTP/2: Rapid Reset, stream-flood, HEADERS flood, PRIORITY abuse.
HTTP/3 (QUIC) - Connessioni/flussi senza completamento, Iniziale flood.
Slow-атаки: slowloris/slow-read/slow-POST.
gRPC/WebSocket: strike infiniti, messaggistica-flood, grandi cornici.
3) Architettura di protezione di base
1. Anycast + Scrubbing
Spruzza il traffico globalmente e sposta attraverso i centri scarubbing di provider (ritaglio di volumetric/spoofing sul bordo).
2. Multi-CDN / Multi-Edge
Espansione dei domini (Web, API, statica), aggregazione della protezione e cache per il carico di lavoro read.
3. Filtri a basso livello sul perimetro
ACL su router border (RFC1918, bogon, porte contraffatte).
eBPF/XDP per early-drop per firme e rate-limiti fino al conntrack.
4. Perimetro L7 (NGINX/Avvoy/WAF)
Compressione RPS per chiavi, challenge (captcha/PoW), cache, priorità dei percorsi costosi.
5. Stabilità interna
Pool di connessioni, code, circuito/timeout, servizi di isolamento (bulkhead) e autoscaling con tappi (shedder).
4) Valvole di rete: cosa abilitare subito
4. 1 Linux sysctl (kernel/stack)
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 nftable: filtri di base e ratelimit sui pacchetti
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)
I pacchetti con sorgente spoofed Early-drop sono benvenuti.
bacchette hash pps per/32 e per/24; quarantena dinamica delle sorgenti.
Etichette UDP-reflection: DNS response-like per l'accesso (filtra fuori contesto).
5) UDP amplificazione: inventario e blocchi
Riflettori/amplificatori frequenti: DNS (open resolvers), NTP (monlist), CLDAP, SSDP, mDNS, Memcached (UDP), Argen.
Misure:- Chiudi/limita i servizi UDP e minimizza le porte aperte.
- Il perimetro limita il pps/bitrate per le porte conosciute.
- Raccomandazione DNS: ricorsibile solo per le proprie reti, RRL (Response Rate Limiting), minimizzazione ANY.
- NTP - solo «bottino» ai fidati, «noquery» ai pubblici.
6) TCP state exhaustion
SYN flood: 'tcp _ syncookies = 1', aumentato'tcp _ max _ syn _ backlog ',' synack _ retries = 3 ', drop per pps.
ACK/RST flood - Limiti a basso livello, interruzioni di sequenze illegali (nftable/ebpf).
Connrack-less sul border - Non sprecare tabelle di stato dove il filtro è possibile in base alla firma stateless.
7) HTTP/2/3 e attacchi «intelligenti» L7
HTTP/2 Rapid Reset: limite di frequenza dei frame RST e numero di flussi aperti Chiudere la connessione in caso di anomalie.
Stream abuse: лимит concurrent streams, headers size, max frame size.
QUIC/HTTP/3: limita Iniziale pps, abilita Retry; brevi timeout handshake.
NGINX (sezione 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;
Invoy (anti-reset e limiti)
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) Attacchi slow e protezione delle risorse
Slowloris/slow-read/slow-POST: abilita «proxy _ sollest _ buffering on», basso idle-timeout, minimo accettabile «read _ rate».
Interrompe le connessioni con un intervallo di query lungo.
L'applicazione contiene la lettura precoce del corpo, i limiti di dimensione e profondità JSON.
9) Filtraggio L7: chi è più importante - lascia passare
Classificazione del traffico: known good (partner mTLS/JWT), utenti registrati, anonimi.
Priorità: «costose» rotte write (depositi/conclusioni) - proteggere, ma saltare le rotte confermate; directory read - cache + throttle.
Livello challenge: captcha/PoW/JS Challenge per le zone grigie a picco.
10) Cache, coalescing e degrado
Edge-cache per le risposte statiche/quasi-istatiche, 'stale-while-revalidate'.
Richiest coalescing - Consente di collegare richieste parallele a una sola chiave, nel proxy e nell'applicazione.
Modalità Delrade: disattiva le feci secondarie (personalizzazione, rapporti pesanti), visualizza pagine leggere.
11) Osservabilità e telemetria
Metriche (per RR/nodo/cluster):- 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`.
- Dipendenze: CPU IRQ soft/hard, NIC queue drops, run-queue length.
Logi: condensati, aggregati a/24, ASN, porte e firme; senza PII.
Tracing: includere su elenchi bianchi, espandere di emergenza il sampling per il debug.
12) Piani di risposta (runbook)
1. Oggetto: attivazione delle soglie pps/bps/429/h2 _ rst _ rate.
2. Classificazione livello (L3/4/7), protocollo (UDP/TCP/h2/h3), geo/ASN.
- includere i profili scrubbing/blackhole sul provider,
- Rafforzare i limiti nftable/ebpf,
- Ridurre i limiti L7 e aumentare i challenge,
- Abilita Retry per QUIC (Iniziale flood).
- 4. Comunicazioni: stato pagina, modelli di notifica per i partner.
- 5. Forenzica: cattura PCAP da 60 a 120 secondi, campionamento top talkers ASNs/porte.
- 6. Retrospettiva: aggiorna firme, soglie, elenchi di riflettori.
13) Test e esercitazioni
Playbook trimestrale: sintetici UDP/HTTP burst, slow-out, HTTP/2 reset.
Game day: spostamenti Anycast/migrazione tra CDN, degrado a modalità leggera.
Controllo del provider: SLA scrubbing, ora di attivazione/disattivazione dei filtri, max pps/bps.
14) Antipattern
Affidarsi solo a L7-WAF per un attacco volumetrico.
Nessun uRPF/ACL sul border e conntrack-heavy filtrare «frontale».
Titoli/corpi illimitati e lunghi keep-alive a picco.
Un'unica regione/RR senza Anycast/multi-edge.
Nessuna scorta NIC/IRQ/CPU e monitoraggio code.
Niente cache/coalizione - RPS superflui per backend.
15) Specificità iGaming/finanza
Picchi temporanei (match/derby/lotto-scherzi) - Espandere in anticipo la capacità POP, attivare la cache aggressiva dei coefficienti, allineare i canary challenge per gli anonimi.
Rotte di pagamento/output: un singolo edge pool con mTLS, brevi timeout, limiti di competitività; niente 0-RTT.
Geo-policy: allow-light regionali, filtro ASN «hosting», failover geo veloce.
Intersezione con antifrode: i limiti velocity e l'API Risk passano al profilo rigido in caso di incidente DDoS.
16) Assegno-foglio prod-pronto
- Anycast или multi-edge/CDN; i canali scrubbing sono stati controllati.
- Border-ACL/uRPF; profili nftable/ebpf/XDP, filtraggio conntrack-less.
- Sysctl-tuning TCP/SYN, limity pps per porte amplificatori UDP.
- HTTP/2/3 limiti (streams, frames, headers), protezione slow, body/header-limits.
- Limiti L7 e challenge; cache e coalescing sul perimetro.
- Dashboard pps/bps/conntrack/IRQ + L7 RED; alert su anomalie h2 _ rst/429.
- Runbook/playbook, contatti del provider, one-click attivazione dei profili.
- Esercitazioni: burst, slow, HTTP/2 reset; report e rilevamento dei miglioramenti.
- I pool separati per le rotte di pagamento/criticità, i limiti fissi e rigorosi.
17) TL; DR
Disattivare la protezione: Anycast + scrubbing taglia il volume, taglia la spazzatura fino alla pila, i limiti L7/challenge/cache conservano la SLA. Sintonizzate TCP (SYN cookies, backlog), limitate gli amplificatori UDP, impostate i limiti HTTP/2/3 e la protezione slow. Possiedi il runbook e allenatelo; per - Espandere l'edge in anticipo durante gli orari di picco e separare i percorsi di pagamento con i limiti fissi e rigidi.