Je pense avoir trouvé une solution via cet article et IPSet semble être la réponse.
En résumé :
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 lors qu'iptables n'est qu'un outil de gestion de pare-feu). La charge de votre CPU peut également augmenter. Heureusement, il existe une solution parfaite : les ipsets.
IPSet est l'outil idéal si vous souhaitez le faire :
- Enregistrez plusieurs adresses IP ou numéros de port et comparez-les à la base de données collection par iptables en un seul coup ;
- Mise à jour dynamique d'iptables par rapport aux adresses IP ou aux ports sans perte de performance ;
- Exprimez des ensembles de règles complexes basées sur les adresses IP et les ports avec une seule règle iptables. iptables et bénéficiez de la rapidité des jeux d'adresses IP.
L'installation d'ipset est simple sudo apt-get install ipset
Ensuite, exécutez ce qui suit
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Ajoutez-le à votre chaîne iptables. Elle peut être différente selon les paramètres de votre pare-feu. Ici, nous utilisons la chaîne ethin.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Maintenant vous pouvez ajouter toutes les mauvaises IP à votre ipset. Par exemple, vous avez un fichier texte appelé bots.txt avec une IP par ligne. Donc vous pouvez les ajouter à ipset en utilisant un simple bash script :
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
Pour vérifier l'exécution :
ipset -L autoban