Acho que encontrei uma solução através deste artigo e o IPSet parece ser a resposta
Em suma:
Se o conjunto de endereços IP contiver milhares de itens, o desempenho do iptables diminuirá (na verdade, o desempenho do netfilter, assim que o iptables for apenas uma ferramenta para gerenciar o firewall). Sua carga de CPU pode aumentar também. Felizmente, há uma solução perfeita - ipsets
O IPSet é a ferramenta perfeita se você quiser:
- Armazene vários endereços IP ou números de portas e compare com o coleção pelo iptables de uma só vez;
- Atualize dinamicamente o iptables regras contra endereços IP ou portas sem penalidade de desempenho;
- Expresse conjuntos de regras de endereço IP e portas complexas com um único iptables regem e se beneficiam da velocidade dos conjuntos de IPs
A instalação do ipset é direta sudo apt-get install ipset
Em seguida, execute o seguinte
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Adicione à sua cadeia de iptables. Pode diferir dependendo das configurações do seu firewall. Aqui nós usamos a cadeia ethin.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Agora você pode adicionar todo o IP incorreto ao seu ipset. Por exemplo, você tem um arquivo de texto chamado bots.txt com um IP por linha. Então você pode adicioná-los ao ipset usando o script bash simples:
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
Para verificar a execução:
ipset -L autoban