Accueil > Réseau, Sécurité > Contrer une attaque DDoS de type SYN flood sous Linux

Contrer une attaque DDoS de type SYN flood sous Linux

06/11/2015 Categories: Réseau, Sécurité Tags: , , ,

Source: Tux-planet 

Une attaque par déni de services SYN flood est une technique visant à saturer un serveur en envoyant une multitude de paquets TCP, avec le flag SYN. Les connexions sont alors établies vers la machine, mais restent à moitié ouvertes, car le client malveillant (hacker) ne renvoie pas de confirmation (ACK).

Le serveur attend pendant un certain délai la réponse et la connexion semi-ouverte consomme alors un certain nombre de ressources. En multipliant ce type de connexions, le hacker peut arriver à créer un déni de service qui rendra la machine inopérante.

1. Détection d’une l’attaque DDoS SYN flood

Pour détecter la présence de l’attaque, il faut utiliser la commande netstat et repérer la présence des connexions de type SYN_RECV. Si il y a beaucoup de réponses, c’est qu’une attaque est sans doute en cours :

# netstat -an | grep SYN_RECV
 tcp 0 0 10.xxx.xxx.xxx 237.177.154.8:25882 SYN_RECV -
 tcp 0 0 10.xxx.xxx.xxx 236.15.133.204:2577 SYN_RECV -
 tcp 0 0 10.xxx.xxx.xxx 127.160.6.129:51748 SYN_RECV -
 tcp 0 0 10.xxx.xxx.xxx 230.220.13.25:47393 SYN_RECV -

Voici une autre commande, un peu plus sophistiquée, qui donnera de meilleures résultats quant à la détection d’une attaque DDoS :

for i in ` netstat -tanpu | grep "SYN_RECV" | awk {'print $5'} | cut -f 1 -d ":" | sort | uniq -c | sort -n | awk {'if ($1 > 3) print $2'}` ; do echo $i; done

2. Contrer une attaque DDoS SYN flood

La dernière commande renvoie plusieurs dizaines de résultats. L’attaque par SYN flood est donc confirmée. Pour la contrer une solution consiste à modifier quelques paramètres du noyau Linux à chaud. Voici les commandes à utiliser en root uniquement :

echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

Quelques explications :

  • La première ligne fait en sorte que la machine ne garde pas en mémoire les demandes de connexion semi-ouverte tant qu’elle n’a pas reçu la confirmation ACK
  • La deuxième commande positionne à 1024 le nombre maximum de SYN_WAIT
  • Enfin, la variable rp_filter permet de vérifier qu’un paquet arrive bien par l’interface sur laquelle il devrait arriver

Il est possible de paramétrer ses valeurs de façon permanente en modifiant le fichier /etc/sysctl.conf :

# Protection SYN flood
 net.ipv4.tcp_syncookies = 1
 net.ipv4.conf.all.rp_filter = 1
 net.ipv4.tcp_max_syn_backlog = 1024

On pourra ensuite recharger la configuration avec la commande :

sysctl -p /etc/sysctl.conf

Enfin, voici une autre commande qui permet d’utiliser iptables pour bloquer automatiquement toutes les adresses IP qui font du Syn Flood.

for i in ` netstat -tanpu | grep "SYN_RECV" | awk {'print $5'} | cut -f 1 -d ":" | sort | uniq -c | sort -n | awk {'if ($1 > 3) print $2'}` ; do echo $i; iptables -A INPUT -s $i/24 -j DROP; done

On pourra par exemple la mettre en crontab le temps que l’attaque passe…

Note : un grand merci à Korben et Stagueve pour avoir subi cette attaque sur leurs serveurs dédiés pendant toute la journée. Cela nous a fait un peu d’animation sur Twitter et m’a donné de l’inspiration pour écrire ce soir.

Print Friendly, PDF & Email

Related Post

Categories: Réseau, Sécurité Tags: , , ,
Les commentaires sont fermés.