Contrer une attaque DDOS de type SYN flood sous Linux


XSS Cross site scripting
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 :

# netstat -an | grep SYN
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 -

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


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.

Autres articles du même sujet


15 Commentaires pour "Contrer une attaque DDOS de type SYN flood sous Linux"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    En fait avec Korben on avait décidé de s'auto flooder toute la journée histoire de t'inspirer, mission réussie ^^

    Merci pour ces explications, j'ai du pain sur la planche! ^^

    ReplyRépondre
    Stagueve , le 13 Mai 2009 à 20:12
  •  

    @Stagueve : mort de rire !

    ReplyRépondre
    pti-seb , le 13 Mai 2009 à 20:18
  •  

    Merci pour ces précieux conseils...

    Je m'en vais de ce pas contrôler la config de mes différents serveurs...

    ReplyRépondre
    Boloms , le 13 Mai 2009 à 21:00
  •  

    Encore merci de ton aide en tt cas...

    ReplyRépondre
    Korben , le 13 Mai 2009 à 21:01
  •  

    @Boloms : ouais en cette période il vaut mieux faire attention visiblement.

    @Korben : de rien l'ami.

    ReplyRépondre
    pti-seb , le 13 Mai 2009 à 21:50
  •  

    C'est sympa de voir la bonne ambiance et l'entraide régner entre blogeur !
    Et puis très instructif ce pitit tuto !!

    ReplyRépondre
    Nshoky , le 14 Mai 2009 à 10:24
  •  

    Bien le bonjour,
    Un moyen simple et efficace pour se protéger des attaques du web est de mettre en place mod-security
    En plus l'interface web (non-opensource), mais tolérant la supervision de 3 machines gratuitement tout de même est vraiment bien faite est permet de gérer les faux positifs et avoir des stats sur ses attaques ;)
    En tous cas merci pour le tuto ;)

    ReplyRépondre
    pydubreucq , le 14 Mai 2009 à 11:16
  •  

    Petit coquille au niveau du fichier sysctl.conf c'est:
    net.ipv4.tcp_max_syn_backlog = 1024

    et pas:
    net.ipv4.tcp_max_syn_backlog = 102

    Sinon rien à dire c'est du bon boulot réactif :)

    ReplyRépondre
    Nicolargo , le 14 Mai 2009 à 12:30
  •  

    @Nicolargo : j'ai corrigé.

    ReplyRépondre
    pti-seb , le 14 Mai 2009 à 13:40
  •  

    Super conseil je note ces commandes.
    Par contre la machine reste évidemment toujours victime possible du SYN flood, ce serait intéressant de savoir à quel point ca réduit sa vulnérabilité. Vous avez pensé faire des tests ?

    ReplyRépondre
    Etienne , le 17 Mai 2009 à 15:24
  •  

    @Etienne : oui la machine reste sous le coup de l'attaque mais c'est limitée. Pour contrer complètement le DDOS, à part changer d'adresse IP, je ne vois pas trop comment faire.

    ReplyRépondre
    pti-seb , le 17 Mai 2009 à 15:32
  •  

    Je pense pas qu'il y ait encore de moyen de bloquer complètement une attaque DOS, mais ce serait intéressant de chiffrer à quel point ca réduit l'ampleur de l'attaque. Une idée ? Votre machine résiste à combien de SYN par seconde ?

    ReplyRépondre
    Etienne , le 1 Juin 2009 à 15:49
  •  

    Bonjour à tous,

    Je rencontre un problème lorsque j'essaye d'appliquer cette commande "sysctl -p /etc/sysctl.conf":

    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    error: "kernel.sysrq" is an unknown key
    kernel.core_uses_pid = 1
    net.ipv4.tcp_syncookies = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 4294967295
    kernel.shmall = 268435456
    net.ipv4.tcp_syncookies = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.tcp_max_syn_backlog = 1024

    À votre avis l'error mentionnée risque d'affection quelque chose au serveur ?

    Merci pour cet excellent article ;-)

    ReplyRépondre
    lo0w , le 15 Juin 2009 à 02:07
  •  

    @lo0w : d'après ton commentaire l'erreur est "error: "kernel.sysrq" is an unknown key". A première vue, sysrq désigne le système qui permet de débloquer Linux avec des touches spéciales. Tu trouveras des infos là dessus ici.

    Sysrq est par défaut désactivé sur les systèmes Linux. Personnellement je pense que cette erreur n'est pas grâve, au pire elle n'a aucun lien avec les attaques DDOS cité ici.

    Normalement la bonne syntaxe est :

    kernel.sysrq = 1

    Si cela ne marche pas, tu peux soit ignorer le message, soit mettre la ligne en commentaire ...

    ReplyRépondre
    pti-seb , le 16 Juin 2009 à 00:23
  •  

    Merci pour ces précieux conseils !

    ReplyRépondre
    ireo , le 18 Juin 2009 à 12:30
 

Ajouter un commentaire

actualité apache apple astuce astuces bash bilboblog blog boot buzz chrome clavier commande commandes conky crack date debian Desktop développement exploit fedora firefox flash ftp gimp Gnome google graphique Graphisme hack hacking Hardware http intel internet iphone jackalope jailbreak jaunty jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette microblog microsoft mini-blog mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet plugins publicité redhat red hat restauration rpm réseau samba sauvegarde screenshot script serveurs shell sql ssh system Sécurite tux-planet twitter ubuntu vidéo vidéos vlc wallpaper windows wordpress yum