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 contém milhares de itens, o desempenho do iptables diminui (na verdade, o desempenho do netfilter, assim que o iptables é apenas uma ferramenta para gerenciar o firewall). Sua carga de CPU também pode aumentar. Felizmente, existe uma solução perfeita - ipsets
O IPSet é a ferramenta perfeita se você deseja:
- Armazene vários endereços IP ou números de porta e combine com a coleção por iptables de uma só vez;
- Atualize dinamicamente as regras do iptables em endereços IP ou portas sem penalização de desempenho;
- Expresse conjuntos de regras complexos baseados em endereço IP e portas com uma única regra de tabelas de ip e se beneficie da velocidade dos conjuntos de IP
A instalação do ipset é simples sudo apt-get install ipset
Em seguida, execute o seguinte
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Adicione-o à sua cadeia de iptables. Pode variar dependendo das configurações do firewall. Aqui usamos cadeia de etina.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Agora você pode adicionar todos os IPs ruins ao seu ipset. Por exemplo, você tem um arquivo de texto chamado bots.txt com um IP por linha. Portanto, 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