Configuración de Squid: Restricción de acceso a Sitios de Internet

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org

Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.

Introducción

La restricción del acceso a ciertos Sitios de Red es fundamental para garantizar un uso racional del ancho de banda, aumentar la productividad y mantener la seguridad de la red corporativa. Squid permite implementar estas restricciones de manera granular y eficiente mediante listas de control de acceso (ACLs) basadas en patrones de URL y nombres de dominio.

Este documento presupone la lectura y configuración exitosa descrita en el manual «Configuración de Squid: Opciones básicas».

Restricción por expresiones regulares (url_regex)

Este método es potente y flexible, permitiendo bloquear sitios que contengan ciertas palabras o patrones dentro de su URL completa. Es ideal para categorías amplias de contenido.

Creación de la lista de patrones

Primero, cree un archivo que contendrá las expresiones regulares o palabras clave a bloquear. Cada patrón se escribe en una línea nueva.

vim /etc/squid/listas/expreg-denegadas

El contenido del archivo puede incluir términos relacionados con categorías de contenido que una organización desee restringir, como ocio, descargas o temas sensibles. Por ejemplo:

descargas
derechoslaborales
foros
nsfw
p2p
pirateria
plataformas_video
redes_sociales
streaming
videojuegos
ejemplo-bloqueado.com

🔧 Nota: Esta lista debe ser completada y adaptada según las políticas de uso aceptable de la red de cada organización. Los términos como nsfw (Not Safe For Work) sirven para categorizar contenido para adultos de forma discreta.

Configuración de la ACL en Squid

Con el archivo creado, se define una nueva Lista de Control de Acceso (ACL) en la configuración principal de Squid.

Edite el archivo de configuración:

vim /etc/squid/squid.conf

Dentro de la sección de ACLs, añada una línea que defina una ACL de tipo url_regex que apunte al archivo creado:

acl expreg-denegadas url_regex "/etc/squid/listas/expreg-denegadas"

Ejemplo de sección de ACLs resultante (usando el bloque de red coherente 192.168.100.0/24):

#
# Recommended minimum configuration:
acl all src 0.0.0.0/0
acl manager proto cache_object
acl localhost src 127.0.0.1/8
acl localnet src 192.168.100.0/24
acl expreg-denegadas url_regex "/etc/squid/listas/expreg-denegadas"

Aplicación de la regla de denegación

La potencia de las ACLs reside en combinarlas en las reglas de acceso (http_access). Para denegar el acceso a los sitios que coincidan con la lista, se utiliza el operador de negación !.

Modifique la regla que permite el acceso a la red local (localnet) para que excluya lo definido en expreg-denegadas:

http_access allow localnet !expreg-denegadas

Esta regla se lee como: «Permitir el acceso a la red localnet, excepto a aquello que coincida con la ACL expreg-denegadas».

Puede combinarse esta restricción con otros controles, como la autenticación explicada en el manual Configuración de Squid: Acceso por Autenticación:

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
http_access allow localnet usuarios_autenticados !expreg-denegadas
http_access deny all

Restricción por nombres de dominio (dstdomain)

Este método es más específico y se utiliza para bloquear el acceso a dominios completos o subdominios particulares, ofreciendo un control preciso sobre sitios web concretos.

Creación de la lista de dominios

Cree un archivo para listar los dominios a restringir:

vim /etc/squid/listas/dominios-denegados

El archivo puede contener dominios específicos o el uso del punto (.) para bloquear el dominio y todos sus subdominios.

Ejemplos de formato:

.redsocial-corporativa.com
.microblog-ejemplo.com
.plataforma-video.com
.foros-derechos.com
.dominio-geo.jp
.dominio-geo.cn
.dominio-stream.tv

🔧 Nota importante: Si se define .dominio.com, se bloquean automáticamente www.dominio.com, mail.dominio.com, ftp.dominio.com y cualquier otro subdominio. Carece de necesidad definirlos individualmente.

Configuración y aplicación de la ACL de dominio

Edite nuevamente squid.conf y añada una ACL de tipo dstdomain:

acl dominios-denegados dstdomain "/etc/squid/listas/dominios-denegados"

Luego, actualice la regla de acceso para incorporar esta nueva restricción. La regla final podría ser:

http_access allow localnet !expreg-denegadas !dominios-denegados

Creación de listas de excepción (whitelist)

A veces, una expresión regular genérica puede bloquear incidentalmente el acceso a un sitio legítimo y necesario. Para estos casos, se crea una lista blanca (whitelist) de dominios que estarán exentos de las restricciones.

Creación de la lista de dominios permitidos

Cree un archivo con los dominios que siempre deben ser accesibles:

vim /etc/squid/dominios-permitidos

Contenido de ejemplo (ilustrativo):

.dominio-permitido.org
.edu
.gob.mx
.gov
.org
www.google.com

Configuración y regla de excepción

Defina la ACL correspondiente en squid.conf:

acl dominios-permitidos dstdomain "/etc/squid/dominios-permitidos"

Para implementar la excepción, se añade una regla antes de las reglas restrictivas. Esta regla especial permite el acceso a los dominios de la lista blanca sin importar otras restricciones:

http_access allow dominios-permitidos

⚠️ Orden crucial: Las reglas en Squid se evalúan en orden. Esta regla de permiso debe colocarse antes de reglas como http_access allow localnet !expreg-denegadas. Si un dominio coincide con dominios-permitidos, Squid otorga el acceso y deja de evaluar el resto de las reglas para esa petición.

Aplicación de cambios y pruebas

Una vez completada la configuración, es necesario recargar Squid para que los cambios surtan efecto.

Para sistemas con SystemD (AlmaLinux, Rocky Linux, RHEL 8+):

systemctl reload squid

Para sistemas con SysVinit (ALDOS):

service squid reload

Para probar la configuración:

  1. Desde un cliente de la red 192.168.100.0/24, intente acceder a un sitio cuyo dominio o URL coincida con un patrón en sus listas de denegación.
  2. Squid debe mostrar una página de error de acceso denegado.
  3. Intente acceder a un dominio incluido en la lista blanca (dominios-permitidos). El acceso debe ser exitoso.
  4. Acceda a un sitio neutro que no esté en ninguna lista. El acceso también debe ser exitoso, demostrando que el filtrado es selectivo.

Depuración y mejores prácticas

Integración con otros controles

El filtrado por URL y dominio se combina de manera poderosa con otros mecanismos de control de Squid. Considere implementar un sistema de defensa en profundidad utilizando también:

Estos controles, combinados con las listas de expresiones regulares y dominios aquí descritas, permiten construir una política de acceso a Internet robusta, granular y adaptada a las necesidades específicas de cualquier organización.