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.
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».
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.
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"
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».
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).
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:
192.168.100.0/24, intente descargar un archivo cuya extensión esté incluida en su lista (por ejemplo, un archivo .iso o .torrent)..pdf o .jpg). La descarga debe proceder con normalidad, confirmando que el filtrado es selectivo.urlpath_regex pueden tener un impacto moderado en el desempeño del servidor intermediario si la lista es muy extensa, ya que requieren evaluación de expresiones regulares para cada petición. Se recomienda mantener las listas optimizadas y evitar patrones excesivamente complejos..iso desde repositorios oficiales de distribución). Esto requiere definir una ACL de dstdomain y una regla allow que se evalúe antes de la regla restrictiva.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.