Servidor Proxy con Squid: Guía Completa de Configuración
Introducción
Los servidores proxy actúan como intermediarios entre los clientes e Internet, proporcionando funcionalidad crítica para organizaciones e individuos que buscan controlar, monitorear, almacenar en caché y asegurar el tráfico de red. Squid, el servidor proxy de código abierto líder en la industria, ha impulsado redes empresariales, ISPs e infraestructuras de entrega de contenido durante más de dos décadas, ofreciendo flexibilidad, rendimiento y riqueza de características sin igual.
Desarrollado originalmente en 1996, Squid ha evolucionado en un proxy de almacenamiento en caché sofisticado que admite HTTP, HTTPS, FTP y otros protocolos. Implementado por organizaciones que van desde pequeñas empresas hasta compañías Fortune 500, Squid maneja todo, desde simple almacenamiento en caché web hasta sistemas complejos de autenticación, filtrado de contenido, gestión de ancho de banda y arquitecturas de almacenamiento en caché jerárquico de múltiples niveles.
Esta guía completa te lleva a través del despliegue de un servidor proxy Squid listo para producción en Linux. Aprenderás procedimientos de instalación, configuración de autenticación, implementación de control de acceso, interceptación SSL/TLS (SSL bumping), optimización de caché, limitación de ancho de banda, registro y monitoreo, y técnicas de solución de problemas.
Ya sea implementando control de acceso a Internet corporativo, mejorando el rendimiento de la red a través del almacenamiento en caché, anonimizando el tráfico web, evitando restricciones geográficas, filtrando contenido o construyendo una infraestructura de proxy directo o inverso, esta guía proporciona la base para el despliegue profesional de proxy Squid.
Descripción General del Caso de Uso
¿Por Qué Desplegar un Servidor Proxy?
Los servidores proxy proporcionan numerosos beneficios para la gestión y seguridad de la red:
Almacenamiento en Caché de Contenido: Almacenar en caché contenido web frecuentemente accedido localmente, reduciendo drásticamente el consumo de ancho de banda y mejorando los tiempos de carga de páginas. Las grandes organizaciones ahorran dinero significativo en conectividad a Internet almacenando en caché recursos comunes.
Control de Acceso: Implementar políticas granulares de acceso a Internet, bloqueando contenido inapropiado, restringiendo el acceso a sitios específicos o limitando el uso de Internet a horarios comerciales. Esencial para instituciones educativas, bibliotecas y redes corporativas.
Gestión de Ancho de Banda: Controlar y priorizar la asignación de ancho de banda, evitando que aplicaciones intensivas en ancho de banda degraden el rendimiento de la red. Limitar velocidades de descarga, restringir transferencias de archivos grandes o implementar políticas de calidad de servicio.
Seguridad y Filtrado: Bloquear sitios web maliciosos, filtrar publicidad, prevenir descargas de malware y escanear contenido en busca de amenazas. Actuar como primera línea de defensa contra ataques basados en web.
Anonimato y Privacidad: Ocultar direcciones IP de clientes de servidores de destino, proporcionando privacidad para usuarios y protegiendo la topología de red interna de observación externa.
Registro y Monitoreo: Registro completo de toda la actividad de Internet para cumplimiento, análisis de seguridad o monitoreo de productividad. Rastrear uso de ancho de banda por usuario, identificar incidentes de seguridad o generar informes de uso.
Inspección SSL/TLS: Descifrar e inspeccionar tráfico HTTPS en busca de malware, prevención de pérdida de datos o cumplimiento de políticas mientras se mantienen conexiones cifradas a servidores de destino.
Acceso a Contenido Geográfico: Enrutar tráfico a través de proxies en diferentes ubicaciones para acceder a contenido restringido geográficamente o probar implementaciones de localización.
Balanceo de Carga: Distribuir tráfico a través de múltiples proxies upstream o cachés padre, mejorando el rendimiento y la confiabilidad.
Escenarios Comunes de Despliegue
Puerta de Enlace de Internet Corporativa: Proxy central para acceso a Internet de empleados con autenticación, filtrado de contenido, registro de uso y gestión de ancho de banda. Aplicar políticas de uso aceptable y proteger contra amenazas web.
Proxy de Institución Educativa: Escuelas y universidades filtrando contenido inapropiado, previniendo abuso de ancho de banda y monitoreando el uso de Internet de estudiantes para seguridad y cumplimiento.
Infraestructura de Caché de ISP: Proveedores de servicios de Internet desplegando Squid para almacenar en caché contenido popular, reduciendo costos de ancho de banda upstream y mejorando la experiencia del suscriptor.
Desarrollo y Pruebas: Desarrolladores usando proxies para probar aplicaciones bajo varias condiciones de red, interceptar llamadas API o depurar tráfico HTTPS.
Red de Entrega de Contenido (CDN): Cachés de proxy inverso sirviendo contenido estático, descargando servidores de origen y acelerando la entrega de contenido globalmente.
Navegación Enfocada en Privacidad: Individuos enrutando tráfico a través de servidores proxy personales para ocultar direcciones IP, eludir censura o evitar rastreo.
Puerta de Enlace API: Proxy sirviendo como puerta de enlace API, proporcionando autenticación, limitación de tasa, almacenamiento en caché y transformación de solicitud/respuesta para servicios backend.
Capacidades Técnicas
Un proxy Squid correctamente configurado proporciona:
- Proxy HTTP/HTTPS: Proxy directo para tráfico web con soporte SSL/TLS
- Proxy FTP: Soporte transparente del protocolo FTP
- Autenticación: Integración con LDAP, Active Directory, RADIUS, NCSA o backends de autenticación personalizados
- Listas de Control de Acceso (ACLs): Control granular de tráfico basado en IP, dominio, URL, tiempo, usuario, tipo de contenido o patrones personalizados
- Almacenamiento en Caché de Contenido: Almacenamiento en caché inteligente con almacenamiento en memoria y disco, jerarquías de caché y soporte de proxy padre
- SSL Bumping: Interceptación e inspección HTTPS con generación dinámica de certificados
- Limitación de Ancho de Banda: Modelado de tráfico y control de ancho de banda por usuario, red o tipo de contenido
- Registro: Registros de acceso detallados en múltiples formatos para análisis y cumplimiento
- Integración ICAP: Adaptación de contenido y escaneo de virus a través del protocolo ICAP
- Alta Disponibilidad: Soporte para conmutación por error, balanceo de carga y configuraciones redundantes
Requisitos
Requisitos del Sistema
Requisitos Mínimos (Oficina Pequeña, 10-50 usuarios):
- CPU: 2 núcleos a 2.0+ GHz
- RAM: 2GB (1GB para Squid + 1GB para SO)
- Almacenamiento: 20GB (10GB para caché + 10GB para SO y registros)
- Red: Interfaz de red de 100 Mbps
- SO: Ubuntu 20.04/22.04, Debian 11/12, CentOS 8, Rocky Linux 8/9
Requisitos Recomendados (Empresa Mediana, 100-500 usuarios):
- CPU: 4 núcleos a 2.5+ GHz
- RAM: 8GB (4GB para caché de Squid + 4GB para SO)
- Almacenamiento: 100GB SSD (50GB caché + 50GB registros/SO)
- Red: Interfaz de red de 1 Gbps
- SO: Ubuntu 22.04 LTS
Requisitos de Alto Rendimiento (Organización Grande, 1000+ usuarios o tráfico alto):
- CPU: 8+ núcleos a 3.0+ GHz
- RAM: 16-32GB
- Almacenamiento: 500GB+ SSD o NVMe para caché, disco separado para registros
- Red: Interfaz de red de 10 Gbps o múltiples interfaces de 1 Gbps
- SO: Ubuntu 22.04 LTS con ajuste del kernel
Consideraciones de Almacenamiento en Caché
Planificación de Tamaño de Caché:
- Oficina pequeña (10-50 usuarios): Caché de 10-20GB
- Empresa mediana (100-500 usuarios): Caché de 50-200GB
- Organización grande (1000+ usuarios): Caché de 500GB-2TB+
Rendimiento de Almacenamiento:
- HDD: Aceptable para despliegues pequeños, IOPS limitados
- SSD: Recomendado para despliegues medianos a grandes, mejora de rendimiento 10x+
- NVMe: Ideal para entornos de alto tráfico, máximo IOPS y rendimiento
- Caché RAM: Crítico para objetos frecuentemente accedidos, asignar 10-20% de caché a RAM
Requisitos de Red
Posicionamiento de Red: Squid típicamente se sitúa entre la red de clientes y la puerta de enlace de Internet, interceptando todo el tráfico HTTP/HTTPS saliente.
Configuración de Puertos:
- 3128/TCP: Puerto de proxy Squid predeterminado (configurable)
- 3129/TCP: Puerto de intercepción HTTPS/SSL (si se usa SSL bumping)
- 80/TCP: Redirección de proxy transparente opcional
- 443/TCP: Redirección HTTPS transparente opcional
Consideraciones de Ancho de Banda: El servidor proxy debe tener suficiente ancho de banda para manejar el tráfico agregado de clientes más sobrecarga para fallos de caché.
Requisitos de Software
Versión de Squid: Squid 4.x o 5.x recomendado (última versión estable).
Soporte SSL/TLS: OpenSSL o GnuTLS para proxy HTTPS y SSL bumping.
Backends de Autenticación:
- NCSA: Autenticación básica de usuario/contraseña
- LDAP: Integración con directorios LDAP
- Samba: Autenticación de Active Directory a través de Samba/Winbind
- RADIUS: Autenticación de servidor RADIUS
- External: Scripts de autenticación personalizados
Componentes Opcionales:
- SquidAnalyzer o SARG: Herramientas de análisis de registros e informes
- ClamAV: Escaneo antivirus a través de ICAP
- c-icap: Servidor ICAP para adaptación de contenido
Conocimientos Previos Requeridos
- Fundamentos de administración de sistemas Linux
- Conceptos básicos de redes (TCP/IP, DNS, enrutamiento)
- Comprensión de protocolos HTTP/HTTPS
- Experiencia en configuración de firewall
- Competencia en editor de texto (nano, vim)
Configuración Paso a Paso
Paso 1: Preparación del Sistema
Actualizar paquetes del sistema:
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
# CentOS/Rocky Linux
sudo dnf update -y
Instalar herramientas esenciales:
# Ubuntu/Debian
sudo apt install -y curl wget net-tools
# CentOS/Rocky Linux
sudo dnf install -y curl wget net-tools
Paso 2: Instalar Squid
Ubuntu/Debian:
sudo apt install squid -y
CentOS/Rocky Linux:
sudo dnf install squid -y
Verificar instalación:
squid -v
Debe mostrar la versión de Squid y opciones de compilación.
Verificar estado inicial:
sudo systemctl status squid
Paso 3: Respaldar Configuración Predeterminada
Crear respaldo de la configuración original:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
Ver configuración actual (eliminar comentarios y líneas en blanco):
grep -v "^#" /etc/squid/squid.conf | grep -v "^$"
Paso 4: Configuración Básica de Squid
Crear nueva configuración simplificada:
sudo nano /etc/squid/squid.conf
Agregar la siguiente configuración básica:
# Configuración del Servidor Proxy Squid
# Configuración de Red
http_port 3128
# Configuración de Caché
cache_dir ufs /var/spool/squid 10000 16 256
cache_mem 256 MB
maximum_object_size 100 MB
minimum_object_size 0 KB
maximum_object_size_in_memory 512 KB
# Política de reemplazo de caché
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF
# Definiciones de ACL
acl localnet src 10.0.0.0/8 # RFC 1918 red privada local
acl localnet src 172.16.0.0/12 # RFC 1918 red privada local
acl localnet src 192.168.0.0/16 # RFC 1918 red privada local
acl localnet src fc00::/7 # RFC 4193 rango de red privada local
acl localnet src fe80::/10 # RFC 4291 rango de red link-local
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # puertos no registrados
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
# Control de Acceso
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
# Registro
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
# Nombre de host
visible_hostname squid-proxy
# Configuraciones administrativas
coredump_dir /var/spool/squid
# Patrones de actualización para almacenamiento en caché
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Guardar y salir (Ctrl+X, Y, Enter).
Desglose de Configuración:
- http_port 3128: Puerto de escucha del proxy
- cache_dir: Ubicación de caché en disco, tamaño (10GB) y estructura de directorios
- cache_mem: RAM asignada para objetos calientes
- maximum_object_size: Objeto más grande para almacenar en caché (100MB)
- ACLs: Listas de control de acceso que definen rangos de red, puertos y métodos
- http_access: Reglas que determinan quién puede usar el proxy
- refresh_pattern: Reglas de frescura de caché para diferentes tipos de contenido
Paso 5: Inicializar Directorios de Caché
Crear estructura de directorios de caché:
sudo squid -z
Esto inicializa directorios de intercambio. Toma unos momentos.
Establecer propiedad apropiada:
sudo chown -R proxy:proxy /var/spool/squid
sudo chown -R proxy:proxy /var/log/squid
Paso 6: Iniciar y Habilitar Squid
Habilitar Squid para iniciar al arrancar:
sudo systemctl enable squid
Iniciar Squid:
sudo systemctl start squid
Verificar estado:
sudo systemctl status squid
Debe mostrar "active (running)".
Verificar registros para errores:
sudo tail -f /var/log/squid/cache.log
Paso 7: Configurar Firewall
Permitir puerto del proxy:
# UFW (Ubuntu/Debian)
sudo ufw allow 3128/tcp
# Firewalld (CentOS/Rocky)
sudo firewall-cmd --permanent --add-port=3128/tcp
sudo firewall-cmd --reload
Paso 8: Probar Conexión del Proxy
Desde una máquina cliente en la misma red, probar el proxy:
Cliente Linux/macOS:
curl -x http://IP_SERVIDOR_PROXY:3128 http://example.com
Debe devolver contenido HTML de example.com.
Configuración del Navegador:
- Abrir configuración del navegador
- Navegar a configuración de Red/Proxy
- Seleccionar "Configuración manual de proxy"
- Proxy HTTP:
IP_SERVIDOR_PROXY - Puerto:
3128 - Aplicar y probar visitando sitios web
Verificar registro de acceso para verificar solicitudes:
sudo tail -f /var/log/squid/access.log
Debe mostrar entradas para solicitudes web.
Configuración
Configuración de Autenticación
Autenticación Básica NCSA
Crear archivo de contraseñas:
sudo apt install apache2-utils -y # Para utilidad htpasswd
sudo htpasswd -c /etc/squid/passwords usuario1
Ingresar contraseña cuando se solicite. Agregar más usuarios (sin bandera -c):
sudo htpasswd /etc/squid/passwords usuario2
Actualizar squid.conf:
# Configuración de autenticación
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm Servidor Proxy Squid
auth_param basic credentialsttl 2 hours
# ACL para usuarios autenticados
acl authenticated_users proxy_auth REQUIRED
# Permitir acceso autenticado
http_access allow authenticated_users
http_access deny all
Reiniciar Squid:
sudo systemctl restart squid
Probar autenticación:
curl -x http://usuario1:contraseña@IP_SERVIDOR_PROXY:3128 http://example.com
Autenticación LDAP
Instalar ayudante LDAP:
sudo apt install squid-ldap-auth -y
Configurar autenticación LDAP en squid.conf:
auth_param basic program /usr/lib/squid/basic_ldap_auth \
-b "dc=ejemplo,dc=com" \
-D "cn=admin,dc=ejemplo,dc=com" \
-w "contraseña_admin" \
-f "uid=%s" \
-h ldap.ejemplo.com
auth_param basic realm Autenticación LDAP de Squid
auth_param basic credentialsttl 2 hours
acl authenticated_users proxy_auth REQUIRED
http_access allow authenticated_users
http_access deny all
Reemplazar marcadores:
dc=ejemplo,dc=com: Tu DN base LDAPcn=admin,dc=ejemplo,dc=com: DN de enlace LDAPcontraseña_admin: Contraseña de enlace LDAPldap.ejemplo.com: Nombre de host del servidor LDAP
Listas de Control de Acceso (ACLs)
Bloquear Sitios Web Específicos
Crear lista de sitios bloqueados:
sudo nano /etc/squid/blocked_sites.txt
Agregar dominios a bloquear (uno por línea):
.facebook.com
.twitter.com
.youtube.com
.instagram.com
El punto inicial bloquea el dominio y todos los subdominios.
Actualizar squid.conf:
# Definir ACL para sitios bloqueados
acl blocked_sites dstdomain "/etc/squid/blocked_sites.txt"
# Denegar acceso a sitios bloqueados
http_access deny blocked_sites
Recargar configuración:
sudo squid -k reconfigure
Control de Acceso Basado en Tiempo
Permitir acceso solo durante horario comercial:
# Definir horario comercial (Lunes-Viernes, 9 AM - 5 PM)
acl business_hours time MTWHF 09:00-17:00
# Permitir acceso durante horario comercial
http_access allow localnet business_hours
http_access deny localnet
Control de Acceso Basado en IP
Permitir direcciones IP o redes específicas:
# Definir redes permitidas
acl allowed_network src 192.168.1.0/24
acl admin_ips src 192.168.1.10 192.168.1.11
# Permitir IPs de admin con acceso sin restricciones
http_access allow admin_ips
# Permitir red con restricciones
http_access allow allowed_network
Bloquear Descargas de Archivos
Prevenir descarga de tipos de archivo específicos:
# Definir extensiones de archivo bloqueadas
acl blocked_files urlpath_regex -i \.exe$ \.msi$ \.dmg$ \.zip$ \.rar$ \.tar\.gz$
# Denegar descargas
http_access deny blocked_files
Control de Ancho de Banda por Tipo de Contenido
Limitar ancho de banda para streaming de video:
# Definir contenido de video
acl video_content urlpath_regex -i \.mp4$ \.avi$ \.mkv$ \.flv$
# Aplicar límite de ancho de banda (en bytes por segundo)
delay_pools 1
delay_class 1 1
delay_parameters 1 32000/32000 # 256 Kbps
delay_access 1 allow video_content
delay_access 1 deny all
Interceptación SSL/TLS (SSL Bumping)
Generar Autoridad Certificadora SSL
Crear certificado CA para SSL bumping:
sudo mkdir -p /etc/squid/ssl_cert
cd /etc/squid/ssl_cert
# Generar clave privada CA
sudo openssl genrsa -out squid-ca-key.pem 4096
# Generar certificado CA
sudo openssl req -new -x509 -days 3650 -key squid-ca-key.pem \
-out squid-ca-cert.pem -utf8 \
-subj "/C=ES/ST=Estado/L=Ciudad/O=Organización/OU=Squid Proxy/CN=Squid CA"
# Combinar para Squid
sudo cat squid-ca-cert.pem squid-ca-key.pem > squid-ca.pem
# Crear directorio para certificados generados
sudo mkdir -p /var/lib/squid/ssl_db
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
# Establecer permisos
sudo chown -R proxy:proxy /var/lib/squid/ssl_db
sudo chown -R proxy:proxy /etc/squid/ssl_cert
Configurar SSL Bumping
Actualizar squid.conf:
# Configuración de SSL Bump
http_port 3128 ssl-bump \
cert=/etc/squid/ssl_cert/squid-ca-cert.pem \
key=/etc/squid/ssl_cert/squid-ca-key.pem \
generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 4MB
# Reglas de SSL Bump
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3
ssl_bump peek step1
ssl_bump stare step2
ssl_bump bump step3
# No hacer bump en sitios bancarios o de pago (opcional)
acl nobump_sites ssl::server_name .paypal.com .banco.com
ssl_bump splice nobump_sites
Reiniciar Squid:
sudo systemctl restart squid
Instalar Certificado CA en Clientes
Distribuir /etc/squid/ssl_cert/squid-ca-cert.pem a dispositivos cliente e instalar como CA de confianza:
Windows:
- Hacer doble clic en archivo de certificado
- Instalar Certificado → Máquina Local → Autoridades de Certificación Raíz de Confianza
macOS:
- Hacer doble clic en archivo de certificado
- Agregar a llavero del Sistema
- Marcar como "Confiar Siempre"
Linux:
sudo cp squid-ca-cert.pem /usr/local/share/ca-certificates/squid-ca.crt
sudo update-ca-certificates
Optimización de Caché
Optimizar Caché para Contenido Web
# Directorio de caché (100GB, 16 directorios de primer nivel, 256 de segundo nivel)
cache_dir ufs /var/spool/squid 100000 16 256
# Caché de memoria (1GB para objetos frecuentemente accedidos)
cache_mem 1024 MB
# Tamaños máximos de objeto
maximum_object_size 200 MB # Objeto más grande para almacenar en disco
maximum_object_size_in_memory 1 MB # Objeto más grande en caché RAM
# Tamaño mínimo de objeto para almacenar en caché
minimum_object_size 0 KB
# Políticas de reemplazo de caché
cache_replacement_policy heap LFUDA # Menos Frecuentemente Usado con Envejecimiento Dinámico
memory_replacement_policy heap GDSF # Greedy-Dual Size Frequency
# Patrones de actualización para diferentes tipos de contenido
refresh_pattern -i \.(jpg|jpeg|png|gif|bmp|ico)$ 10080 90% 43200 # Imágenes
refresh_pattern -i \.(js|css)$ 1440 40% 10080 # Scripts/Estilos
refresh_pattern -i \.(pdf|doc|docx|xls|xlsx)$ 10080 90% 43200 # Documentos
refresh_pattern -i \.(zip|rar|tar|gz|exe)$ 10080 90% 43200 # Archivos
refresh_pattern ^ftp: 1440 20% 10080 # FTP
refresh_pattern ^gopher: 1440 0% 1440 # Gopher
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 # Contenido dinámico
refresh_pattern . 0 20% 4320 # Predeterminado
# No almacenar en caché contenido dinámico
acl dynamic_content urlpath_regex cgi-bin \?
cache deny dynamic_content
# Almacenar caché en directorio
cache_swap_low 90
cache_swap_high 95
Múltiples Directorios de Caché
Usar múltiples discos físicos para mejor rendimiento de I/O:
cache_dir ufs /var/spool/squid1 50000 16 256
cache_dir ufs /var/spool/squid2 50000 16 256
cache_dir ufs /var/spool/squid3 50000 16 256
Inicializar todos los directorios de caché:
sudo mkdir -p /var/spool/squid1 /var/spool/squid2 /var/spool/squid3
sudo chown proxy:proxy /var/spool/squid*
sudo squid -z
Configuración de Proxy Padre
Configurar Squid para usar proxy padre upstream:
# Definir proxy padre
cache_peer proxy.padre.com parent 3128 0 no-query default
# Usar padre para todas las solicitudes
never_direct allow all
Para proxy padre con autenticación:
cache_peer proxy.padre.com parent 3128 0 no-query default login=usuario:contraseña
Configuración de Proxy Transparente
Interceptar tráfico transparentemente sin configuración del cliente:
Actualizar squid.conf:
http_port 3129 intercept
Configurar iptables para redirigir tráfico:
# Redirigir tráfico HTTP a Squid
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129
# Guardar reglas de iptables
sudo iptables-save | sudo tee /etc/iptables/rules.v4
Para interceptación transparente HTTPS con SSL bumping:
https_port 3130 intercept ssl-bump cert=/etc/squid/ssl_cert/squid-ca-cert.pem key=/etc/squid/ssl_cert/squid-ca-key.pem generate-host-certificates=on
Redirigir tráfico HTTPS:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3130
Optimización
Ajuste de Rendimiento
Aumentar Descriptores de Archivo
sudo nano /etc/security/limits.conf
Agregar:
proxy soft nofile 65536
proxy hard nofile 65536
Actualizar squid.conf:
max_filedescriptors 65536
Optimizar Procesos Worker
Para sistemas multinúcleo:
workers 4 # Establecer al número de núcleos de CPU
cpu_affinity_map process_numbers=1,2,3,4 cores=1,2,3,4
Optimización de Memoria
# Aumentar pools de memoria
memory_pools on
memory_pools_limit 512 MB
# Optimizar almacenamiento en caché de objetos en memoria
cache_mem 2048 MB
maximum_object_size_in_memory 2 MB
Optimización de Red
# Aumentar buffers de red
read_ahead_gap 32 KB
# Persistencia de conexión
client_persistent_connections on
server_persistent_connections on
# Soporte de pipelining
pipeline_prefetch on
Gestión de Ancho de Banda
Límites de Ancho de Banda por Usuario
# Crear delay pools
delay_pools 2
# Pool 1: Usuarios autenticados (512 Kbps por usuario)
delay_class 1 2
delay_parameters 1 -1/-1 64000/64000
delay_access 1 allow authenticated_users
# Pool 2: Red de invitados (256 Kbps agregado)
delay_class 2 1
delay_parameters 2 32000/32000
delay_access 2 allow guest_network
Control de Ancho de Banda Basado en Tiempo
# Limitar ancho de banda durante horario comercial
acl business_hours time MTWHF 09:00-17:00
delay_pools 1
delay_class 1 1
delay_parameters 1 128000/128000 # 1 Mbps durante horario comercial
delay_access 1 allow localnet business_hours
delay_access 1 deny all
Rotación de Registros
Configurar rotación automática de registros:
sudo nano /etc/logrotate.d/squid
/var/log/squid/*.log {
daily
rotate 14
compress
delaycompress
notifempty
missingok
nocreate
sharedscripts
postrotate
/usr/sbin/squid -k rotate
endscript
}
Solución de Problemas
Squid No Inicia
Verificar sintaxis de configuración:
sudo squid -k parse
Reporta errores de configuración con números de línea.
Verificar registros:
sudo tail -n 50 /var/log/squid/cache.log
Problemas comunes:
- Errores de permisos en directorios de caché
- Puerto ya en uso
- Sintaxis ACL inválida
Verificar directorios de caché:
ls -la /var/spool/squid
Debe ser propiedad del usuario proxy.
Re-inicializar caché:
sudo rm -rf /var/spool/squid/*
sudo squid -z
Errores de Conexión Rechazada
Verificar que Squid esté ejecutándose:
sudo systemctl status squid
Verificar puerto de escucha:
sudo netstat -tlnp | grep 3128
Debe mostrar proceso squid escuchando.
Probar localmente:
curl -x http://127.0.0.1:3128 http://example.com
Si funciona localmente pero no remotamente, verificar firewall.
Verificar firewall:
# UFW
sudo ufw status
# Firewalld
sudo firewall-cmd --list-all
Autenticación No Funciona
Probar autenticación manualmente:
echo "usuario1 contraseña" | /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
Debe devolver OK para credenciales válidas, ERR para inválidas.
Verificar permisos del archivo de contraseñas:
ls -la /etc/squid/passwords
Debe ser legible por usuario proxy:
sudo chown root:proxy /etc/squid/passwords
sudo chmod 640 /etc/squid/passwords
Aumentar TTL de autenticación:
auth_param basic credentialsttl 8 hours
Problemas de SSL Bumping
Verificar instalación de certificado CA en cliente.
Verificar base de datos SSL:
ls -la /var/lib/squid/ssl_db
Regenerar base de datos SSL:
sudo rm -rf /var/lib/squid/ssl_db
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
sudo chown -R proxy:proxy /var/lib/squid/ssl_db
Verificar errores SSL en registros:
sudo grep -i ssl /var/log/squid/cache.log
Alto Uso de CPU
Identificar causa:
top -u proxy
Causas comunes:
- Demasiados procesos worker
- Registro excesivo
- ACLs complejas o patrones regex
- Sobrecarga de SSL bumping
Optimizar ACLs - usar ACLs simples antes de regex complejos:
# Verificación de dominio rápida primero
acl blocked_sites dstdomain .ejemplo.com
# Regex más lento solo si es necesario
acl complex_block url_regex -i patronmalo
Reducir verbosidad de registros:
debug_options ALL,1
Caché No Funciona
Verificar tasa de aciertos de caché:
sudo squid-client mgr:info
Buscar estadísticas de caché.
Verificar tamaño del directorio de caché:
du -sh /var/spool/squid
Verificar patrones de actualización - asegurar que el contenido sea almacenable en caché:
sudo tail -f /var/log/squid/access.log
Buscar TCP_HIT (acierto de caché) vs TCP_MISS (fallo de caché).
Forzar caché para pruebas:
# Ignorar encabezados de control de caché (¡solo para pruebas!)
refresh_pattern . 0 100% 999999 ignore-no-cache ignore-no-store ignore-private
Monitoreo e Informes
Monitoreo en Tiempo Real
Ver conexiones activas:
sudo squid-client mgr:active_requests
Información de caché:
sudo squid-client mgr:info | grep -A 20 "Resource usage"
Registro de acceso en tiempo real:
sudo tail -f /var/log/squid/access.log
Analizador de Registros SARG
Instalar SARG (Generador de Informes de Análisis de Squid):
sudo apt install sarg -y
Configurar SARG:
sudo nano /etc/sarg/sarg.conf
Actualizar:
access_log /var/log/squid/access.log
output_dir /var/www/html/squid-reports
Generar informes:
sudo sarg
Ver informes en http://IP_SERVIDOR_PROXY/squid-reports/.
SquidAnalyzer
Instalar SquidAnalyzer para informes avanzados:
sudo apt install squidanalyzer -y
Configurar y generar informes:
sudo squid-analyzer -c /etc/squidanalyzer/squidanalyzer.conf
Conclusión
Ahora tienes un servidor proxy Squid completamente operacional proporcionando control completo de acceso a Internet, almacenamiento en caché, autenticación y capacidades de monitoreo. Esta solución de grado empresarial ofrece la flexibilidad y el rendimiento necesario para organizaciones de todos los tamaños.
Logros clave de esta guía:
- Servidor proxy listo para producción con almacenamiento en caché, autenticación y control de acceso
- Interceptación SSL/TLS para inspección y filtrado de tráfico HTTPS
- Políticas de acceso granulares usando ACLs para control basado en tiempo, usuario, contenido y red
- Optimización de rendimiento a través de almacenamiento en caché, gestión de ancho de banda y ajuste de recursos
- Registro completo para cumplimiento, análisis de seguridad y monitoreo de uso
- Múltiples backends de autenticación soportando NCSA, LDAP, Active Directory y sistemas personalizados
La arquitectura modular de Squid permite la adición incremental de características. Comienza con funcionalidad básica de proxy de reenvío e implementa progresivamente autenticación, SSL bumping, filtrado de contenido y almacenamiento en caché avanzado a medida que evolucionan los requisitos.
El mantenimiento regular incluye monitorear tasas de aciertos de caché, revisar registros de acceso para incidentes de seguridad, actualizar listas de sitios bloqueados, optimizar el tamaño de caché según patrones de uso y mantener Squid actualizado para parches de seguridad.
Ya sea controlando el acceso a Internet corporativo, mejorando el rendimiento de la red, filtrando contenido o construyendo jerarquías de proxy sofisticadas, Squid proporciona la base para infraestructura de proxy profesional.
¡Usa el proxy sabiamente!


