até onde eu entendi, a questão não é onde obter a lista de endereços IP que precisam ser bloqueados, mas sim como bloqueá-los com iptables eficientemente. Um script que execute uma série de comandos "iptables -A" levará muito tempo para carregar regras e, durante esse tempo, o firewall será executado com uma política inconsistente. Isso também tem impacto significativo em seu desempenho.
Sugiro que você tente o módulo ipset ( link ). Ele permite que você manipule tabelas de blocos de endereço diretamente, você só precisa de uma regra iptables para combinar com o conjunto inteiro. Você precisará experimentar diferentes tipos de conjuntos para encontrar o que pode acomodar o número de blocos de endereços IP que você precisa bloquear e fornecer o desempenho necessário. Em qualquer caso, é muito melhor em combinar longas listas de blocos de endereços e permite recarregá-lo usando a ferramenta de linha de comando sem tocar nas regras.
Note que nem todas as distribuições do Linux incluem ipsets em sua configuração padrão, então você pode precisar recompilar módulos do kernel e iptables.
Os blocos de endereços de países mudam de tempos em tempos, portanto, você precisa atualizar seu conjunto de endereços periodicamente. Para recarregar o conjunto que já está sendo usado, você pode usar a ferramenta de linha de comando "ipset" e é fácil envolvê-lo em um script de shell para automatizar o processo. Ou você poderia usar o fwbuilder para gerar sua política de iptables e usar o script que ela gera para gerenciar o ipset também ( link , veja" 5.2.13.1. Utilizando Tabelas de Endereços Objetos com conjuntos de IPs iptables "neste capítulo)