Sur mes serveurs, j’ai des protections dont fail2ban. C’est très efficace comme lors d’une campagne de spam décrite dans cet article, mais de par son mode de fonctionnement, il intervient âpres le debut de l’attaque. Et la, ça fait plus d’un mois qu’un de mes serveurs subit une attaque sur le port ssh. Fail2banb se débrouille très bien mais ça rempli sa base d’ip pourrie et c’est apres coup (plus de 3000 ip bloquées). Et ça bouffe de la mémoire inutilement...
Et je suis tombé sur cet article : Data-Shield - La blocklist qui vire les IPs pourries. Pile ce qu’il me faut !!!
Bon, y a pas de script pour gérer tout ça, je vais m’y mettre, ça me fera apprendre la manipulation de iptables...
Je lance mon premier test de près de 80000 adresses sur mon PC (16Go de RAM) : ça marche, ça charge rapidement en plus. Je teste sur mes Raspberry et la, c’est le drame : ça commence à ralentir vers 20000 entrées et ça bloque le Raspberry vers 40000 ...
Iptables n’est pas taillé pour ça ...
Je suis dépité mais pas vaincu : je découvre la commande ipset. Cette commande gère des liste d’ip/network et travaille avec iptables. Une seul regle à ajouter à iptables pour lui dire de DROP les ip contenues dans une liste ipset et à charger ipset.
Je tente le coup et raté, y a une limite écrite en dur pour ne pas dépasser 65535 adresses ... Pas grave, je crée 3 listes pour avoir de la marge et je retente : ça marche que mon PC et surtout, ça marche sur les Raspberry !!! Youpi !!!
On verra avec le temps si ça aide fail2ban ...
Le script fonctionne comme suit :
Tout ça géré en cron, tous les jours et à voir peut être toutes heures ...
Une protection de plus ...
Et au passage, parce que c’est possible, passage de fail2ban en ipset, pour gagner de la performance !!!