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.
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.