Protection contre les DDoS
Comprendre et contrer les attaques par déni de service distribué
Notions théoriques
Une attaque DDoS (Distributed Denial of Service) vise à rendre un service indisponible en le submergeant de requêtes provenant de plusieurs sources simultanément.
Ces attaques exploitent souvent des réseaux de machines compromises appelées botnets.
Fonctionnement d'une attaque DDoS
- Infection des machines zombies : Un attaquant prend le contrôle de nombreux ordinateurs en les infectant avec un malware.
- Coordination de l'attaque : Les machines infectées reçoivent des instructions d'un serveur de commande et contrôle (C&C).
- Envoi massif de requêtes : Les machines zombies envoient un grand nombre de requêtes vers la cible, saturant ses ressources.
- Impact : Le serveur ciblé devient lent ou totalement inaccessible pour les utilisateurs légitimes.
Types d'attaques DDoS
- Attaques par saturation de bande passante : Envoi d'un volume massif de trafic pour épuiser la connexion réseau.
- Attaques par épuisement des ressources : Consommation excessive du processeur, de la mémoire ou des connexions simultanées d'un serveur.
- Attaques applicatives : Exploitation de vulnérabilités dans un service pour le rendre instable ou le faire planter.
Méthodes de protection
- Utilisation d'un pare-feu et de filtres : Bloquer les adresses IP suspectes et limiter le nombre de requêtes par seconde.
- Configuration d'un proxy inverse : Placer un serveur intermédiaire pour absorber et filtrer le trafic.
- Utilisation d'un service de protection DDoS : Faire appel à des services spécialisés comme Cloudflare ou AWS Shield.
- Mise en place de règles de limitation : Configurer les serveurs pour limiter le nombre de connexions simultanées par adresse IP.
Avantages et limites des protections
✅ Avantages :
- Réduction de l'impact des attaques en filtrant le trafic malveillant.
- Amélioration des performances du serveur en bloquant les requêtes inutiles.
- Protection proactive contre les attaques connues.
❌ Limites :
- Les attaques volumétriques peuvent dépasser les capacités du réseau.
- Les attaquants peuvent utiliser des techniques d'évasion pour contourner les protections.
- Une mauvaise configuration des filtres peut bloquer des utilisateurs légitimes.
Exemple pratique
Mise en place d'une protection contre les attaques DDoS avec iptables
Il est possible de configurer iptables, un pare-feu sous Linux, pour limiter le nombre de connexions et bloquer les adresses IP suspectes.
1) limitation du nombre de connexions par adresse IP
Restreindre le nombre de nouvelles connexions TCP par seconde :
sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j DROP
Cette règle bloque les adresses IP qui tentent d'établir plus de 10 connexions simultanées sur le port 80.
2) détection et blocage des IP effectuant trop de requêtes
Limiter les requêtes à 30 par seconde pour éviter les abus :
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 30/second --limit-burst 50 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
3) blocage des paquets malformés souvent utilisés dans les DDoS
sudo iptables -A INPUT -m state --state INVALID -j DROP
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
Ces règles empêchent les attaques exploitant des paquets corrompus et limitent les requêtes ping pour éviter les attaques ICMP Flood.
4) vérification des règles appliquées
sudo iptables -L -v -n
Cette commande liste toutes les règles actives et permet de s'assurer que les protections sont bien en place.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif
Dans ce TP, vous allez configurer un serveur Linux pour détecter et bloquer automatiquement une attaque DDoS simulée.
Vous utiliserez fail2ban en complément d'iptables pour identifier et bannir les adresses IP effectuant un nombre excessif de requêtes.
Étape 1 - Installation et configuration de fail2ban
Nous allons installer fail2ban, un outil qui surveille les journaux système et applique des règles de bannissement aux IP suspectes.
1. Installer fail2ban
Sur une distribution Debian/Ubuntu, utilisez la commande suivante :
sudo apt update && sudo apt install fail2ban -y
Sur une distribution CentOS/RHEL :
sudo yum install epel-release -y
sudo yum install fail2ban -y
2. Vérifier que fail2ban est bien installé
Lancez la commande suivante pour vérifier que le service est actif :
sudo systemctl status fail2ban
Il devrait afficher un état "active (running)".
Si fail2ban n'est pas actif, vous pouvez le démarrer avec :
sudo systemctl start fail2ban
Et pour qu'il démarre automatiquement au prochain redémarrage du serveur :
sudo systemctl enable fail2ban
Si la commande systemctl status fail2ban
affiche une erreur, vérifiez les logs avec :
sudo journalctl -xe | grep fail2ban
Cela vous aidera à identifier d'éventuels problèmes de configuration.
Étape 2 - Configurer fail2ban pour détecter une attaque DDoS
Nous allons configurer fail2ban pour bannir automatiquement les adresses IP effectuant trop de requêtes HTTP.
1. Créer un fichier de configuration personnalisé
Copiez le fichier de configuration par défaut pour éviter qu'il soit écrasé lors d'une mise à jour :
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ouvrez ensuite le fichier avec un éditeur de texte :
sudo nano /etc/fail2ban/jail.local
2. Ajouter une règle pour protéger Apache/Nginx
Dans le fichier, recherchez la section [apache]
ou [nginx]
et modifiez-la comme suit :
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 60
bantime = 600
Cette configuration signifie que si une adresse IP effectue plus de 20 requêtes en moins de 60 secondes, elle sera bannie pendant 10 minutes.
Voici une explication détaillée des paramètres :
- enabled = true → Active cette règle
- port = http,https → Applique la règle aux ports 80 et 443
- filter = nginx-http-auth → Utilise un filtre spécifique pour détecter les accès suspects
- logpath = /var/log/nginx/access.log → Surveille les requêtes dans le fichier journal
- maxretry = 20 → Si plus de 20 requêtes sont détectées en peu de temps, l'IP est bannie
- findtime = 60 → La limite de 20 requêtes est calculée sur une durée de 60 secondes
- bantime = 600 → L'IP est bannie pendant 10 minutes
Si vous utilisez Apache, remplacez nginx-http-auth
par apache-auth
et adaptez le chemin du fichier journal (/var/log/apache2/access.log
).
Étape 3 - Tester la configuration en simulant une attaque
Nous allons générer un grand nombre de requêtes HTTP pour voir si fail2ban les détecte et bloque l'IP.
1. Redémarrer fail2ban pour appliquer les changements
sudo systemctl restart fail2ban
2. Vérifier que la règle est bien prise en compte
sudo fail2ban-client status nginx-http-auth
Cela devrait afficher les IP bannies et le nombre de tentatives détectées.
3. Simuler une attaque avec ab
(Apache Benchmark)
Installez Apache Benchmark si ce n'est pas encore fait :
sudo apt install apache2-utils -y # Debian/Ubuntu
sudo yum install httpd-tools -y # CentOS/RHEL
Puis exécutez cette commande pour envoyer 50 requêtes en rafale :
ab -n 50 -c 10 http://localhost/
Si fail2ban fonctionne correctement, votre IP devrait être temporairement bannie après quelques secondes.
Pour vérifier :
sudo fail2ban-client status nginx-http-auth
Si votre IP est listée sous "Banned IP list", cela signifie que la protection fonctionne.
Si vous voulez débloquer votre IP manuellement, utilisez :
sudo fail2ban-client set nginx-http-auth unbanip <votre_ip>
Si fail2ban ne bannit pas l'IP, vérifiez le fichier journal :
sudo tail -f /var/log/fail2ban.log
Cela vous aidera à comprendre pourquoi la règle ne s'applique pas.
Étape 4 - Ajouter une règle iptables pour renforcer la protection
Pour compléter fail2ban, nous allons ajouter une règle iptables pour limiter le nombre de connexions simultanées.
1. Ajouter une règle iptables
sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP
Cette règle empêche une adresse IP d'établir plus de 20 connexions simultanées au serveur web.
2. Sauvegarder les règles iptables
Sur Debian/Ubuntu :
sudo netfilter-persistent save
Sur CentOS/RHEL :
sudo service iptables save
Cette règle iptables agit comme une barrière supplémentaire contre les attaques DDoS en empêchant une seule IP d'ouvrir trop de connexions en même temps.
Pour vérifier si la règle est bien appliquée :
sudo iptables -L -v -n
Si vous souhaitez supprimer cette règle plus tard, utilisez :
sudo iptables -D INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP
Et n'oubliez pas de sauvegarder à nouveau les règles après toute modification.