Filtre anti-DDoS générique
On le sait tous, le DDoS c’est une plaie ! Il y a en même temps mille et aucune manière de s’en prémunir réellement, sauf à ne pas être connecté à internet… facile à dire.
On a déjà vu que Fail2Ban apporte quelques solutions contre ce type d’attaque, mais ce n’est pas forcément suffisant. Je vous propose donc ici une configuration de iptables qui tachera de filtrer et de bloquer les DDoS.
#!/bin/bash
MAXHIT=30
BURST=40
# créé une nouvelle chaine iptables
iptables -N seuil
# definir les limites de trafic au delà desquelles on vire les paquets
# vérifie que le paquet entre dans les limites et l'accepte
# puis stocke l'ip dans une table de hash pendant 1mn pour comparaison ultérieure
iptables -A seuilattaque -m hashlimit \
--hashlimit-name seuil \
--hashlimit-upto $MAXHIT/minute \
--hashlimit-mode srcip \
--hashlimit-burst $BURST \
--hashlimit-htable-expire 60000 \
-j ACCEPT
# si le paquet est hors limite, il est dropé
iptables -A seuil -j DROP
# passer tout le trafic dans le chaine seuil
iptables -A INPUT -p tcp --dport 80 -j seuilIl ne vous reste plus ensuite qu’à lancer ce script au démarrage en renseignant son path dans /etc/rc.local. Et n’oubliez pas de le rendre exécutable ;)
Commentaires
MagiCrazy dit –
Super intéressant, je ne connaissais pas les hashlimit d'iptables, je pense que je vais y jeter un oeil pour le coup =) Ca reste pas évident à doser le seuil au-delà duquel on jette tout le monde. Un petit peu de tweaking pour renvoyer sur une page statique, quelque part, indiquant que le serveur est surchargé ? :)
Buzut dit –
c'est pas bien facile de doser tout ça ! J'avais vu l'astuce dans je ne sais plus quel magazine, et j'avais trouvé bien intéressant. Mais il faudrait que je regarde tout cela de plus près aussi.
Après un tweak pour faire ce que tu dis… hum, à part un truc pas bien propre via un petit script bash et un cron qui pourrait aller modifier ton .htaccess, je ne vois pas trop.
MagiCrazy dit –
De mémoire, il est possible de rediriger la demande d'iptables vers, une autre machine par exemple. Mais peut-être que ça n'empêchera pas le DDoS, sur la machine cible, ou celle vers laquelle on redirige la demande. C'était juste une idée, peut-être idiote :)
Buzut dit –
je ne savais pas du tout que l'on pouvait faire cela ! Pour être fixé, rien ne vaudrait un petit test maison ;)
azertyker dit –
Hello, Merci pour ton blog, il m'a aidé sur bien des choses. Je pense que je te dois au moins une binouz quand je vois le nombre de bras cassé de l'école 42 avec qui j'ai bossé et qui étaient même pas capable de livrer une conf apache correct.
Sinon je pense qu'il y a une ou 2 erreurs si je ne me trompe pas. Pour: iptables -A INPUT -p -tcp --dport 80 -j seuil je pense qu'il y a un tiret en top à tcp, ce qui devrait donner: iptables -A INPUT -p tcp --dport 80 -j seuil Pour: iptables -A seuilattaque en debut de commande, cela devrait etre remplacer par: iptables -A seuil
/!\ PS: Ne tenez compte de me remarque qu’après validation par un modo /!\
Rejoignez la discussion !