Protection DDoS et filtrage des paquets
Résumé succinct
Les attaques DDoS sont de trois classes : L3/L4 volumetric (boucher le canal/matériel), state-exhaustion (épuiser les tables d'état/CPU sur les balanciers/fiervols) et L7 (générer des requêtes « plausibles » à l'application). Une défense efficace se construit en plusieurs couches : mesures de réseau sur le périmètre, filtrage/scrabbbing hors de votre réseau, protection sur les équilibreurs/proxy et l'application, plus procédures opérationnelles avec SLO mesurable.
Paysage de menaces
Volumetric (UDP/ICMP flood, amplification DNS/NTP/SSDP/CLDAP/Memcached) : l'objectif est de marquer le canal et les ports.
État-exhaution TCP (SYN/ACK flood, fragmentation TCP, connexions « demi-cônes ») : épuiser les connecteurs/listers.
L7 HTTP (S )/WebSocket/GraphQL flood, cache-busting, requêtes « lentes » : manger les applications CPU/IO et la couche cache.
Réflexion/Amplification : utilisation de réflecteurs/amplificateurs ouverts avec remplacement de source IP.
Carbet bombing : distribution du trafic sur une multitude d'IP/préfixes, compliquant le filtrage ponctuel.
Mesures réseau de base (avant les attaques)
1. Anti-spoofing : uRPF/BCP38 à la frontière ; drop des paquets sortants avec des sources étrangères.
2. ACL sur edge/PE : interdiction des protocoles/ports indésirables ; listes séparées pour le segment mgmt.
3. CoPP (Control Plane Policing) : Polising au routeur (BGP, OSPF, SSH, SNMP).
4. Rate-limits/Polising sur les ports : bps/PPS pour les classes « bruyantes », burst-réglages.
5. Répartition de la charge : Anycast pour les PI publiques, les géorasses ; CDN/WAAP pour statique et cache.
6. RPKI/ROA + importation stricte de BGP : réduit le risque de haijek/redirection du trafic.
7. Réduction de surface : minimisez les services publiés, fermez l'origin « brut » par proxy.
Réaction rapide à l'attaque : leviers réseau
RTBH (Remote Triggered Blackhole) : BGP-communities pour zéro route/32 (ou/128) victime.
BGP Flowspec : propagation rapide des règles L3/L4 (src/dst/port/drapeaux TCP) sur PE/edge.
Scribbing-centers/fournisseurs anti-DDoS : tunnel GRE/VRF ou apstrom direct ; filtrage, puis trafic « propre » à vous.
Anycast-antiDDoS : clivage du flux sur les points de présence, localisation des dommages.
Cache CDN/edge : Protège l'origin, donne les limites L7 et les mécanismes « challenge ».
Protection hôte et L4
SYN cookies/SYNPROXY : ne pas conserver l'état jusqu'à la confirmation du client.
Linux: `sysctl net. ipv4. tcp_syncookies=1' ou 'SYNPROXY' sur le balancier d'entrée.
Tuning contrack (si utilisé) :- Modérer 'nf _ contrack _ max' intelligemment en augmentant hashsize ;
- Réduisez les délais pour les états « semi-ouverts » et inactifs.
- eBPF/XDP : drop précoce sur NIC (protection PPS), filtrage par signature/vitesse jusqu'au noyau.
- nftables/iptables : limites sur les PPS, rejet des drapeaux « suspects », connlimit.
- UDP hardening : si le service n'utilise pas UDP - drop à la frontière ; si elle utilise - limiter les sources/ports.
nft table inet filter {
sets {
bad_ports { type inet_service; elements = { 19, 1900, 11211 } } # chargen/SSDP/memcached
}
chains {
input {
type filter hook input priority 0; policy drop;
ct state established,related accept ip saddr 127. 0. 0. 0/8 drop ip6 saddr::1/128 drop
limit new TCP tcp flags & (syn ack) == syn limit rate 200/second burst 400 accept tcp flags & (syn ack) == syn drop
deny bad UDP ports udp dport @ bad _ ports drop
ICMP rate-limit icmp type echo-request limit rate 50/second burst 100 accept icmpv6 type echo-request limit rate 50/second burst 100 accept
}
}
}
SYNPROXY sur le balancier d'entrée (exemple 'iptables') :
bash iptables -t raw -A PREROUTING -p tcp --syn -j CT --notrack iptables -A INPUT -p tcp -m tcp --syn -m hashlimit --hashlimit 100/second --hashlimit-burst 200 --hashlimit-mode srcip --hashlimit-name syns -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 iptables -A INPUT -m state --state INVALID -j DROP
Protection L7 (courte)
WAAP/WAF : modèle positif sur les voies critiques, taux-limites, challenge/JS, scoring comportemental.
Mise en cache/offload statique : nous réduisons les requêtes à l'origin ; protection contre le cache-busting (normalisation/listes noires de paramètres).
GrapheQL limiteurs : 'maxDepth', 'maxCost', interdiction d'introduction dans la vente.
Modèle BFF : jeton client fin, logique lourde/limites sur le serveur.
Idempotence et files d'attente : évitent les répétitions avalanches en cas de dégradation.
Télémétrie et détection
Flux réseau : NetFlow/sFlow/IPFIX (pps, top talkers, protocoles/ports/ASN).
Capteurs passifs L7 : logs/proxy (nginx/envoy), métriques p95/99, error-rate.
Seuils de base : « croissance inattendue du PPS/CPU par bord », « sursaut du SYN-RECV », « UDP irresponsable ».
Signatures/comportement : fréquences par IP/ASN/JA3, surtensions 4xx/5xx, anomalies user-agent.
Visualisation : dashboards individuels L3/L4/L7 ; Carte du trafic géo/ASN ; le temps avant le déclenchement de RTBH/Flowspec.
SLO/SLI et alerting
Exemples de SLO :- « MTTD des anomalies DDoS ≤ 60 secondes, MTTM (activation RTBH/Flowspec) ≤ 3 min ».
- "p95 latence via edge ≤ 50 ms hors attaques ; lors d'une attaque ≤ 200 ms sous mitigation".
- La part du trafic malveillant rejeté ≥ 99 % tout en conservant ≥ 98 % de trafic légitime.
- PPS/CPU/IRQ des nœuds de réseau> seuil ;
- SYN-RECV/half-open > X;
- Croissance de 5xx/latency sur les endpoints publics ;
- pourcentage de challenge/deny chez WAF> seuil (risque FP).
Modèles de défense architecturale
1. Tiered Defense : Edge (ACL/CoPP) → Scrubbing/Anycast → L7-proxy/WAAP → Application.
2. Diversion de trafic : Communauté BGP pour le déménagement au scrabbing, GRE-beckhol pour le temps de pique-nique.
3. Stateless Edge : filtrage stateless maximal jusqu'à contrack ; stateful est plus proche de l'application.
4. eBPF/XDP First : drops précoces (par JA3/ports/vitesses) jusqu'au noyau.
5. Golden Paths : des domaines IP/distincts pour les API critiques afin de ne pas « démolir » tout.
Procédures opérationnelles et incidents
Runbooks : qui et dans quelles métriques inclut RTBH/Flowspec/scrabbbing, comment changer Anycast/pools.
Listes noires et TTL : bloc à court terme pour ne pas « surcharger » ; re-test automatique des sources.
Communications : modèles de messages aux fournisseurs/partenaires/fournisseurs ; canal de communication en dehors du domaine attaqué.
Post-Incident : rapport avec chronologie (T0... Tn), « ce qui a fonctionné/non », mise à jour du répertoire de test.
Exercices : journées de jeu régulières : RTBH dry-run, perte de la région d'Anycast, lynchage, attaques « lentes ».
Tuning Linux/balancier (échantillon)
bash
TCP sysctl -w net. ipv4. tcp_max_syn_backlog=4096 sysctl -w net. ipv4. tcp_syncookies=1 sysctl -w net. ipv4. tcp_fin_timeout=15 sysctl -w net. ipv4. tcp_tw_reuse=1
Conntrack (if enabled)
sysctl -w net. netfilter. nf_conntrack_max=1048576 sysctl -w net. netfilter. nf_conntrack_tcp_timeout_syn_recv=30 sysctl -w net. netfilter. nf_conntrack_udp_timeout=15
NIC/IRQ ethtool -G eth0 rx 4096 tx 4096
Erreurs fréquentes
Gardez tout le trafic via stateful-firewall sur edge → l'épuisement de contrack. Faites le stateless là où vous pouvez.
RTBH/Flowspec tardif → la chaîne est déjà « à zéro ». Automatisez les seuils et l'activation.
Un front IP/un front pour « tout » → pas d'isolation blast radius. Partagez les domaines/IP et les quotas.
Cache zéro → chaque appel L7 frappe l'origin ; Activez la mise en cache et la normalisation des paramètres.
Blocage aveugle des pays/ASN sans analyse de la légite - coupe la conversion ; utilisez des règles/challenges nuancés.
Des limites trop agressives → des FP massifs au sommet des affaires.
Feuille de route pour la mise en œuvre
1. Évaluation de surface : inventaire IP/préfixes/ports/protocoles, carte des chemins critiques.
2. Hygiène du réseau : anti-spoofing, ACL, CoPP, RPKI/ROA, refus des services UDP superflus.
3. Diversion du trafic : contrat avec le fournisseur de scrabbing, Anycast/CDN, BGP communities.
4. Edge-tuning : stateless-filtration, SYNPROXY/eBPF, temporisation raisonnable contrack.
5. L7/WAAP : modèle positif, limites/challenges, cache.
6. Observabilité : NetFlow/sFlow, dashboards de L3/L4/L7, alertes, SLO.
7. Automatisation : boutons RTBH/Flowspec, IaC pour les règles, boutons canaris de configues.
8. Exercices et RCA : tests réguliers, mise à jour des playbooks.
Caractéristiques pour iGaming/fintech
Événements de pointe (tournois, promotions, matchs) : planifier la capacité/limites, chauffer les caches, pré-warming CDN.
Intégrations de paiement : IP/domaines dédiés, canaux prioritaires via le fournisseur anti-DDoS, mTLS à PSP, limites strictes pour les endpoints critiques.
Anti-frod/bot control : scores comportementaux et challenges humains sur l'enregistrement/login/promo.
UX et conversion : avec une protection agressive, utilisez des feuilles de grace pour VIP/partenaires, dégradations douces (cache/lecture).
Exigences légales : transparence des journaux, stockage de la télémétrie, débogage de l'impact des mesures sur Time-to-Wallet et mesures du chiffre d'affaires.
Exemples : Flowspec et RTBH (conceptuellement)
RTBH à travers la communauté (exemple) :
route 203. 0. 113. 10/32 blackhole set community 65535:666 announce to upstream
Flowspec (unité UDP> 1 Mbit/interface par port 19/1900) :
match destination 203. 0. 113. 0/24 protocol = udp destination-port {19,1900}
then rate-limit 1000
FAQ
WAF décide DDoS ?
En partie pour la L7. Contre le L3/L4 et le volume, il faut des mesures de scrabbbing/Anycast/network.
Les cookies SYN sont-ils suffisants ?
C'est une protection de base contre SYN-flood, mais sans limites réseau et sans scrabbbing, vous pouvez toujours marquer le canal.
Dois-je désactiver ICMP ?
Non. Mieux que rate-limit et seulement les types dangereux, ICMP est utile pour le diagnostic/PMTU.
Un tunnel de scrabbing GRE n'ajoutera pas de latence ?
Oui, mais c'est généralement acceptable. Compenser par un cache et un itinéraire précis jusqu'au PoP le plus proche.
Résultat
La protection DDoS robuste est une architecture à plusieurs niveaux : hygiène du réseau (anti-spoofing/ACL/CoPP), diversion rapide du trafic (RTBH/Flowspec/scribbing/Anycast), mécanismes hôtes et L7 (SYNPROXY, eBPF/XDP, WAAP), plus télémétrie, SLO et playbooks réglés. Cette approche minimise la simplicité, maintient les canaux en vie et maintient les métriques d'affaires même sous la pression d'attaques distribuées.