--- title: "Cómo configurar un proxy Squid con autenticación en Ubuntu" description: "Instala Squid en Ubuntu 24.04 como proxy HTTP y HTTPS con usuario y contraseña, bloquea dominios, activa la caché en disco y limita el acceso con UFW." category: "Casos de Uso" language: es source: https://cubepath.com/es/docs/casos-de-uso/servidor-proxy-con-squid updated: 2026-09-25 --- # Cómo configurar un proxy Squid con autenticación en Ubuntu Squid es un proxy HTTP con caché muy extendido: permite navegar a través de un servidor, controlar a qué sitios se accede, registrar el tráfico y guardar en caché contenido estático. En este tutorial instalarás Squid en Ubuntu 24.04 como proxy de reenvío (forward proxy) con autenticación por usuario y contraseña, bloquearás dominios, activarás la caché en disco y limitarás el acceso con UFW. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM y unos GB libres en disco para la caché. - Un usuario no root con privilegios `sudo` y UFW activo con SSH permitido. - La IP pública desde la que te conectarás al proxy (`your_client_ip`), si quieres restringir el acceso por firewall. > Advertencia: un proxy abierto a Internet sin autenticación se usa para spam y ataques en cuestión de horas. No elimines la autenticación ni la regla final `http_access deny all`. ## Paso 1: Instalar Squid Instala Squid y `apache2-utils`, que proporciona `htpasswd` para crear el archivo de contraseñas: ```bash sudo apt update sudo apt install squid apache2-utils ``` El paquete arranca el servicio automáticamente en el puerto 3128. Compruébalo: ```bash systemctl status squid --no-pager ``` ```output ● squid.service - Squid Web Proxy Server Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; preset: enabled) Active: active (running) since Thu 2026-09-25 10:20:11 UTC; 12s ago ``` ```bash sudo ss -ltnp | grep 3128 ``` ```output LISTEN 0 256 *:3128 *:* users:(("squid",pid=2141,fd=11)) ``` ## Paso 2: Entender dónde va tu configuración El archivo principal es `/etc/squid/squid.conf`. Es muy largo porque documenta todas las directivas, así que en lugar de editarlo es más limpio añadir tu configuración en `/etc/squid/conf.d/`, que Ubuntu incluye justo en el punto donde van las reglas de acceso propias. Compruébalo: ```bash grep -n -E '^(include|http_access)' /etc/squid/squid.conf ``` ```output ... 1447:include /etc/squid/conf.d/*.conf 1455:http_access allow localhost 1458:http_access deny all ``` Squid evalúa las reglas `http_access` en orden y se queda con la primera que coincide. Por encima del `include` están las protecciones por defecto (`deny !Safe_ports`, `deny CONNECT !SSL_ports`, acceso al gestor de caché). Tus reglas quedan después de ellas y antes del `deny all` final, que es justo lo que necesitas. Los números de línea pueden variar. Haz una copia del archivo original por si necesitas volver atrás: ```bash sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.orig ``` ## Paso 3: Crear los usuarios del proxy Crea el archivo de contraseñas con el primer usuario. La opción `-c` crea el archivo, así que úsala solo esta vez: ```bash sudo htpasswd -c /etc/squid/passwords ana ``` Para añadir más usuarios, omite `-c`: ```bash sudo htpasswd /etc/squid/passwords luis ``` Squid se ejecuta como el usuario `proxy`, que necesita leer el archivo. Ajusta propietario y permisos para que nadie más lo lea: ```bash sudo chown root:proxy /etc/squid/passwords sudo chmod 640 /etc/squid/passwords ``` Comprueba que el helper de autenticación valida las credenciales. Escribe el usuario y la contraseña separados por un espacio y pulsa `Enter`, luego `Ctrl+D` para salir: ```bash sudo -u proxy /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords ``` ```output ana your_password OK ``` ## Paso 4: Configurar autenticación, bloqueo de dominios y caché Crea la lista de dominios bloqueados. Un dominio que empieza por punto incluye también todos sus subdominios: ```bash sudo nano /etc/squid/blocked_domains.txt ``` ```text .tiktok.com .facebook.com ``` Crea ahora el archivo de configuración propio: ```bash sudo nano /etc/squid/conf.d/proxy.conf ``` ```text # Autenticación básica contra /etc/squid/passwords 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 2 hours acl authenticated proxy_auth REQUIRED # Dominios bloqueados acl blocked_domains dstdomain "/etc/squid/blocked_domains.txt" # Reglas de acceso (se evalúan en orden) http_access deny blocked_domains http_access allow authenticated # Caché: 256 MB en RAM y 2 GB en disco cache_mem 256 MB maximum_object_size_in_memory 1 MB cache_dir ufs /var/spool/squid 2048 16 256 maximum_object_size 100 MB # No revelar la IP del cliente ni la presencia del proxy forwarded_for delete via off ``` Qué hace cada bloque: - `auth_param` define el programa que valida las credenciales y `acl authenticated proxy_auth REQUIRED` coincide con cualquier usuario válido. - `http_access deny blocked_domains` va antes del `allow`, así que los dominios bloqueados se deniegan incluso a usuarios autenticados. - `cache_dir ufs /var/spool/squid 2048 16 256` reserva 2048 MB de caché en disco repartidos en 16 directorios de primer nivel y 256 de segundo. - `forwarded_for delete` y `via off` evitan que Squid añada cabeceras con la IP del cliente o su propia versión. Valida la sintaxis antes de aplicar nada: ```bash sudo squid -k parse ``` El comando lista la configuración procesada. Si hay un error, lo muestra con el archivo y la línea, por ejemplo `FATAL: Bungled /etc/squid/conf.d/proxy.conf line 9`. Si termina sin líneas `ERROR` ni `FATAL`, la configuración es correcta. ## Paso 5: Inicializar la caché y reiniciar Squid La caché en disco necesita su estructura de directorios. Detén Squid, créala con `-z` y vuelve a arrancarlo: ```bash sudo systemctl stop squid sudo squid -z --foreground sudo systemctl start squid ``` Comprueba que se han creado los directorios de la caché: ```bash sudo ls /var/spool/squid ``` ```output 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F swap.state ``` Para cambios posteriores de configuración no hace falta reiniciar: `sudo systemctl reload squid` aplica los cambios sin cortar conexiones. ## Paso 6: Abrir el puerto en el firewall Permite el puerto 3128 solo desde las IP que vayan a usar el proxy: ```bash sudo ufw allow from your_client_ip to any port 3128 proto tcp ``` Si los usuarios se conectan desde IP dinámicas y no puedes restringir por origen, abre el puerto a todos (`sudo ufw allow 3128/tcp`) y confía en la autenticación, pero usa contraseñas largas. ## Paso 7: Probar el proxy Desde tu equipo, haz una petición a través del proxy **sin credenciales**. Squid debe exigir autenticación: ```bash curl -I -x http://your_server_ip:3128 http://example.com ``` ```output HTTP/1.1 407 Proxy Authentication Required Server: squid ... ``` Repite con usuario y contraseña. Para HTTPS, el navegador abre un túnel con el método `CONNECT` y Squid responde `Connection established` antes de la respuesta real: ```bash curl -I -x http://your_server_ip:3128 -U ana:your_password https://example.com ``` ```output HTTP/1.1 200 Connection established HTTP/2 200 content-type: text/html ... ``` Comprueba que un dominio bloqueado se deniega: ```bash curl -I -x http://your_server_ip:3128 -U ana:your_password https://www.facebook.com ``` ```output HTTP/1.1 403 Forbidden ... curl: (56) CONNECT tunnel failed, response 403 ``` En el servidor, cada petición aparece en el log de acceso con el usuario que la hizo: ```bash sudo tail -n 3 /var/log/squid/access.log ``` ```output 1790331702.114 612 198.51.100.7 TCP_TUNNEL/200 6419 CONNECT example.com:443 ana HIER_DIRECT/93.184.215.14 - 1790331715.882 0 198.51.100.7 TCP_DENIED/403 3894 CONNECT www.facebook.com:443 ana HIER_NONE/- text/html 1790331720.301 0 198.51.100.7 TCP_DENIED/407 3993 HEAD http://example.com/ - HIER_NONE/- text/html ``` Para ver el tráfico en tiempo real, usa `sudo tail -f /var/log/squid/access.log`. ## Paso 8: Configurar los clientes En los navegadores y sistemas operativos, configura un proxy manual HTTP con host `your_server_ip` y puerto `3128`, y marca la opción de usarlo también para HTTPS. El navegador pedirá el usuario y la contraseña la primera vez. En Linux, muchas herramientas de línea de comandos respetan las variables de entorno de proxy: ```bash export http_proxy="http://ana:your_password@your_server_ip:3128" export https_proxy="$http_proxy" curl -s https://ifconfig.me ``` ```output your_server_ip ``` > Nota: la autenticación básica viaja codificada pero sin cifrar entre el cliente y Squid. Si te conectas desde redes no fiables, accede al proxy a través de una VPN como WireGuard o por un túnel SSH (`ssh -L 3128:localhost:3128 your_user@your_server_ip`). ## Solución de problemas **Squid no arranca después de un cambio.** Ejecuta `sudo squid -k parse` para ver la línea con el error y revisa `sudo journalctl -u squid -n 50`. **Todas las peticiones devuelven 403 aunque las credenciales son correctas.** Suele deberse al orden de las reglas: si una regla `deny` coincide antes que tu `allow`, gana la primera. Revisa el orden con el `grep` del paso 2. También ocurre si el puerto de destino no está en `Safe_ports` o si es un `CONNECT` a un puerto distinto de 443. **El navegador pide la contraseña una y otra vez.** El usuario `proxy` no puede leer `/etc/squid/passwords`. Repite el `chown` y `chmod` del paso 3 y prueba el helper como se indica allí. **El `cache.log` muestra `No space left on device`.** El tamaño de `cache_dir` supera el espacio libre. Reduce el valor en MB, recarga Squid y comprueba el espacio con `df -h /var/spool/squid`. ## Conclusión Has configurado Squid en Ubuntu 24.04 como proxy de reenvío con autenticación, bloqueo de dominios, caché en memoria y en disco y acceso limitado por firewall. Cada petición queda registrada con el usuario que la hizo en `/var/log/squid/access.log`. A partir de aquí puedes restringir el horario de uso con ACL de tipo `time`, limitar el ancho de banda por usuario con `delay_pools` o generar informes de navegación a partir del log de acceso con herramientas como SARG.