// Engineering Log
Servidores proxy: Parte 6 — Squid
Publicado el 21.09.2026
Squid — un proxy HTTP libre con caché, uno de los servidores proxy más antiguos que aún se desarrollan. Funciona como proxy directo para los usuarios de la red, puede cachear respuestas de servidores web, autenticar usuarios, filtrar direcciones y llevar un registro detallado de las peticiones. Squid también puede actuar como proxy inverso delante de un servidor web, pero hoy en día para esa tarea suelen elegir Nginx o HAProxy.
Versiones
La rama actual es Squid 7. En septiembre de 2026 la última versión es la 7.7, publicada el 24 de agosto de 2026. Los desarrolladores mantienen solo la última versión estable; las ramas más antiguas son mantenidas por las distribuciones. En Debian 12 viene Squid 5.7, en Debian 13 — 6.13, en la rama testing — 7.7.
En Squid 6 se eliminó el soporte para el protocolo Gopher: esas peticiones ahora se tratan como peticiones con protocolo desconocido. Las menciones a Gopher en guías antiguas se pueden ignorar.
Por qué el caché ya no es lo principal
Squid se creó en una época en la que la mayor parte de los sitios funcionaba por HTTP y los canales eran lentos y caros. Un proxy que entregaba a cien usuarios la misma imagen desde su memoria ahorraba tráfico de forma notable.
Hoy casi todos los sitios funcionan por HTTPS. Para esa conexión el navegador envía al proxy el comando CONNECT con el nombre del sitio y el puerto; después el proxy solo transmite los datos cifrados entre el navegador y el servidor. No ve el contenido y no puede cachearlo. Además, muchas páginas se generan para un usuario concreto y están marcadas por el servidor como no cacheables.
El caché de Squid sigue siendo útil donde el tráfico va por HTTP y se repite: por ejemplo, al actualizar paquetes en muchos servidores desde mirrors que funcionan por HTTP (la integridad de los paquetes se comprueba con firmas). Pero para esa tarea específica existen programas especializados como apt-cacher-ng.
El valor principal de Squid hoy es el control de acceso, la autorización de usuarios y el registro del tráfico web. Incluso con HTTPS el proxy ve a qué sitio accede el usuario, cuánto datos se transmitieron y cuándo.
Instalación
En Debian y Ubuntu:
sudo apt install squid apache2-utilsEl paquete apache2-utils es necesario para la utilidad htpasswd, que crea el archivo de contraseñas. La configuración está en /etc/squid/squid.conf, los registros en /var/log/squid/.
Configuración con autenticación y filtrado
A continuación — configuración para una oficina: proxy en el puerto 3128, acceso solo desde la red local y solo con contraseña, bloqueo de sitios concretos y una caché pequeña.
http_port 3128
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic children 5
auth_param basic realm Proxy
auth_param basic credentialsttl 1 hour
acl localnet src 192.168.0.0/16
acl SSL_ports port 443
acl Safe_ports port 80 443
acl CONNECT method CONNECT
acl auth proxy_auth REQUIRED
acl blocked dstdomain .example.com .example.org
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny blocked
http_access allow localnet auth
http_access deny all
cache_mem 256 MB
cache_dir ufs /var/spool/squid 10000 16 256
maximum_object_size 200 MBCómo funciona esto:
auth_paramconecta el programa de verificación de contraseñasbasic_ncsa_auth, que lee un archivo en formato htpasswd;acldefine condiciones con nombre: direcciones de clientes (src), puertos, el método CONNECT, el requisito de autenticación (proxy_auth REQUIRED), dominios de destino (dstdomain; el punto al inicio significa «dominio y todos sus subdominios»);http_access— reglas de acceso. Se comprueban de arriba abajo, se aplica la primera que coincida, por eso las denegaciones van antes que los permisos, y la última líneadeny allcierra todo lo demás;deny CONNECT !SSL_portsno permite usar el proxy como túnel hacia puertos arbitrarios — es una protección estándar de la configuración por defecto;cache_mem— tamaño del caché en memoria;cache_dir— caché en disco (10 000 MB);maximum_object_size— el objeto más grande que se guardará.
El filtro dstdomain funciona también para HTTPS: en la orden CONNECT el proxy recibe el nombre del sitio, por lo que se pueden bloquear dominios sin descifrar el tráfico.
Usuarios y verificación:
sudo htpasswd -c /etc/squid/passwords ivan
sudo htpasswd /etc/squid/passwords olga
sudo squid -k parse
sudo systemctl restart squid
curl -x http://ivan:CONTRASEÑA@192.0.2.10:3128 https://example.net -ILa opción -c crea el archivo, por eso para el segundo y siguientes usuarios no se indica. El comando squid -k parse verifica la configuración antes de reiniciar, y tras pequeños cambios en lugar de reiniciar basta con squid -k reconfigure.
Configuración de clientes
- Computadoras de los empleados. El proxy se configura en las opciones de red del sistema, y los navegadores lo toman de ahí. En redes con Active Directory la dirección del proxy se distribuye mediante políticas de grupo. Para reglas flexibles (qué direcciones van por proxy y cuáles directamente) se usa un archivo de configuración automática PAC.
- Servidores y programas de línea de comandos. La mayoría de utilidades entienden las variables de entorno
http_proxyyhttps_proxy, por ejemplohttps_proxy=http://ivan:CONTRASEÑA@192.0.2.10:3128. Para apt el proxy se configura por separado, con la líneaAcquire::http::Proxy "http://192.0.2.10:3128";en un archivo dentro de/etc/apt/apt.conf.d/. - Excepciones. Las direcciones internas y servicios en la red local normalmente se envían directamente, sin pasar por el proxy: la variable
no_proxyo el campo correspondiente en las opciones del sistema.
Registro del tráfico
Cada petición se escribe en /var/log/squid/access.log: hora, duración, dirección del cliente, resultado, tamaño de la respuesta, método, dirección y nombre de usuario. Por el campo resultado se ve qué pasó con la petición:
TCP_TUNNEL— conexión HTTPS vía CONNECT, el proxy solo transmitió datos;TCP_MISS— el objeto no estaba en caché; se obtuvo del servidor;TCP_HITyTCP_MEM_HIT— la respuesta se entregó desde la caché;TCP_DENIED— la petición fue denegada por las reglas.
De los registros se generan informes por usuarios y sitios — manualmente o con analizadores de logs de Squid, por ejemplo SARG. Limitar la velocidad para usuarios o grupos es posible con pools de retardo (delay_pools).
SslBump: descifrado de HTTPS
Para cachear y filtrar el contenido de páginas HTTPS, no solo los nombres de sitio, Squid dispone del mecanismo SslBump. El proxy se coloca en medio: descifra la conexión, inspecciona el contenido y vuelve a cifrarla con un certificado que él mismo emite. Para que los navegadores no muestren advertencias hay que instalar el certificado raíz del proxy en todos los dispositivos clientes. En Debian para esto se necesita el paquete squid-openssl.
Desde la versión 3.5 Squid tiene el modo peek-and-splice. El proxy «echa un vistazo» al inicio de la conexión TLS, donde se transmite el nombre del sitio (SNI), y decide qué hacer: descifrar la conexión (bump), dejarla pasar sin descifrar (splice) o interrumpirla. La regla ssl::server_name permite, por ejemplo, pasar sin descifrar bancos y servicios gubernamentales.
Antes de activar el descifrado conviene valorar las consecuencias:
- Ley y ética. HTTPS está diseñado para que nadie lea la comunicación del usuario. La documentación de Squid advierte explícitamente que descifrar HTTPS sin el consentimiento y conocimiento de los usuarios puede violar normas éticas y la ley. En la empresa solo es admisible con una política aprobada y notificación a los empleados; no debe descifrarse el tráfico de dispositivos personales.
- Seguridad. Un proxy con la clave privada del certificado raíz se convierte en el activo más valioso de la red: su compromiso abre todo el tráfico.
- Compatibilidad. Aplicaciones que validan estrictamente el certificado del servidor (certificate pinning) dejarán de funcionar a través de un proxy que descifra.
Si solo se necesita bloquear sitios por nombre, no es necesario descifrar: basta con dstdomain en modo proxy explícito o ssl::server_name con la acción splice.
Errores típicos
- La regla de permiso está antes que la de denegación. Squid se detiene en el primer
http_accessque encaja, por esodeny blockedsituado debajo deallow localnetno funcionará. - Falta la línea
http_access deny allal final. Si ninguna regla coincide, Squid aplica la acción opuesta a la última regla de la lista. El comportamiento se vuelve confuso; por eso la última regla siempre se escribe explícita. - Proxy abierto.
allow allsin restricción de direcciones convierte el servidor en proxy abierto, que pronto encontrarán y usarán terceros. - Caché no inicializado. Tras añadir
cache_dirlos directorios de caché los crea el comandosquid -z; en Debian esto lo hace el script de arranque del servicio, pero al instalar manualmente es fácil omitir este paso. - La contraseña se transmite en texto claro. La autenticación básica manda la contraseña sin cifrar. Dentro de una red de oficina suele ser aceptable; por Internet — no.
Ventajas y limitaciones
Ventajas:
- reglas de acceso flexibles por direcciones, usuarios, dominios, tiempo y tipos de contenido;
- autenticación mediante archivo de contraseñas, LDAP y Active Directory;
- registro detallado de peticiones y analizadores listos para generar informes;
- limitación de velocidad mediante pools de retardo;
- proyecto maduro con documentación extensa.
Limitaciones:
- el cache ayuda poco con HTTPS, y para trabajar plenamente con HTTPS se necesita descifrado con todas sus consecuencias;
- fichero de configuración grande y no siempre sencillo;
- como proxy inverso y balanceador queda por detrás de Nginx y HAProxy;
- la caché en disco requiere espacio y memoria.
Cuándo elegir Squid
Squid es apropiado cuando en la red hace falta dar acceso a Internet a los empleados por contraseña, bloquear ciertos sitios y obtener informes sobre quién y cuánto accedió a qué recursos. Si solo se necesita un proxy SOCKS5 para aplicaciones — es más simple Dante; si hacen falta proxies HTTP y SOCKS con límites de tráfico para varios usuarios — 3proxy.
// Contact
¿Necesitas ayuda?
Escríbeme y te ayudaré a resolver el problema
Respondo en un día laborable (03:00-13:00 GMT)
Или оставьте заявку здесь:
// Related