Creo que he encontrado una solución a través de este artículo y IPSet parece ser la respuesta
En suma:
Si un conjunto de direcciones IP contiene miles de elementos, el rendimiento de iptables disminuye (en realidad, el rendimiento de netfilter, tan pronto como iptables es solo una herramienta para administrar el firewall). Su carga de CPU también puede aumentar. Afortunadamente hay una solución perfecta - ipsets
IPSet es la herramienta perfecta si quieres:
- Almacene múltiples direcciones IP o números de puerto y compárelos contra la colección mediante iptables de una sola vez;
- Actualice dinámicamente las reglas de iptables contra direcciones IP o puertos sin penalización de rendimiento;
- Exprese direcciones de IP complejas y conjuntos de reglas basados en puertos con una sola regla de iptables y aproveche la velocidad de los conjuntos de IP
Instalar ipset es sencillo sudo apt-get install ipset
Luego ejecuta lo siguiente
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Agréguelo a su cadena de iptables. Puede diferir según la configuración de su firewall. Aquí usamos la cadena de etina.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Ahora puede agregar todas las IP incorrectas a su conjunto de ip Por ejemplo, tiene un archivo de texto llamado bots.txt con una IP por línea. Para que pueda agregarlos a ipset usando un script bash simple:
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
Para comprobar ejecutar:
ipset -L autoban