PDA

View Full Version : Iptables: Limitando tráfico entrante.


Mistico
17-03-2009, 01:08 PM
A ver, vamos a ver si revive esto...
Algo cortito pero que no todos conocen, el módulo limit de iptables.
Cuando metemos reglas de filtrado (en la tabla filter) generalmente generan dos estados, aceptan paquetes o no aceptan. Esto está bien, pero se puede lograr una mejor performance y seguridad utilizando el módulo limit.
Básicamente lo que le dice al sistema es que acepte paquetes hasta un número determinado, pasado ese número los descarta. Con esto logramos impedir ataques de tipo DOS o bruteforce, por ejemplo a SSH o cualquier sistema de login remoto.
Funciona de la siguiente manera:


/sbin/iptables -A INPUT -p tcp --dport 22 -m limit --limit 1/s -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP
Eso estaría diciendo que acepte un paquete por segundo, pero hay otra cosa, la ráfaga de paquetes que por defecto es 5, entonces el funcionamiento completo de la regla anterior sería:

Aceptar como máximo 5 paquetes (ráfaga) en 1 segundo, pasado esos 5 paquetes la regla no coincide más, por lo tanto matchea con la de abajo y el paquete es dropeado.
Después de la llegada de esos 5 paquetes, por cada segundo que pase se restablece un paquete más para la ráfaga (--limit 1/s), de manera que a los 5 segundos vamos a estar en condiciones de recibir nuevamente 5.
En otras palabras, el sistema va a aceptar tantos paquetes como la ráfaga indique y en el tiempo indicado por limit, luego de esto se van restableciendo los paquetes también como indica limit, en el ejemplo sería 1 por segundo.
Para establecer el limit burst o ráfaga inicial se utiliza --limit-burst.

Vamos con otro ejemplo:

/sbin/iptables -A INPUT -p tcp --dport 22 -m limit --limit 1/s --limit-burst 3 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP
En este caso seteamos la ráfaga inicial en 3, entonces recibiría como máximo 3 paquetes por segundo y estaría apto para recibir los 3 nuevamente pasados 3 segundos. Cabe aclarar que después de 1 segundo podemos recibir un paquete, después de 2 segundos dos paquetes y así, pero si a los 2 segundos recibimos 2, estamos volviendo de nuevo a 0 (gastando los "slots" que se habían llenado).
La mejor forma de entenderlo es seteando las reglas cada uno y comprobarlo tirando tráfico con algún programa, pero para que sea visible es conveniente setear limit en 1 por minuto, el limit burst es opcional y pueden ir jugando con los valores.

Saludos.

Cannibal
17-03-2009, 01:14 PM
:eek: y este concepto va aplicado a algo en especial...??
(osea... me perdi de algo...? :confused: )

Mistico
17-03-2009, 01:19 PM
A firewalls. Fijate que hablo de limitar o denegar tráfico.

rhpsystems
17-03-2009, 01:39 PM
:eek: y este concepto va aplicado a algo en especial...??
(osea... me perdi de algo...? :confused: )

Por supuesto, si tenés que manejar firewalls/routers en Linux te vas a dar cuenta de que es el concepto central.

Excelente info técnica Mistico, y es cierto que limit no e suna parámetro muy conocido y utilizado en iptables. La explicación que diste está muy bien y vale la pena hacer las pruebas. Es más, ahora voy a volver a meterle mano de nuevo al little server que uso como firewall.

Saludos

Mistico
17-03-2009, 05:24 PM
Sí, la verdad que hay muchos módulos que no se tienen en cuenta y son útiles. Hace un tiempo hice un tutorial de iptables desde 0 con todos los módulos y sus explicaciones. Si lo encuentro lo posteo.