Protection DDos et ban de masse

Plop …
J’ai eu droit à ma première intervention sur serveur DDosé, au départ 2/3 machines qui envoyaient des paquets SYN en boucle sur un serveur minecraft (écrit en java donc avec 200 SYN/sec le serveur tombe), et à la fin c’est environ 150 machines qui se sont relayés pour Dosé.

La plupart du temps lorsque l’on recherche des protections DDos on trouve des sites qui recommandent de mettre direct un limit sur un port sans tenir compte de la source … ce qui peut se révéler utile sur des petits serveurs, mais pas lorsque l’on tourne à plusieurs centaines de connexion seconde.


La sécurisation de base est très simple, il « suffit » de limiter le nombre de syn sur le port particulier du service, ici le 25565, mais dans le cas des serveurs de jeux, il peut arriver que l’on dépasse le nombre de SYN (genre lors d’une deco/timeout), donc côté firewall ça donne ce genre de règle :

/sbin/iptables -N syn-flood
/sbin/iptables -A INPUT -p tcp --syn --dport 25565 -m connlimit --connlimit-above 1 -j syn-flood
/sbin/iptables -A syn-flood -m limit --limit 2/s --limit-burst 5 -j RETURN
/sbin/iptables -A syn-flood -j LOG --log-prefix "SYN-FLOOD "
/sbin/iptables -A syn-flood -j DROP

Pour les explications :
Si il y a plusieurs paquets TCP SYN sur le port 25565 provenant d’une même IP on lui applique la règle « syn-flood ».
Tant qu’il y a moins de 2 syn/seconde, avec un burst à 5 syn on laisse passer, sinon, on LOG le paquet (histoire d’avoir une trace de l’ip) et on drop.

Le problème c’est que si l’on subit une attaque soutenu, le firewall va bosser en continu à checker les règles, mais comme on a log l’ip, on peut y mettre une règle avec OSSEC et mettre un ban permanent.

La règle de base à rajouter dans rules/local_rules.xml :

  
    4100
    SYN-FLOOD
    SYN Flood Attempt
  

Qui aura pour effet de bannir pour un certain temps (par défaut 6 minutes) l’ip incriminée.

Génial, mais comme c’était du flood continu, une fois les 6 minutes passé, le flood continuait, et comme le flood se faisait avec 150 machines, le serveur était inondé en continu, malgré les règles iptables.

Donc on peut reprendre, mes règles de ban définitif et les appliquer ici.

Donc on rajoute dans local_rules.xml

  
    100034
    
    Multiple SYN Flood Attempt
  

Et on modifie /etc/ossec.conf en ajoutant l’id 100035 dans « l’active response » du « deny-for-life » de mon autre article (dans mon cas j’ai réécrit la règle pour utiliser le firewall) et boum … après 4 heures avec ces règles un coup de :

iptables -L FORWARD -n|wc -l

Retourne 150 ip bannit et plus de SYN sur le port 25565 … victoire !! Par contre :

iptables -L -v -n

Montre que le firewall drop toujours encore des paquets sur les ip banni … l’attaque est toujours en cours, mais semble endiguée \o/.

3 réflexions sur « Protection DDos et ban de masse »

  1. Et lorsque les attaquants utilisent des adresses IP sources forgées aléatoirement pour le SYN flood ? Difficile à contourner.

  2. Heureusement pour moi, ce n’était pas le cas, mais en plus ça pourrait avoir un effet de bord : genre forger des paquets SYN avec les ip de google pour bloquer le référencement d’un site, …

Les commentaires sont fermés.