208.3 - Squid como proxy caché
Peso: 2
Introducción
Squid es un servidor proxy caché ampliamente utilizado en entornos Linux. Permite almacenar en caché contenido web para mejorar el rendimiento, controlar el acceso a Internet mediante ACLs y actuar como proxy transparente o proxy inverso. El archivo de configuración principal es /etc/squid/squid.conf.
Instalación y servicio
# Debian/Ubuntu
apt install squid
systemctl enable squid
systemctl start squid
# Red Hat/CentOS
yum install squid
systemctl enable squid
systemctl start squidConfiguración básica de squid.conf
Puerto de escucha
# Puerto estándar del proxy
http_port 3128
# Escuchar en una IP específica
http_port 192.168.1.1:3128
# Modo proxy transparente
http_port 3128 transparent
# O en versiones más recientes
http_port 3128 interceptPara el examen: El puerto predeterminado de Squid es 3128. En modo transparente, los clientes no necesitan configurar el proxy en su navegador; el tráfico se redirige al proxy mediante reglas de iptables.
Configuración de caché
# Directorio de caché en disco
# cache_dir tipo directorio tamaño_MB L1 L2
cache_dir ufs /var/spool/squid 100 16 256
# Caché en memoria
cache_mem 256 MB
# Tamaño máximo de objeto en memoria
maximum_object_size_in_memory 512 KB
# Tamaño máximo de objeto en disco
maximum_object_size 4 MB
# Tamaño mínimo de objeto en disco
minimum_object_size 0 KB- ufs: Formato de almacenamiento estándar de Squid.
- 100: Tamaño máximo de la caché en disco en MB.
- 16: Número de subdirectorios de nivel 1.
- 256: Número de subdirectorios de nivel 2.
Otros tipos de almacenamiento
# AUFS - Asynchronous UFS (mejor rendimiento)
cache_dir aufs /var/spool/squid 10000 16 256
# Diskd - Proceso separado para E/S de disco
cache_dir diskd /var/spool/squid 10000 16 256Listas de Control de Acceso (ACLs)
Las ACLs son el mecanismo central de Squid para controlar el acceso. Se definen en dos pasos: primero se define la ACL y luego se aplica una regla.
Tipos de ACL comunes
# Por dirección IP de origen
acl red_local src 192.168.1.0/24
# Por dirección IP de destino
acl servidores_internos dst 10.0.0.0/8
# Por dominio de destino
acl dominios_bloqueados dstdomain .facebook.com .twitter.com
# Por dominio de origen (requiere resolución DNS inversa)
acl origen_dominio srcdomain .empresa.com
# Por horario
acl horario_laboral time MTWHF 08:00-18:00
# Por puerto
acl puertos_seguros port 80 443 8080
# Por protocolo
acl protocolo_ftp proto FTP
# Por URL con expresión regular
acl url_prohibida url_regex -i \.exe$ \.torrent$
# Por tipo MIME de la respuesta
acl tipo_video rep_mime_type video/mp4
# Por método HTTP
acl metodo_connect method CONNECTPara el examen: Los días de la semana en la ACL
timese representan como: S=Sunday, M=Monday, T=Tuesday, W=Wednesday, H=Thursday, F=Friday, A=Saturday. Nota que Thursday esHy Saturday esA.
Reglas de acceso (http_access)
# Permitir acceso a la red local
acl red_local src 192.168.1.0/24
http_access allow red_local
# Bloquear dominios específicos
acl bloqueados dstdomain .facebook.com .youtube.com
http_access deny bloqueados
# Permitir solo en horario laboral
acl horario time MTWHF 09:00-17:00
http_access allow red_local horario
# Regla final: denegar todo lo demás
http_access deny allPara el examen: El orden de las reglas
http_accesses fundamental. Squid las procesa de arriba a abajo y aplica la primera regla que coincida. La última regla debe ser siemprehttp_access deny allpara denegar todo lo que no esté explícitamente permitido.
Proxy transparente
En un proxy transparente, el tráfico del cliente se redirige al proxy sin necesidad de configurar el navegador.
Configuración de Squid
http_port 3128 interceptReglas de iptables para redirigir el tráfico
# Redirigir todo el tráfico HTTP al proxy
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j REDIRECT --to-port 3128
# No redirigir el tráfico del propio servidor proxy
iptables -t nat -A OUTPUT -p tcp --dport 80 \
-m owner --uid-owner squid -j ACCEPTProxy inverso (Reverse Proxy)
Squid puede actuar como proxy inverso para servir contenido desde servidores backend.
# Configurar como proxy inverso
http_port 80 accel defaultsite=www.ejemplo.com vhost
# Definir el servidor backend
cache_peer 192.168.1.10 parent 80 0 no-query originserver name=backend
# Regla de acceso
acl sitio dstdomain www.ejemplo.com
http_access allow sitio
cache_peer_access backend allow sitioJerarquía de caché (Cache Hierarchy)
Squid permite configurar jerarquías de caché con servidores padre (parent) y hermanos (sibling).
# Proxy padre (reenvía peticiones si no tiene la respuesta en caché)
cache_peer proxy-padre.empresa.com parent 3128 3130
# Proxy hermano (solo comparte caché, no reenvía peticiones)
cache_peer proxy-hermano.empresa.com sibling 3128 3130
# ICP (Internet Cache Protocol) para comunicación entre proxies
icp_port 3130Para el examen: ICP (Internet Cache Protocol) utiliza el puerto UDP 3130 por defecto para la comunicación entre proxies en una jerarquía de caché.
Autenticación
Autenticación básica con NCSA
# Configurar el programa de autenticación
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy Corporativo
auth_param basic credentialsttl 2 hours
auth_param basic children 5
# Crear ACL para usuarios autenticados
acl usuarios_autenticados proxy_auth REQUIRED
http_access allow usuarios_autenticadosCrear usuarios
# Crear archivo de contraseñas y primer usuario
htpasswd -c /etc/squid/passwd usuario1
# Añadir más usuarios
htpasswd /etc/squid/passwd usuario2Archivos de log
| Archivo | Descripción |
|---|---|
/var/log/squid/access.log | Registro de todas las peticiones procesadas |
/var/log/squid/cache.log | Registro de eventos del servicio Squid |
/var/log/squid/store.log | Registro de objetos almacenados/eliminados de la caché |
Formato del access.log
timestamp elapsed client action/code size method URL user hierarchy content_type
- TCP_HIT: Objeto servido desde la caché.
- TCP_MISS: Objeto no encontrado en caché, obtenido del servidor origen.
- TCP_DENIED: Acceso denegado por ACL.
squidclient - Herramienta de diagnóstico
# Consultar estadísticas de la caché
squidclient mgr:info
# Ver estadísticas de uso de memoria
squidclient mgr:mem
# Ver contadores de tráfico
squidclient mgr:counters
# Ver las ACLs activas
squidclient mgr:active_requests
# Purgar un objeto de la caché
squidclient -m PURGE http://www.ejemplo.com/imagen.jpgVerificación y recarga de configuración
# Verificar la sintaxis de squid.conf
squid -k parse
# Recargar la configuración sin reiniciar
squid -k reconfigure
# Rotar los archivos de log
squid -k rotate
# Inicializar los directorios de caché
squid -zPara el examen: El comando
squid -zdebe ejecutarse antes del primer inicio de Squid para crear la estructura de directorios de la caché. Después de modificarsquid.conf, usasquid -k reconfigurepara aplicar los cambios sin interrumpir el servicio.
Trampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
-
El puerto por defecto de Squid es 3128, NO 8080 — muchos proxies usan 8080, pero Squid usa 3128. El examen puede ofrecer ambos como opciones.
-
Orden de
http_accesses critico: primera coincidencia gana — Squid procesa las reglas de arriba a abajo y aplica la primera que coincida. Si poneshttp_access deny allantes de las reglas allow, nadie tendra acceso. La ultima regla siempre debe serhttp_access deny all. -
transparentvsintercept— en versiones antiguas de Squid se usabahttp_port 3128 transparent. En versiones modernas el termino correcto esintercept. Ambos pueden aparecer en el examen; saber queinterceptes el actual. -
Dias de la semana en ACL
time: Thursday esH, Saturday esA— la notacion es S(Sunday), M(Monday), T(Tuesday), W(Wednesday), H(Thursday), F(Friday), A(Saturday). Confundir T(Tuesday) con Thursday o S(Sunday) con Saturday es un error clasico. -
squid -zse ejecuta ANTES del primer inicio — este comando crea la estructura de directorios de la cache. Sin ejecutarlo, Squid no puede arrancar si se ha configuradocache_dir. -
cache_dir ufs /ruta TAMANO L1 L2— los numeros despues del tamano son los subdirectorios de nivel 1 y nivel 2, NO niveles de cache. Los valores tipicos son16 256. El tamano esta en MB. -
Proxy transparente NO puede interceptar HTTPS sin romper TLS — el modo transparente redirige HTTP con iptables, pero HTTPS no puede inspeccionarse sin un certificado CA propio (SSL bumping), lo cual requiere configuracion adicional.
-
http_accessnecesita PRIMERO definir la ACL conacl— no puedes usar una ACL en una reglahttp_accesssi no la has definido antes. Primeroacl nombre tipo ..., despueshttp_access allow/deny nombre. -
ICP (Internet Cache Protocol) usa UDP 3130 — el puerto de ICP para comunicacion entre proxies en jerarquia es UDP 3130, no TCP. Si preguntan por la comunicacion entre proxies hermanos o padres, es ICP por UDP.
-
cache_peer parentvssibling— unparentreenvia peticiones que no tiene en cache al servidor origen. Unsiblingsolo comparte cache, nunca reenvia. Confundir estos roles es comun en preguntas de jerarquia de cache.