Después de investigaciones aquí en el foro sobre reglas de cómo controlar la cantidad de conexiones abiertas, llegué a un conjunto de reglas que hoy las utilizo y con plena funcionalidad.
Esas reglas están proyectadas para controlar conexiones P2P, o sea el cliente puede abrir centenares de conexiones HTTP, SMTP, DNS, POP3 (todas debajo del 1024).
En la opción “Configuración Avanzada de Firewall” seleccione “Editar Reglas Personalizadas” y coloque en el final:
# limite de conexões
iptables -t mangle -F CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
iptables -t mangle -X CONNLIMIT
iptables -t mangle -N CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
iptables -t mangle -A CONNLIMIT -p TCP -m state ! --state RELATED -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP
Explicación de lo que estas reglas hacen:
iptables -t mangle -F CONNLIMIT
# Da un flush en las reglas de la Chain CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
# Apaga la regla (asi, cuando das un reload en el firewall, esta regla no se repetirá)
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
# Misma descripción de la anterior
iptables -t mangle -X CONNLIMIT
# excluye la chain CONNLIMIT
iptables -t mangle -N CONNLIMIT
# Crea la Chain CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
# Avisa a la Chain POSTROUTING que cuando hubiera una conexión, cuya puerta destino vaya desde 1024 a 1862, la redireccione a Chain CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
# Aquí cabe la misma descripción que para la regla anterior, solo que con las puertas destino entre 1864 a 65535
iptables -t mangle -A CONNLIMIT -p TCP -m state ! --state RELATED -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP
# Agrega una regla en la Chain CONNLIMIT, indicando que cuando la cantidad de conexiones sea mayor que 10, tratando los IP separadamente, entonces el paquete será descartado (DROP)
Estas reglas se aplican a cada IP separadamente, mas si quisieras hacerlas para la red entera, se escribiría así:
iptables -t mangle -A CONNLIMIT -p TCP -m state ! --state RELATED -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
CUIDADO puesto que asi TODA LA RED SÓLO ABRIRÁ 10 CONEXIONES CONCURRENTES EN ESTE INTERVALO DE PUERTAS AL MISMO TIEMPO.
Ejemplo completo:
# A) Limitar las conexiones para toda la Red Entera
iptables -t mangle -F CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
iptables -t mangle -X CONNLIMIT
iptables -t mangle -N CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
iptables -t mangle -A CONNLIMIT -p TCP -m state ! --state RELATED -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
# B) Limitar las conexiones IP x IP
iptables -t mangle -F CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
iptables -t mangle -X CONNLIMIT
iptables -t mangle -N CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1024:1862 -j CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 --dport 1864:65535 -j CONNLIMIT
iptables -t mangle -A CONNLIMIT -p TCP -m state ! --state RELATED -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP
# C) Limitar las conexiones en TODAS las puertas
iptables -t mangle -F CONNLIMIT
iptables -t mangle -D POSTROUTING -p TCP -d 0/0 -j CONNLIMIT
iptables -t mangle -X CONNLIMIT
iptables -t mangle -N CONNLIMIT
iptables -t mangle -A POSTROUTING -p TCP -d 0/0 -j CONNLIMIT
iptables -t mangle -A CONNLIMIT -p TCP -m state ! --state RELATED -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP
NO USAR TODAS JUNTAS... A o B o C !!!
Importante:
Tiene que estar instalado el Addon Advanced Router
Addon: http://www.brazilfw.com.br/downloads/ad ... vroute.tgz
Edicion 5/7/08
Si por algun motivo, las reglas dan error, agregar esto delante de cada renglon....
/usr/sbin/iptables -t mangle -F CONNLIMIT
/usr/sbin/iptables -t mangle -X CONNLIMIT
.... etc