Eu me deparei com uma situação em que um cliente precisa colocar na lista negra um conjunto de pouco menos de 1 milhão de endereços IP individuais (sem sub-redes), e o desempenho da rede é uma preocupação. Embora eu conjecture que as regras do IPTables teriam menos impacto no desempenho do que as rotas, isso é apenas conjectura.
Alguém tem alguma evidência sólida ou outra justificativa para favorecer o IPTables ou o roteamento nulo como solução para colocar listas longas de endereços IP na lista negra? Nesse caso, tudo é automatizado, portanto, a facilidade de uso não é realmente uma preocupação.
EDIT 26-Nov-11
Após alguns testes e desenvolvimento, parece que nenhuma dessas opções é viável. Parece que as pesquisas de rota e as tabelas de ip fazem pesquisas lineares no conjunto de regras e demoram muito tempo para processar essas muitas regras. No hardware moderno, colocar 1 milhão de itens em uma lista negra do iptables reduz o servidor para cerca de 2 dúzias de pacotes por segundo. Portanto, IPTables e rotas nulas estão fora.
ipset, como recomendado por Jimmy Hedman, seria ótimo, exceto que ele não permite que você rastreie mais de 65536 endereços em um conjunto, por isso não posso nem tentar usá-lo, a menos que alguém tenha alguma idéia.
Aparentemente, a única solução para bloquear tantos IPs é fazer uma pesquisa indexada na camada de aplicação. Não é assim?
Mais Informações:
O caso de uso nesta instância está impedindo que uma lista de endereços IP "ofensores conhecidos" acesse o conteúdo estático em um servidor da web. FWIW, fazer o bloqueio através do Apache Deny fromé igualmente lento (se não mais), como também faz uma varredura linear.
FYI: A solução final de trabalho foi usar o mod_rewrite do apache em conjunto com um mapa de banco de dados de berkeley para fazer pesquisas na lista negra. A natureza indexada dos bancos de dados de berkeley permitiu que a lista fosse dimensionada com o desempenho de O (log N).