¿Cuántas instrucciones pueden introducirse en iptables sin perder la cordura del sistema?

9

Digamos que uno desea tener una lista de direcciones IP bloqueadas.

He visto el siguiente script de ejemplo:

BLOCKDB="/path/to/ip.blocked.file"
# omit comments lines
IPS=$(grep -Ev "^#" $BLOCKDB)
for i in $IPS
do
    iptables -A INPUT -s $i -j DROP
    iptables -A OUTPUT -d $i -j DROP
done

¿Son varios miles de líneas, que se transforman en varios miles de entradas de iptables, cuerdo?

¿Cuál es el límite superior, más allá del cual, la eficiencia del sistema se verá significativamente afectada?

Tzury Bar Yochay
fuente
2
Parece que encontraste la respuesta a tu pregunta. Si es así, debe mover la respuesta fuera de su pregunta y usar el botón "Responder su pregunta" y publicar la respuesta allí. Luego, puede aceptar su respuesta y las cosas estarán mucho más organizadas.
Scott Severance el
@ScottSeverance hecho como usted sugiere, sin embargo, toma 4 horas hasta que uno puede aceptar la auto respuesta.
Tzury Bar Yochay

Respuestas:

8

Creo que he encontrado una solución a través de este artículo y IPSet parece ser la respuesta

En suma:

Si un conjunto de direcciones IP contiene miles de elementos, el rendimiento de iptables disminuye (en realidad, el rendimiento de netfilter, tan pronto como iptables es solo una herramienta para administrar el firewall). Su carga de CPU también puede aumentar. Afortunadamente hay una solución perfecta - ipsets

IPSet es la herramienta perfecta si quieres:

  • Almacene múltiples direcciones IP o números de puerto y compárelos contra la colección mediante iptables de una sola vez;
  • Actualice dinámicamente las reglas de iptables contra direcciones IP o puertos sin penalización de rendimiento;
  • Exprese direcciones de IP complejas y conjuntos de reglas basados ​​en puertos con una sola regla de iptables y aproveche la velocidad de los conjuntos de IP

Instalar ipset es sencillo sudo apt-get install ipset

Luego ejecuta lo siguiente

ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50

Agréguelo a su cadena de iptables. Puede diferir según la configuración de su firewall. Aquí usamos la cadena de etina.

iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP

Ahora puede agregar todas las IP incorrectas a su conjunto de ip Por ejemplo, tiene un archivo de texto llamado bots.txt con una IP por línea. Para que pueda agregarlos a ipset usando un script bash simple:

for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done

Para comprobar ejecutar:

ipset -L autoban
Tzury Bar Yochay
fuente
gracias por la respuesta. Aquí hay un tutorial rápido en ipset para aquellos que no están familiarizados con ipset (como yo 8-) - linuxjournal.com/content/advanced-firewall-configurations-ipset
Tzunghsing David Wong