Penso di aver trovato una soluzione tramite questo articolo e IPSet sembra essere la risposta
In sintesi:
Se un set di indirizzi IP contiene migliaia di elementi, le prestazioni di iptables diminuiscono (in realtà, le prestazioni di netfilter, non appena iptables è solo uno strumento per la gestione del firewall). Anche il carico della CPU può aumentare. Fortunatamente esiste una soluzione perfetta: ipset
IPSet è lo strumento perfetto se vuoi:
- Memorizza più indirizzi IP o numeri di porta e confronta con la raccolta di iptables in un colpo solo;
- Aggiorna dinamicamente le regole di iptables contro indirizzi IP o porte senza penalità di prestazione;
- Esprimete indirizzi IP complessi e set di regole basati su porte con un'unica regola iptables e beneficiate della velocità dei set IP
L'installazione di ipset è semplice sudo apt-get install ipset
Quindi eseguire il seguente
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Aggiungilo alla tua catena iptables. Può differire a seconda delle impostazioni del firewall. Qui usiamo la catena etinica.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Ora puoi aggiungere tutti i cattivi IP al tuo ipset. Ad esempio, hai un file di testo chiamato bots.txt con un IP per riga. Quindi puoi aggiungerli a ipset usando un semplice script bash:
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
Per controllare l'esecuzione:
ipset -L autoban