La gestión eficiente de redes y el control de acceso a Internet son pilares fundamentales en la administración de sistemas. Uno de los componentes más versátiles para lograr estos objetivos es Squid, un popular proxy caché que, más allá de su función principal, ofrece capacidades avanzadas para segmentar redes, filtrar contenido y optimizar el tráfico. Este artículo explora cómo configurar Squid para permitir el acceso entre diferentes redes locales (LANs) y cómo implementar políticas de control de acceso granulares, incluyendo el filtrado por navegador y la denegación de contenido específico, todo ello gestionado a través de un servidor DHCP.
Arquitectura de Red y Colocación de Squid
Para comprender cómo acceder desde una LAN a otra a través de Squid, es crucial visualizar la arquitectura de red. Generalmente, se plantea la necesidad de un servidor Squid en una máquina dedicada, la cual puede requerir una o dos tarjetas de red, dependiendo de la configuración deseada. Si el servidor Squid se va a utilizar como un proxy transparente, es decir, que el tráfico de los clientes se redirige automáticamente hacia él sin necesidad de configuración en cada dispositivo cliente, se puede optar por una configuración en la que el servidor Squid tenga una presencia física intermedia entre las redes.
Una configuración común implica tener un router principal (como pfSense) que gestiona el acceso a Internet (WAN) y la red local principal (LAN). Si se desea implementar Squid en una máquina separada, esta máquina actuará como un proxy intermedio. En este escenario, es posible que la máquina con Squid necesite dos tarjetas de red: una conectada a la red principal (LAN) y otra que actúe como interfaz de salida hacia la otra LAN o directamente a Internet.

La pregunta sobre si la máquina adicional necesita una o dos tarjetas de red surge de esta arquitectura. Si la máquina Squid solo va a servir como proxy para la LAN existente y no para interconectar redes distintas, una sola tarjeta de red podría ser suficiente. Sin embargo, para escenarios donde se busca segmentar el acceso, como acceder desde una LAN a otra a través de Squid, o para implementar un proxy transparente que intercepte el tráfico de una LAN y lo reenvíe, dos tarjetas de red facilitan la separación lógica y física de las redes. Una tarjeta se conectaría a la LAN principal, y la otra a la red secundaria o a un segmento de red específico.
En el contexto de pfSense, si se tiene DHCP en la red LAN principal y se desea que los equipos detrás de Squid en otra máquina obtengan sus IPs, el servidor DHCP (en este caso, pfSense) debe ser configurado para asignar las IPs y el gateway correcto. Si el servidor Squid está en una máquina separada y se desea que pfSense redirija el tráfico a través de él, se deben configurar reglas de firewall en pfSense para que el tráfico destinado a Internet pase por la IP y puerto del servidor Squid. Esto implica que el servidor Squid debe estar configurado para escuchar en un puerto específico (comúnmente 3128) y que las reglas de encaminamiento (routing) estén correctamente establecidas.
Configuración de DHCP y Reservas de IP
La configuración del servidor DHCP es un paso inicial y crucial. Una vez configuradas las tarjetas de red del servidor Squid, se procede con la configuración del DHCP. Es fundamental especificar la interfaz por la que se servirán las direcciones IP a los clientes, recordando que esta debe ser la interfaz interna (la que mira hacia la LAN). El servidor DHCP se encargará de asignar direcciones IP, máscaras de subred, gateways predeterminados y servidores DNS a los dispositivos conectados.

