Renforcement du noyau Linux via sysctl.conf. Protection contre les attaques par inondation SYN et réglage TCP.
Introduction
Dans ce tutoriel, vous allez renforcer le noyau Linux en utilisant sysctl.conf, protéger votre serveur contre les attaques par inondation SYN et optimiser le comportement de la pile TCP. L'ajustement au niveau du noyau améliore la résilience contre les attaques par déni de service (DoS) basées sur le réseau et améliore les performances TCP globales. Vous simulerez également une attaque par inondation SYN dans un environnement contrôlé et vérifierez que vos mécanismes de protection fonctionnent correctement.
Prérequis
Public cible : Administrateurs système intermédiaires
Temps estimé : 45–60 minutes
Exigences du système
- Système d'exploitation : Ubuntu 24.04 LTS (testé) ; compatible avec Debian 12/13 et d'autres distributions Linux modernes
- Version du noyau : 5.x ou ultérieure
- Minimum 1 Go de RAM
- Privilèges root ou sudo
- Accès réseau entre les machines de test
Outils requis
Installez les utilitaires suivants :
sudo apt update
sudo apt install -y hping3 net-tools procps iproute2
Vérifiez l'installation : hping3 --version
Sortie attendue : informations de version confirmant une installation réussie.
Effectuez la simulation d'inondation SYN uniquement dans un environnement de laboratoire contrôlé. Ne testez jamais sur des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation de tester.
Étape 1 : Sauvegarder la configuration actuelle de sysctl
Avant de faire des modifications, créez une sauvegarde.
sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup
Résultat : Un fichier de sauvegarde /etc/sysctl.conf.backup est créé.
Étape 2 : Configurer les paramètres du noyau pour la protection contre les inondations SYN
Ouvrez le fichier de configuration :
sudo nano /etc/sysctl.conf
Ajoutez ou modifiez les paramètres suivants.
Activer les cookies SYN
net.ipv4.tcp_syncookies = 1
Objectif : Active les cookies SYN lorsque la file d'attente de backlog SYN déborde.
Valeurs :
- 0 – Désactivé
- 1 – Activé lorsque le débordement de backlog SYN se produit (recommandé)
- 2 – Toujours activé (rarement utilisé)
Pourquoi : Les cookies SYN empêchent l'épuisement de la mémoire en évitant l'allocation de ressources jusqu'à la fin de la poignée de main.
Dans les distributions modernes, cette option est activée par défaut. Vous pouvez la vérifier avec la commande suivante : sysctl -a | grep net.ipv4.tcp_syncookies
Augmenter la file d'attente de backlog SYN
net.ipv4.tcp_max_syn_backlog = 4096
Objectif : Nombre maximum de demandes de connexion en file d'attente en attente d'accusé de réception.
Pourquoi : Un backlog plus grand permet plus de connexions à moitié ouvertes avant que le noyau ne commence à les abandonner.
Réduire les tentatives de retransmission SYN-ACK
net.ipv4.tcp_synack_retries = 3
Objectif : Nombre de retransmissions pour les paquets SYN-ACK.
Pourquoi : Réduire cela diminue le temps passé à attendre des connexions à moitié ouvertes malveillantes.
Activer la réutilisation du temps d'attente TCP
net.ipv4.tcp_tw_reuse = 1
Objectif : Permet la réutilisation des sockets TIME-WAIT pour de nouvelles connexions sortantes.
Valeurs :
- 0 – Désactivé
- 1 – Activé
Pourquoi : Réduit l'épuisement des sockets sous forte charge.
Réduire le délai d'attente FIN
net.ipv4.tcp_fin_timeout = 15
Objectif : Temps pendant lequel un socket reste dans l'état FIN-WAIT-2.
Pourquoi : Réduit l'utilisation des ressources par les connexions obsolètes.
Activer le filtrage de chemin inverse
net.ipv4.conf.all.rp_filter = 1
Objectif : Valide les adresses IP source par rapport à la table de routage.
Valeurs :
- 0 – Désactivé
- 1 – Mode strict
- 2 – Mode lâche
Pourquoi : Aide à atténuer les attaques de spoofing IP.
Augmenter le nombre maximum de fichiers ouverts
fs.file-max = 2097152
Objectif : Nombre maximum de descripteurs de fichiers à l'échelle du système.
Pourquoi : Empêche l'épuisement des descripteurs de fichiers lors d'une charge de connexion élevée.
Étape 3 : Appliquer les modifications de sysctl
Appliquez les modifications sans redémarrer :
sudo sysctl -p
Sortie attendue : chaque paramètre affiché avec sa nouvelle valeur.
Vérifiez un paramètre spécifique : sysctl net.ipv4.tcp_syncookies
Sortie attendue : net.ipv4.tcp_syncookies = 1
Résultat : Les paramètres du noyau sont actifs.
Étape 4 : Simuler une attaque par inondation SYN
Important : Effectuez cela uniquement dans un environnement de laboratoire.
Depuis une machine de test distincte, exécutez :
sudo hping3 -S --flood -V <YOUR_SERVER_IP> -p 80
Explication :
-Senvoie des paquets SYN--floodenvoie des paquets aussi vite que possible-p 80cible le port HTTP
Résultat : Un volume élevé de paquets SYN est envoyé au serveur.
Étape 5 : Surveiller le serveur pendant l'attaque
Sur le serveur cible, surveillez les connexions :
netstat -ant | grep SYN_RECV | wc -l
Résultat : Affiche le nombre de connexions à moitié ouvertes.
Vérifiez le compteur de cookies SYN :
nstat -az | grep Syncookies
Vous devriez observer des compteurs croissants tels que TcpExtSyncookiesSent. Cela confirme que les cookies SYN sont utilisés.
Étape 6 : Comparer le comportement avant et après le renforcement
Si vous testez sans renforcement :
- Le nombre de SYN_RECV augmente rapidement
- Le serveur peut devenir non réactif
- La file d'attente de connexion déborde
Après renforcement :
- Les cookies SYN s'activent
- Moins de connexions abandonnées
- Le serveur reste réactif
Installez un serveur web sur le serveur cible :
sudo apt install nginx
Pour tester la réactivité :
curl http://localhost
Résultat : Le serveur répond normalement même pendant l'attaque simulée.
Étape 7 : Optimisation des performances TCP (Optimisation avancée optionnelle)
Ajoutez des paramètres de réglage supplémentaires au fichier de configuration sysctl. Exécutez nano /etc/sysctl.conf et ajoutez :
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 2000000
Explication :
net.core.somaxconn– longueur maximale de la file d'attente d'écoute pour les applications.net.core.netdev_max_backlog– nombre maximum de paquets en file d'attente sur le côté entrée avant traitement.net.ipv4.tcp_max_tw_buckets– nombre maximum de sockets TIME-WAIT. Cette option est pertinente pour les serveurs avec une charge élevée et suffisamment de RAM.
Ces paramètres améliorent les performances sous un trafic intense.
Appliquez les modifications :
sudo sysctl -p
Liste de vérification de la vérification
sysctl -ps'exécute sans erreurstcp_syncookiesest égal à 1- Le compteur
SyncookiesSentaugmente pendant l'attaque - Le serveur reste réactif
- Aucun avertissement du noyau dans les journaux :
dmesg | grep -i syn
Rétablir les modifications
Restaurez la configuration d'origine :
sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf
sudo sysctl -p
Résultat : Le système revient aux paramètres du noyau d'origine.
Optionnellement, supprimez les outils de test :
sudo apt remove hping3 -y
Dépannage
Les cookies SYN n'augmentent pas
Vérifiez : sysctl net.ipv4.tcp_syncookies
Si la valeur est 0, réappliquez la configuration.
Le serveur abandonne toujours les connexions
Augmentez le backlog : net.ipv4.tcp_max_syn_backlog = 8192
Puis appliquez les modifications :
sudo sysctl -p
Conclusion
Vous avez renforcé le noyau Linux en utilisant sysctl.conf, activé les mécanismes de protection contre les inondations SYN, optimisé le comportement de la pile TCP et vérifié les protections par une simulation d'attaque contrôlée. Ces modifications améliorent la résilience contre les attaques par inondation SYN et augmentent la stabilité globale du réseau.
Étapes suivantes
- Combinez avec une limitation de débit de pare-feu (iptables ou nftables)
- Implémentez des limites de suivi des connexions
- Déployez des systèmes de détection d'intrusion (IDS)
- Surveillez les métriques à l'aide de Prometheus et Grafana