Deep Dive: Redireccionamiento de tráfico con Squid
Hace tiempo Squid es el software que se usa en muchas organizaciones para gestionar el acceso a Internet desde la red interna.
Squid es muy potente, sin embargo la familiaridad con que muchos usuarios usan sus características básicas, no suele hacer notar esa potencia.
Por ejemplo: AAA delegada (AD), redireccionamiento de tráfico, gestión de ancho de banda, etc.
Cache Peer
Esta característica de Squid típicamente se usa para gestionar la existencia de múltiples proxies en una infraestructura, permitiendo gestionar el tráfico HTTP directamente.
Cache_peer es sumamente potente para solucionar problemas complejos, pero cabe mencionar que si se carga múltiples tablas de routing en el Linux base para Squid, se puede añadir a las capacidades de Squid la gestión de múltiples gateways en el sistema operativo, permitiendole sumar esa capacidad subyacente a la potencia de cache_peer.
Configuring Multiple Default Routes in Linux
De todos modos, Squid brinda capacidades para resolver escenarios complejos de redireccionamiento de tráfico.
Datos Iniciales:
El sistema base para realizar el direccionamiento de tráfico HTTP es un servidor Squid configurado para atender peticiones en IP 192.168.37.21 3128 y 80 (explícito y transparente), su GW por default es 192.168.37.1
Problema - Escenario 1: Redireccionar tráfico de sitios específicos
En una organización se cuenta con tres proxies - adicionales al principal - Squid (tres routers ADSL por ejemplo), con salida a Internet:
Proxy 1 - 192.168.37.43
Proxy 2 - 192.168.37.45
Proxy 3 - 192.168.37.72
Requerimientos:
a) Que todo el tráfico de Facebook salga por el Proxy 1,
b) Que el tráfico de Youtube salga por el Proxy 2, y
c) Que el tráfico de updates de antivirus (Panda y AVG por ejemplo), por el Proxy 3.
El resto del tráfico va a seguir saliendo normalmente por el gateway configurado en el Proxy (dirigido a un cuarto proveedor de Internet).
Solución a)
En el Squid principal 192.168.37.21 se puede configurar esto usando la directiva cache_peer (que es muy potente y este solo uno de sus usos), agregando a /etc/squid/squid.conf los siguientes parámetros:
acl youtube_videos_regx url_regex -i ^http://[^/]+\.youtube\.com/videoplayback\?
acl youtube_videos_regx url_regex ^http://(.*?)/get_video\?
acl youtube_videos_regx url_regex ^http://(.*?)/videodownload\?
acl youtube_videos_regx url_regex ^http://(.*?)/videoplayback\?
cache_peer 192.168.37.43 parent 3128 0 proxy-only no-query no-delay connect-timeout=5
cache_peer_access 192.168.37.43 allow youtube_videos
cache_peer_access 192.168.37.43 allow youtube_videos_regx
never_direct allow youtube_videos
never_direct allow youtube_videos_regx
Solución b)
cache_peer 192.168.37.45 parent 3128 0 proxy-only no-query no-delay connect-timeout=5
cache_peer_access 192.168.37.45 allow facebook
never_direct allow facebook
Solución c)
acl av dstdomain .200.123.194.204
cache_peer 192.168.37.72 parent 3128 0 proxy-only no-query no-delay connect-timeout=5
cache_peer_access 192.168.37.72 allow av
never_direct allow av
Problema - Escenario 2: Sitio de Internet público con IP interna
Se tiene un sitio publicado en Internet con una IP adicional publicada en la red interna:
Dirección pública: 200.xxx.xxx.xxx
Dirección interna: 10.0.0.22
Requerimientos:
a) Que cuando un usuario desde la red interna que tenga configurado explícitamente el proxy 192.168.37.21 en su navegador, acceda a la IP 10.0.0.22 cuando navegue hacia
www.ejemplo.net
b) Que cuando un usuario, desde la red interna, que NO tenga configurado explícitamente el proxy en su navegador, acceda a la IP 200.xxx.xxx.xxx cuando navegue hacia el sitio
www.ejemplo.net.
Solución a):
Cargar en Squid la siguiente configuración:
cache_peer 10.0.0.22 parent 80 0 proxy-only no-query no-delay default name=redireccionar_ejemplo
Solución b):
En el escenario típico de redes internas (casi*) NO hace falta configuración adicional SI los servidores DNS que tiene un usuario interno resuelven direcciones en Internet (por ejemplo,
www.gmail.com efectivamente permite abrir Gmail en el navegador), el sitio
www.ejemplo.net va a ser resuelto normalmente a 200.xxx.xxx.xxx vía configuración DNS estándar para el usuario.
*Se requiere que la configuración de seguridad permita además, navegar directamente hacia www.ejemplo.net a los usuarios que no configuren un proxy en el navegador.
Problema - escenario 3: Redireccionar descargas de archivos
Las bajadas de los siguientes tipos de archivo necesitan ser gestionadas explícitamente
.MP3 .AVI .WMV .RM .FLV .ZIP .RAR .EXE .mp3 .avi .wmv .rm .flv .zip .rar .exe
Requerimientos:
a) Redireccionar todas las descargas desde cualquier sitio (Facebook y Antivirus incluído) para que usen exclusivamente solo el proxy 192.168.37.
b) Considerar como contexto el escenario - problema 1) y que Facebook y updates de antivirus son explícitamente redireccionados hacia otros proxies, diferentes del .43 solicitado como destino de todas las descargas.
Solución a):
Cargar en Squid la siguiente configuración:
acl descargas urlpath_regex -i \.MP3$ \.AVI$ \.WMV$ \.RM$ \.FLV$ \.ZIP$ \.RAR$ \.EXE$ \.mp3$ \.avi$ \wmv.$ \.r
m$ \.flv$ \.zip$ \.rar$ \.exe$
cache_peer 192.168.37.43 parent 3128 0 proxy-only no-query no-delay connect-timeout=5
cache_peer_access 192.168.37.43 allow descargas
never_direct allow descargas
Solución b):
La configuración anterior debe insertarse antes de las redirecciones de tráfico hacia Facebook y updates de antivirus, de ese modo el tráfico será resultante del análisis del regexp en la ACL va a ser redireccionado antes, descartándose las otras redirecciones.
Sldos.