En ocasiones, puede ser necesario hacer reservas de direcciones IP, es decir, asignar la misma IP siempre al mismo equipo. Esto se logra asociando la dirección MAC de un dispositivo a una dirección IP específica dentro del rango DHCP. Esta funcionalidad es útil para servidores, impresoras o cualquier dispositivo que requiera una dirección IP estática sin necesidad de configurarla manualmente en el dispositivo.
Si el servidor Squid se encuentra en una máquina separada y es el encargado de proporcionar acceso a Internet a una LAN, el Default Gateway de las PCs en esa LAN deberá ser configurado para apuntar al puerto del servidor Squid que mira hacia la LAN. Si, por el contrario, el servidor Squid actúa como un proxy transparente, los clientes no necesitarán ninguna configuración especial, ya que el tráfico será interceptado y redirigido por el firewall (en este caso, pfSense) hacia el servidor Squid.
Control de Acceso con Squid: http_access y ACLs
Un aspecto importante de la configuración de Squid es el control de acceso. Normalmente, debe configurarse el proxy para que atienda a sus clientes legítimos y a nadie más, pues un proxy abierto puede utilizarse con facilidad para cometer abusos. Squid ofrece un potente sistema de listas de control de acceso (ACLs) que permite definir reglas muy específicas sobre quién puede acceder a qué recursos.
El comando http_access es el encargado de aplicar estas reglas. Las directivas http_access se evalúan en orden, y la primera regla que coincide con la solicitud determina la acción (permitir o denegar).
La pregunta: ¿Para qué sirve el elemento de acl aclname browser [-i] regexp?
Este tipo de ACL (browser) se utiliza para filtrar o permitir el acceso basándose en el encabezado User-Agent de la solicitud HTTP. El User-Agent es una cadena de texto que el navegador envía al servidor web, identificándose a sí mismo (por ejemplo, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"). El parámetro [-i] indica que la comparación debe ser insensible a mayúsculas y minúsculas. regexp se refiere a una expresión regular que se utiliza para hacer coincidir el valor del User-Agent.
¿Cree que podría permitir el acceso web a un navegador y denegarlo a otro diferente discriminando por User-Agent?
Sí, absolutamente. Utilizando la ACL browser con una expresión regular adecuada, se puede permitir el acceso a navegadores específicos y denegarlo a otros. Por ejemplo, se podría crear una ACL para identificar Chrome y otra para Firefox, y luego usar http_access para permitir el acceso solo a los usuarios que utilicen Chrome.
Un ejemplo de configuración podría ser:
acl chrome browser Chromeacl firefox browser Firefoxhttp_access allow chromehttp_access deny firefoxhttp_access allow localnethttp_access deny allEn este ejemplo, se permite el acceso a los usuarios cuyo User-Agent contenga la palabra "Chrome", se deniega el acceso a aquellos cuyo User-Agent contenga "Firefox", se permite el acceso a la red local (localnet), y finalmente se deniega todo lo demás.
Filtrado de Contenido y Anuncios
Squid también puede ser utilizado para eliminar anuncios de las páginas web, como se describe en el concepto de "Squid Ads Server Filter". Esto se logra típicamente mediante la creación de ACLs que identifican y bloquean las solicitudes a dominios conocidos por servir anuncios.
Además del filtrado por User-Agent, Squid permite crear ACLs basadas en la URL (url_regex) o en dominios específicos. Por ejemplo, para denegar el acceso a sitios cuyos dominios contengan ciertas palabras o patrones, se puede definir una ACL url_regex y asociarla a un archivo que contenga las expresiones regulares de los dominios a bloquear.
acl blocked_domains url_regex -i "/etc/squid/blocked_domains.txt"http_access deny blocked_domainsEl archivo /etc/squid/blocked_domains.txt contendría una lista de dominios o patrones, uno por línea, por ejemplo:
adserver\.comdoubleclick\.netexample\.ads\.comTambién es posible configurar Squid para que solo permita el acceso a una lista predefinida de sitios permitidos. Esto se logra definiendo una ACL con los dominios permitidos y luego utilizando http_access para denegar todo lo que no esté explícitamente permitido.
acl allowed_sites dstdomain -i "/etc/squid/allowed_sites.txt"http_access allow allowed_siteshttp_access deny allEl archivo /etc/squid/allowed_sites.txt contendría los dominios a los que se permite el acceso.
Configuración de Caché y Mantenimiento
Squid ofrece opciones para optimizar el rendimiento y el uso de recursos mediante la configuración de su caché.
- Tamaño máximo de objetos en memoria:
maximum_object_size_in_memorylimita el tamaño de los objetos que Squid guardará en la memoria RAM. Esto puede ahorrar problemas con el tamaño de la caché y mejorar la respuesta. Un valor común podría ser256 MBsi la máquina tiene suficiente RAM. - Vaciar la caché: El parámetro
cache_dirdefine el espacio en disco para la caché. Las directivas comorefresh_patternomaximum_object_sizeinfluyen en cuándo Squid vaciará la caché o cuándo considerará que un objeto está obsoleto. Configurar adecuadamente estos parámetros permite un mejor mantenimiento de la caché.
En el archivo squid.conf, se pueden encontrar líneas como:
# Limit the maximum object size that Squid will cache in memory.maximum_object_size_in_memory 256 MB# Define the cache directory structure, format, size, and directory levels.# ufs is the cache storage format.# 1000 (MB) is the maximum disk space for the cache.# 16 is the number of first-level directories.# 256 is the number of second-level directories.cache_dir ufs /var/spool/squid 1000 16 256Estos parámetros, junto con la configuración del puerto de escucha (http_port) y la estructura de directorios de la caché, son fundamentales para la operación eficiente de Squid.
Consideraciones sobre el Sistema Operativo y Entorno
Los ejercicios y configuraciones de Squid a menudo se basan en distribuciones Linux específicas. Por ejemplo, se menciona que un ejercicio está diseñado para ser puesto en práctica en CentOS 5, Elastix 1.5, Red Hat Enterprise Linux 5, o sistemas operativos similares basados en RHEL 5. Esto sugiere que la sintaxis de los comandos de servicio (service squid restart, squid restart) y las rutas de los archivos de configuración (/etc/init.d/squid, /etc/default/squid) pueden variar entre distribuciones y versiones.
En el caso de Ubuntu 10.10, se advierte que el servicio de Squid podría no estar en /etc/init.d/squid sino en /etc/default/squid, requiriendo el comando sudo squid restart. Si el servicio ya está en ejecución, puede ser necesario "matarlo" con sudo kill NumeroProcessID antes de reiniciarlo.
Configuración de Red Avanzada y iptables
Cuando se implementa Squid en una máquina separada para interconectar redes, la configuración de iptables (o el firewall equivalente en el sistema operativo) se vuelve crucial. Si la máquina Squid tiene dos interfaces de red, por ejemplo, eth0 para la red interna y eth1 para la red externa, es necesario habilitar el reenvío de paquetes (forwarding) y configurar reglas de iptables para permitir que el tráfico fluya entre estas interfaces, pasando a través de Squid.
Un ejemplo de configuración de iptables podría incluir reglas para permitir el tráfico entrante en la interfaz interna, reenviarlo a la interfaz externa, y permitir que Squid actúe como gateway.
# Habilitar el reenvío de paquetesecho 1 > /proc/sys/net/ipv4/ip_forward# Reglas de ejemplo para permitir el tráfico a través de Squid (adaptar a la configuración real)# Permitir tráfico entrante en la interfaz interna (ej. eth0)iptables -A INPUT -i eth0 -j ACCEPT# Permitir tráfico saliente desde la interfaz externa (ej. eth1)iptables -A OUTPUT -o eth1 -j ACCEPT# Redireccionar el tráfico HTTP y HTTPS hacia el puerto de Squid (ej. 3128) en la interfaz internaiptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128# Permitir que la máquina Squid actúe como router/gatewayiptables -A FORWARD -i eth0 -o eth1 -j ACCEPTiptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPTEs importante destacar que estas reglas son ejemplos y deben ser adaptadas a la configuración de red específica, incluyendo las direcciones IP, subredes y los nombres de las interfaces. La configuración de iptables puede volverse compleja, y es recomendable estudiar detenidamente el caso particular para asegurar que las reglas de firewall no bloqueen el tráfico necesario ni creen vulnerabilidades de seguridad.
Configuración del Navegador Cliente
Si no se utiliza un proxy transparente, los clientes deben ser configurados para usar el servidor proxy. Esto se realiza en la configuración de red de cada dispositivo o, de forma más centralizada, a través de políticas de grupo en entornos Windows o configuraciones equivalentes en otros sistemas operativos.
En la configuración del navegador, se debe especificar la dirección IP de la máquina en la que está corriendo Squid y el puerto por el cual Squid "escuchará" las peticiones (por defecto, 3128).
Por ejemplo, para configurar un navegador como Chromium en Debian/Ubuntu:
- Ir a "Herramientas" > "Opciones" ("Preferencias").
- Seleccionar "Avanzadas".
- Hacer clic en "Cambiar la configuración del proxy" o similar.
- Elegir "Configuración manual del proxy".
- Introducir la dirección IP del servidor Squid y el puerto (ej. 3128).

Personalización de Mensajes de Error
Squid permite personalizar los mensajes de error que se muestran a los usuarios cuando una solicitud es denegada o ocurre un problema. Esto se hace descomentando y modificando la línea error_directory en squid.conf. Por ejemplo, para utilizar mensajes de error en español:
# Uncomment and change the language directory to 'es' for Spanish.error_directory /usr/share/squid/errors/esLos archivos de mensajes de error se encuentran en el directorio especificado (ej. /usr/share/squid/errors/es) y están hechos en HTML, lo que permite editarlos fácilmente para personalizar el contenido y el diseño de los mensajes.
Alternativas y Consideraciones Adicionales
Para bloquear una sola página o un número limitado de páginas, editar el archivo hosts en cada máquina cliente puede ser una alternativa más sencilla que configurar Squid. Este archivo permite mapear nombres de dominio a direcciones IP, y al mapear un dominio a 127.0.0.1 (localhost), se evita que el usuario acceda a ese sitio.
Finalmente, es importante recordar los términos de la licencia de uso, como los proporcionados por Rubicon Communications LLC (Netgate), que permiten la copia, distribución y creación de obras derivadas bajo ciertas condiciones, incluyendo el reconocimiento del autor original y la prohibición de uso comercial sin permiso.
Configuracion de un Proxy usando Squid y Proxmox5.0 2/2
La configuración de Squid para acceder entre redes y controlar el acceso es un proceso detallado que requiere una comprensión sólida de redes, protocolos y las propias capacidades de Squid. Al seguir estos pasos y adaptar las configuraciones a las necesidades específicas, se puede lograr un entorno de red más seguro, controlado y eficiente.