Configuración de Squid: Restricción de acceso por horarios

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

Implementar restricciones de acceso a Internet según horarios específicos es una estrategia eficaz para optimizar el ancho de banda disponible, aumentar la productividad durante la jornada laboral y alinear el uso de la red con las políticas organizacionales. Squid ofrece un control granular del acceso basado en el día de la semana y la hora, permitiendo a los administradores definir períodos de acceso permisivo y restrictivo de manera clara y sencilla.

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

Fundamentos de las ACLs de tiempo

El control de acceso por horario en Squid se logra mediante la creación de Listas de Control de Acceso (ACLs) especiales del tipo time. Estas ACLs se definen directamente en el archivo de configuración principal y no requieren de un archivo externo.

La sintaxis básica para crear una ACL de tiempo es la siguiente:

acl [nombre_del_horario] time [días_de_la_semana] [hora_inicio]-[hora_fin]

Días de la semana

Los días se especifican utilizando la primera letra de su nombre en inglés, lo cual permite combinaciones flexibles:

Ejemplo: Definir un horario laboral de lunes a viernes, de 9:00 a 18:00 horas.

acl horario_laboral time MTWHF 09:00-18:00

Integración en las reglas de acceso

Una vez definida la ACL de tiempo, se integra en una regla de acceso (http_access) para aplicar la restricción. La lógica es permitir o denegar el acceso a una entidad (como una red) únicamente durante el horario especificado.

La estructura de la regla es:

http_access [allow | deny] [nombre_del_horario] [lista_de_entidades]

Ejemplo práctico: Restringir acceso a un horario específico

Supongamos que se desea permitir el acceso a Internet a la red local 192.168.100.0/24 solo durante el horario matutino de lunes a viernes (de 09:00 a 15:00).

  1. Definir las ACLs necesarias en /etc/squid/squid.conf:

    vim /etc/squid/squid.conf

    Añada las siguientes líneas en la sección correspondiente a las Listas de Control de Acceso:

    acl localnet src 192.168.100.0/24
    acl horario_matutino time MTWHF 09:00-15:00
  2. Crear la regla de acceso que vincule la ACL de tiempo con la ACL de red. En la sección de reglas (http_access), añada:

    http_access allow horario_matutino localnet

Esta regla se interpreta como: «Permitir el acceso a la red localnet sólo durante el horario definido en horario_matutino». Fuera de ese horario, las peticiones desde localnet no coincidirán con esta regla allow y, si no hay otra regla que las permita, serán denegadas por la regla final http_access deny all.

Combinación avanzada con otros controles

La verdadera potencia del control por horario se manifiesta al combinarlo con otras ACLs, como las de filtrado de contenido o autenticación, permitiendo crear políticas de acceso extremadamente granulares y adaptadas a necesidades complejas.

Ejemplo 1: Restringir contenido específico en un horario

Imaginemos que se quiere impedir la descarga de archivos ejecutables (.exe) durante el horario laboral para la red local.

  1. Definir las ACLs (tiempo, red y extensión):

    acl localnet src 192.168.100.0/24
    acl horario_laboral time MTWHF 09:00-18:00
    acl archivos_exe urlpath_regex \.exe$
  2. Crear una regla combinada que permita el acceso general en ese horario, pero excluya el contenido no deseado:

    http_access allow horario_laboral localnet !archivos_exe

Esta regla establece: «Durante el horario_laboral, permitir a localnet acceder a todo excepto a lo definido en archivos_exe».

Ejemplo 2: Política integral con autenticación y filtrado web

Para un control aún más estricto, puede combinarse el horario con autenticación de usuarios y listas de sitios bloqueados. Suponiendo que ya existen las ACLs usuarios_auth (para autenticación) y sitios_bloqueados (con url_regex), la regla podría ser:

http_access allow horario_laboral usuarios_auth !sitios_bloqueados

Esta política exige que, dentro del horario laboral, los usuarios primero se autentiquen y, una vez autenticados, no puedan acceder a los sitios de la lista negra.

Aplicación de cambios y verificación

Tras modificar el archivo squid.conf, es imperativo recargar la configuración 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

Pruebas de funcionamiento

La forma más directa de probar la configuración es intentar acceder a Internet desde un cliente dentro de la red restringida (192.168.100.0/24) tanto dentro como fuera del horario definido.

Depuración y mejores prácticas

Integración en una arquitectura de seguridad

El control por horario es una capa más dentro de una estrategia de defensa en profundidad. Para un control de acceso integral, combine este método con los demás descritos en la serie de manuales de Squid:

La combinación de estos controles permite establecer políticas de uso de la red que sean a la vez seguras, productivas y ajustadas a los requerimientos operativos de cualquier organización.