Sitio para la difusión de conocimiento informático. 

Twitter RSS

Control de Ancho de Banca con Iptables (hashlimit)

Control de Ancho de Banca con Iptables (hashlimit)

Es conocida la necesidad de controlar el uso de un enlace a Internet por cliente, siendo el caso de uso más común un enlace a Internet compartido por varios usuarios el cual se satura en horas píco debido a que unos pocos consumen el enlace realizando descargas o mediante streamings de video y audio. En este post presentaremos como controlar dicho consumo mediante simples políticas en iptables con hashlimit.

Primero debemos instalar un servidor linux que sea o el servidor Proxy para la navegación ya sea con squid u otro software de proxy, o que sea el default gateway de la red a controlar. Eso se debe a que el tráfico de los clientes debe pasar por unestro iptables para poder controlar el flujo de paquetes que serán destinado a Internet.

 

Caso 1 – Proxy (Squid) + Iptables (hashlimit)

En este caso controlaremos el flujo de paquetes que se conectarán al puerto de nuestro Porxy, ej. 3128 TCP. Para esto debemos aplicar una política que permite que paquetes TCP/IP por unidad de tiempo, e inmediatamente después una política que los deniegue:
iptables -I INPUT -p tcp -m tcp –dport 3128 -m hashlimit –hashlimit-upto 10/sec –hashlimit-burst 10 –hashlimit-mode srcip –hashlimit-name HTTP_RATE -j ACCEPT
iptables -I INPUT -p tcp -m tcp –dport 3128 -j DROP

Como verán estas políticas serán insertadas al principio de las políticas de nuestro firewall, esto es para asegurarnos que los paquetes no serán permitidos por ninguna otra política que pueda estar configurada, siendo la más común la que permite los paquetes de conexiones ya establesidas:
iptables -A INPUT -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state –state RELATED,ESTABLISHED -j ACCEPT

También se confuguró para que permita cinco paquetes por segundo, sindo esto no un equivalente directo a un determinado ancho de banda. Por lo tanto debemos probar el ancho de banda configurado a esa tasa de procesamiento de paquetes: 10/sec es aproximada mente un mega de ancho de banda por IP origen.

 

Caso 2 – Default Gateway + Firewall

En este caso controlaremos el flujo de paquetes que segurán su curso a Internet o a un servidor Porxy que se encuentra en la DMZ (ej.). Para esto configuraremos una política FORWARD:
iptables -I FORWARD -p tcp -m tcp –dport 8008 -m hashlimit –hashlimit-upto 20/sec –hashlimit-burst 20 –hashlimit-mode srcip –hashlimit-name HTTP rate limit -j ACCEPT
iptables -I FORWARD -p tcp -m tcp –dport 8008 -j DROP

Como verán estas políticas serán insertadas al principio de las políticas de nuestro firewall, esto es para asegurarnos que los paquetes no serán permitidos por ninguna otra política que pueda estar configurada, siendo la más común la que permite los paquetes de conexiones ya establesidas:
iptables -A FORWARD -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p udp -m state –state RELATED,ESTABLISHED -j ACCEPT

También se confuguró para que permita cinco paquetes por segundo, sindo esto no un equivalente directo a un determinado ancho de banda. Por lo tanto debemos probar el ancho de banda configurado a esa tasa de procesamiento de paquetes: 20/sec no llega a 2Mb de ancho de banda por IP origen.

 

El recurso “hashlimit” de Iptables puede ayudarnos a controlar el acceso a nuestros recursos es por esto que esperamos que este ejemplo sea de ayuda.

 
Home Linux OS Iptables Control de Ancho de Banca con Iptables (hashlimit)