Me he encontrado con una situación en la que un cliente necesita incluir en la lista negra un conjunto de poco menos de 1 millón de direcciones IP individuales (sin subredes), y el rendimiento de la red es una preocupación. Si bien conjeturaría que las reglas de IPTables tendrían un menor impacto en el rendimiento que las rutas, eso es solo una conjetura.
¿Alguien tiene alguna evidencia sólida u otra justificación para favorecer las tablas IP o el enrutamiento nulo como solución para poner en una lista negra largas listas de direcciones IP? En este caso, todo está automatizado, por lo que la facilidad de uso no es realmente una preocupación.
EDITAR 26-nov-11
Después de algunas pruebas y desarrollo, parece que ninguna de estas opciones es viable. Parece que tanto las búsquedas de ruta como las iptables realizan búsquedas lineales a través del conjunto de reglas y tardan demasiado tiempo en procesar tantas reglas. En el hardware moderno, poner elementos de 1M en una lista negra de iptables ralentiza el servidor a aproximadamente 2 docenas de paquetes por segundo. Entonces, las tablas IP y las rutas nulas están fuera.
ipset
, según lo recomendado por Jimmy Hedman, sería genial, excepto que no le permite rastrear más de 65536 direcciones en un conjunto, por lo que ni siquiera puedo tratar de usarlo a menos que alguien tenga alguna idea.
Aparentemente, la única solución para bloquear esta cantidad de IP es realizar una búsqueda indexada en la capa de aplicación. ¿No es así?
Más información:
El caso de uso en este caso es bloquear una lista de "delincuentes conocidos" de direcciones IP para que no accedan al contenido estático en un servidor web. FWIW, hacer el bloqueo a través de Apache Deny from
es igualmente lento (si no más) ya que también hace un escaneo lineal.
FYI: La solución de trabajo final fue usar mod_rewrite de apache junto con un mapa de Berkeley DB para realizar búsquedas en la lista negra. La naturaleza indexada de las bases de datos de Berkeley permitió que la lista escalara con el rendimiento O (log N).