Votre serveur reçoit 50 000 requêtes par seconde. Hier c'était 200.
Votre site ne répond plus. Vos clients voient une page blanche. Vous ne comprenez pas ce qui se passe.
Bienvenue dans une attaque DDoS. Voici ce que c'est, pourquoi ça arrive, et comment s'en protéger — concrètement, sans fortune.
Ce qu'est un DDoS — vraiment
DDoS = Distributed Denial of Service. Déni de service distribué.
Le principe est stupidement simple : submerger votre serveur de requêtes jusqu'à ce qu'il ne puisse plus répondre aux vraies. Comme 10 000 personnes qui appellent votre restaurant en même temps — personne ne peut réserver.
"Distribué" veut dire que les requêtes viennent de milliers de machines différentes. Pas un seul attaquant — des milliers de machines compromises (un botnet) qui frappent simultanément. Impossible de bloquer une seule IP parce que l'attaque vient de partout.
Ces machines sont souvent des ordinateurs infectés, des objets connectés (caméras, routeurs), des serveurs piratés. Leurs propriétaires ne savent même pas qu'ils participent à une attaque.
Les 3 types d'attaques
Volumétriques — noyer la bande passante
L'attaquant envoie un volume massif de données. 10 Gbps, 50 Gbps, parfois plus. Votre connexion sature. Comme essayer de boire à un firehose.
Exemples : UDP flood, DNS amplification, NTP amplification.
Contre : seul votre hébergeur ou un CDN peut absorber ça. Vous ne pouvez pas y faire grand-chose au niveau serveur.
Protocole — exploiter TCP/IP
L'attaquant exploite les faiblesses du protocole réseau. SYN flood : il initie des milliers de connexions TCP sans jamais les compléter. Votre serveur garde ces connexions "ouvertes" en mémoire, épuise ses ressources, et ne peut plus accepter de vraies connexions.
Contre : configuration kernel, SYN cookies, rate limiting au niveau réseau.
Applicatives (Layer 7) — les plus vicieuses
L'attaquant envoie des requêtes HTTP qui semblent légitimes. `GET /search?q=abcdefghijklmnop` × 10 000 par seconde. Votre serveur traite chaque requête normalement — PHP s'exécute, la base de données est interrogée, le résultat est généré. Sauf qu'il y en a 10 000 par seconde.
C'est la plus difficile à détecter parce que chaque requête ressemble à un vrai visiteur.
Contre : rate limiting applicatif, WAF, analyse comportementale.
Ce que personne ne vous dit
La majorité des "DDoS" sur les petits sites ne sont pas des DDoS.
Ce que vous subissez probablement : des bots qui scannent votre site, du brute force sur wp-login.php (même si vous n'avez pas WordPress), des crawlers agressifs, des scripts automatisés qui testent des failles connues.
Ça ressemble à un DDoS — votre serveur ralentit, votre CPU monte — mais c'est du bruit de fond d'internet. Gérable avec une configuration correcte.
Les vraies grosses attaques ciblent des entreprises à 9 chiffres. Les attaquants ne dépensent pas des ressources de botnet sur un site à 5 000 visites/jour. Ça ne veut pas dire que vous êtes immunisé — les bots s'en foutent de votre taille — mais le niveau de protection requis est différent.
Votre hébergeur absorbe déjà une partie. AWS a Shield Basic gratuit sur tous les EC2. Il bloque les attaques volumétriques évidentes automatiquement. Vous ne le voyez pas, mais il travaille.
Protection niveau 1 — 30 minutes (gratuit)
Ce que vous pouvez faire maintenant, sur n'importe quel serveur Linux avec Nginx.
Rate limiting Nginx
Limitez le nombre de requêtes par IP par seconde :
```nginx limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s; limit_conn_zone $binary_remote_addr zone=addr:10m;
server { location / { limit_req zone=general burst=20 nodelay; limit_conn addr 10; } } ```
10 requêtes/seconde par IP. Burst de 20. Maximum 10 connexions simultanées. Un humain normal ne dépasse jamais ça. Un bot, oui.
Fail2ban — bannir les récidivistes
Fail2ban surveille vos logs. Trop de requêtes refusées = IP bannie automatiquement au firewall.
```bash sudo apt install fail2ban sudo systemctl enable fail2ban ```
Configuration pour Nginx rate limit :
```ini [nginx-limit-req] enabled = true filter = nginx-limit-req logpath = /var/log/nginx/error.log maxretry = 5 bantime = 3600 ```
5 violations = banni 1 heure. Automatique. 24/7.
Bloquer les user-agents connus
```nginx if ($http_user_agent ~* (masscan|nikto|sqlmap|nmap|dirbuster)) { return 444; } ```
444 = Nginx ferme la connexion sans répondre. Pas de bande passante gaspillée.
Désactiver les méthodes HTTP inutiles
```nginx if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; } ```
Votre site n'a pas besoin de TRACE, DELETE, ou PUT depuis l'extérieur.
Timeout agressifs
```nginx client_body_timeout 10; client_header_timeout 10; keepalive_timeout 15; send_timeout 10; ```
Les connexions qui traînent sont coupées. Un bot qui garde une connexion ouverte sans rien envoyer se fait éjecter en 10 secondes.
Protection niveau 2 — Cloudflare gratuit
Cloudflare est un reverse proxy qui s'intercale entre vos visiteurs et votre serveur. Même le plan gratuit offre :
Protection DDoS automatique — Cloudflare absorbe les attaques volumétriques avant qu'elles n'atteignent votre serveur. Leur réseau fait 248 Tbps. Votre EC2 fait 5 Gbps. La différence est absorbée par eux.
Cache CDN — Les pages cachées sont servies par Cloudflare sans toucher à votre serveur. Pendant une attaque, seules les requêtes non-cachées passent.
Bot detection — Cloudflare identifie les bots connus et les bloque ou les challenge (CAPTCHA).
Under Attack Mode — Un bouton. Vous l'activez pendant une attaque. Chaque visiteur doit passer un challenge JavaScript de 5 secondes. Les bots échouent. Les humains passent.
Setup : Changez vos nameservers DNS vers Cloudflare. 15 minutes.
Important : Une fois Cloudflare en place, cachez votre vraie IP. Si l'attaquant connaît l'IP directe de votre EC2, il contourne Cloudflare. Bloquez le trafic direct qui ne vient pas des IPs Cloudflare :
```nginx # Autoriser uniquement les IPs Cloudflare allow 173.245.48.0/20; allow 103.21.244.0/22; allow 103.22.200.0/22; # ... (liste complète sur cloudflare.com/ips) deny all; ```
Protection niveau 3 — Quand passer au payant
Cloudflare Pro (25 $/mois) — WAF (Web Application Firewall) avec règles managées. Bloque les attaques Layer 7 sophistiquées automatiquement.
AWS Shield Advanced (3 000 $/mois) — Protection DDoS avec SLA. Garantie de disponibilité. Équipe de réponse dédiée 24/7. Pour les sites qui perdent plus de 3 000 $/mois en downtime.
Quand upgrader : Si vous subissez des attaques régulières qui passent à travers Cloudflare gratuit + rate limiting. Si votre business perd de l'argent à chaque minute de downtime. Si vous êtes une cible identifiée (finance, politique, gaming compétitif).
Pour 95% des sites, Cloudflare gratuit + rate limiting Nginx + fail2ban suffit.
Checklist — 30 minutes pour protéger votre serveur
Nginx (10 min) : - [ ] Rate limiting configuré (10 req/s par IP) - [ ] Connexions simultanées limitées (10 par IP) - [ ] Timeout agressifs (10s) - [ ] Méthodes HTTP inutiles bloquées - [ ] User-agents malveillants bloqués
Fail2ban (10 min) : - [ ] Installé et activé - [ ] Jail nginx-limit-req configurée - [ ] Jail sshd active
Cloudflare (10 min) : - [ ] Compte créé, domaine ajouté - [ ] Nameservers pointés - [ ] SSL mode Full (Strict) - [ ] Under Attack Mode localisé (savoir où le bouton est)
Bonus — monitoring : - [ ] Alertes CPU configurées (CloudWatch si AWS) - [ ] Logs Nginx accessibles et lisibles - [ ] `htop` ou `top` pour diagnostic rapide
Ce qui compte vraiment
Un DDoS n'est pas une fatalité. Ce n'est pas non plus un événement rare et mystérieux. C'est du bruit d'internet — à différentes intensités.
La vraie protection, c'est une hygiène de base maintenue dans le temps : rate limiting, monitoring, mises à jour, logs surveillés. Pas un produit magique à 500 $/mois.
Cloudflare gratuit + Nginx bien configuré + fail2ban = vous êtes protégé contre 95% de ce qui existe.
Les 5% restants ? Vous le saurez quand ça arrivera. Et à ce moment-là, vous aurez probablement les revenus pour payer Cloudflare Pro.
Commencez par les 30 minutes. C'est ce qui fait la différence entre un site qui tombe et un site qui absorbe.