Je pense avoir trouvé une solution via cet article et IPSet semble être la réponse
En somme:
Si un ensemble d'adresses IP contient des milliers d'éléments, les performances d'iptables diminuent (en fait, les performances de netfilter, dès que iptables n'est qu'un outil pour gérer le pare-feu). Votre charge CPU peut également augmenter. Heureusement, il existe une solution parfaite - ipsets
IPSet est l'outil parfait si vous souhaitez:
- Stockez plusieurs adresses IP ou numéros de port et comparez-les à la collection par iptables d'un seul coup;
- Mettez à jour dynamiquement les règles iptables par rapport aux adresses IP ou aux ports sans perte de performances;
- Exprimez des ensembles de règles complexes basés sur des adresses IP et des ports avec une seule règle iptables et profitez de la vitesse des ensembles IP
L'installation de l'ipset est simple sudo apt-get install ipset
Exécutez ensuite ce qui suit
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Ajoutez-le à votre chaîne iptables. Cela peut varier en fonction des paramètres de votre pare-feu. Ici, nous utilisons la chaîne éthine.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Vous pouvez maintenant ajouter toutes les mauvaises IP à votre ipset. Par exemple, vous avez un fichier texte appelé bots.txt avec une adresse IP par ligne. Vous pouvez donc les ajouter à l'ipset en utilisant un simple script bash:
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
Pour vérifier l'exécution:
ipset -L autoban