Configuración de Squid: Restricción de acceso a contenido por extensión

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

El control del acceso a ciertos tipos de archivos basado en su extensión es una estrategia eficaz para optimizar el ancho de banda, reforzar la seguridad de la red y promover el cumplimiento de las políticas de uso aceptable. Squid implementa este filtrado mediante listas de control de acceso (ACLs) del tipo urlpath_regex, que analizan la ruta de la URL en busca de patrones específicos.

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

Creación de la lista de extensiones

El primer paso consiste en definir un archivo que contenga las expresiones regulares correspondientes a las extensiones de archivo que se desean bloquear. Cada extensión debe definirse en una línea separada, utilizando el formato \.extensión$, donde \. escapa el punto literal y $ asegura que coincida con el final de la cadena.

Cree el archivo de lista con su editor de texto preferido:

vim /etc/squid/listas/extensiones

A continuación se presenta una lista de ejemplo ampliada con extensiones comunes actuales. Esta lista debe adaptarse según los requisitos específicos de seguridad y política de red de cada organización.

\.7z$
\.ace$
\.avi$
\.bat$
\.deb$
\.doc$
\.docx$
\.exe$
\.flac$
\.flv$
\.gz$
\.iso$
\.lnk$
\.m4a$
\.mbd$
\.mkv$
\.mov$
\.mp3$
\.mp4$
\.mpg$
\.mpeg$
\.msi$
\.pif$
\.ppt$
\.pptx$
\.pps$
\.rar$
\.ra$
\.ram$
\.rm$
\.rpm$
\.scr$
\.sys$
\.torrent$
\.vob$
\.wav$
\.wma$
\.wmv$
\.xls$
\.xlsx$
\.zip$

🔧 Nota sobre sintaxis: El uso de \. (punto escapado) y $ (fin de línea) en cada entrada es crucial. Este patrón garantiza que Squid bloquee únicamente las URL que terminen exactamente con esa extensión, evitando falsos positivos donde la cadena aparezca en medio de un nombre de archivo o dominio.

Configuración de la ACL en Squid

Con el archivo de lista creado, el siguiente paso es definir una Lista de Control de Acceso (ACL) en la configuración principal de Squid que haga referencia a éste.

Edite el archivo de configuración:

vim /etc/squid/squid.conf

Dentro de la sección dedicada a las ACLs, añada una nueva línea que defina una ACL de tipo urlpath_regex. Este tipo de ACL examina la parte de la ruta de la URL (lo que viene después del nombre del dominio). En este ejemplo, la ACL se denomina extensiones_bloqueadas.

acl extensiones_bloqueadas urlpath_regex "/etc/squid/listas/extensiones"

Ejemplo de sección de ACLs resultante (manteniendo la coherencia con el bloque de red 192.168.100.0/24 y otras ACLs de la serie):

#
# 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 usuarios_autenticados proxy_auth REQUIRED
acl expreg_denegadas url_regex "/etc/squid/listas/expreg-denegadas"
acl extensiones_bloqueadas urlpath_regex "/etc/squid/listas/extensiones"

Integración en las reglas de acceso

La ACL por sí sola no realiza ninguna acción. Debe ser integrada dentro de una regla de acceso (http_access) para aplicar la denegación. Esto se logra utilizando el operador de negación !.

Modifique la regla que permite el acceso a su red local para que excluya las coincidencias con la lista de extensiones. La regla básica sería:

http_access allow localnet !extensiones_bloqueadas

Esta regla se interpreta como: «Permitir el acceso a la red localnet, excepto a las peticiones que coincidan con la ACL extensiones_bloqueadas».

Combinación con otros controles de acceso

La verdadera potencia del filtrado en Squid surge al combinar múltiples ACLs en una sola regla, creando políticas de acceso granulares. Por ejemplo, puede exigir autenticación y al mismo tiempo bloquear ciertos sitios web y extensiones:

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

La regla anterior establece una política robusta: los usuarios de la red local (localnet) deben autenticarse (usuarios_autenticados), y su acceso es denegado si intentan acceder a sitios con patrones prohibidos (!expreg_denegadas) o a archivos con extensiones bloqueadas (!extensiones_bloqueadas).

Aplicación de cambios y pruebas

Para que los cambios en la configuración surtan efecto, es necesario recargar el servicio Squid.

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 dentro de la red 192.168.100.0/24, intente descargar un archivo cuya extensión esté incluida en su lista (por ejemplo, un archivo .iso o .torrent).
  2. Squid debe interceptar la petición y mostrar una página de error de acceso denegado.
  3. Intente descargar un archivo con una extensión no incluida en la lista (por ejemplo, .pdf o .jpg). La descarga debe proceder con normalidad, confirmando que el filtrado es selectivo.

Consideraciones y mejores prácticas

Integración con una estrategia de seguridad integral

El filtrado por extensión es una capa más dentro de una arquitectura de defensa en profundidad. Para un control de acceso robusto, combine esta técnica con las demás descritas en la serie:

La combinación de estos controles permite construir un entorno de red seguro, productivo y alineado con las políticas organizacionales.