Servidor proxy en Linux: guía completa con Squid, Nginx y SOCKS

📅 Actualizado en febrero 2026 ✍️ Ángel López 📊 Nivel: Intermedio ⏱️ 25 min de lectura

Un servidor proxy es una pieza fundamental en la infraestructura de redes Linux. Actúa como intermediario entre los clientes de una red y los servidores de Internet, proporcionando caché, filtrado de contenido, control de acceso y anonimato. En esta guía aprenderás a configurar los tres tipos principales de proxy en Linux: Squid como forward proxy, Nginx como reverse proxy y SSH/Dante como proxy SOCKS5.

🌐 Qué es un servidor proxy y por qué usarlo

Un servidor proxy es un equipo o software que actúa como intermediario entre los dispositivos de una red local y los recursos de Internet. Cuando un usuario solicita una página web, la petición no va directamente al servidor destino: pasa primero por el proxy, que la evalúa, la procesa y la reenvía.

Esta arquitectura tiene ventajas enormes en entornos profesionales. El proxy puede cachear contenido frecuentemente solicitado (reduciendo el ancho de banda), filtrar sitios web no deseados (control parental o corporativo), registrar toda la actividad de navegación (auditoría) y ocultar las direcciones IP internas de la red (seguridad).

💡 ¿Sabías que...?
Según estadísticas de Netcraft, más del 80% de los servidores proxy desplegados en Internet funcionan sobre Linux. Squid, el proxy más popular del mundo, procesa miles de millones de peticiones diarias en organizaciones como Wikipedia, la NASA y numerosas universidades.

Los casos de uso más habituales de un proxy en Linux incluyen:

Caso de usoDescripciónSoftware recomendado
Caché web corporativaAlmacenar copias locales de sitios visitados para reducir ancho de bandaSquid
Filtrado de contenidoBloquear sitios no productivos o peligrosos en redes empresarialesSquid + SquidGuard
Balanceo de cargaDistribuir peticiones entrantes entre múltiples servidores backendNginx, HAProxy
Terminación SSLGestionar certificados HTTPS en un punto centralNginx
Anonimato y privacidadOcultar la IP real del cliente al navegarDante, SSH SOCKS
Acceso remoto seguroTunelizar tráfico a través de conexiones cifradasSSH + SOCKS5
Cables de red ethernet conectados a un switch en un centro de datos, representando la infraestructura de red donde operan los servidores proxy
📸 Infraestructura de red en un centro de datos — Pexels (Licencia libre)

🔀 Tipos de proxy: forward, reverse, transparente y SOCKS

No todos los proxies funcionan igual. Comprender las diferencias es esencial para elegir la solución correcta.

🔹 Forward proxy (proxy directo)

Es el tipo más clásico. Se sitúa del lado del cliente: intercepta las peticiones de los usuarios de la red local y las reenvía a Internet. El servidor de destino solo ve la IP del proxy, no la del cliente original.

Flujo de un forward proxy
Cliente (192.168.1.50) │ ▼ Squid Proxy (192.168.1.1:3128) │ ▼ Internet (google.com, github.com, ...)

🔹 Reverse proxy (proxy inverso)

Opera del lado del servidor. Recibe peticiones de Internet y las distribuye entre los servidores internos. Es fundamental para el balanceo de carga, la protección contra ataques DDoS y la terminación SSL. Nginx es el reverse proxy más utilizado del mundo.

Flujo de un reverse proxy
Cliente en Internet │ ▼ Nginx Reverse Proxy (:443) │ ├──▶ Backend A (app1:8080) ├──▶ Backend B (app2:8080) └──▶ Backend C (app3:8080)

🔹 Proxy transparente

Es un forward proxy que no requiere configuración en el cliente. El tráfico de la red se redirige automáticamente al proxy mediante reglas de firewall (iptables/nftables). El usuario ni siquiera sabe que existe. Se usa mucho en redes empresariales y educativas.

🔹 Proxy SOCKS (SOCKS4/SOCKS5)

A diferencia de los proxies HTTP que solo manejan tráfico web, SOCKS opera a nivel de socket y puede redirigir cualquier tipo de tráfico TCP y UDP. SOCKS5, la versión actual, añade autenticación y soporte para DNS remoto. Se puede montar fácilmente con un túnel SSH o con el servidor Dante.

⚠️ Importante
Un proxy SOCKS no cifra el tráfico por sí mismo (a diferencia de una VPN). Si necesitas privacidad real, combina SOCKS5 con un túnel SSH, que sí cifra toda la comunicación entre cliente y servidor proxy.
Tipos de proxy en Linux Forward Proxy Cliente → Proxy → Internet Caché, filtrado, control de acceso Squid, Tinyproxy Reverse Proxy Internet → Proxy → Backends Balanceo, SSL, protección DDoS Nginx, HAProxy Transparente Sin config en cliente Redirigido vía iptables/nftables Squid + iptables SOCKS5 Nivel socket (TCP/UDP) Cualquier protocolo, túnel cifrado SSH SSH -D, Dante ¿Cuándo usar cada uno? Red corporativa Producción web ISP / Campus Túnel remoto Capa OSI: Forward/Reverse/Transparente = Capa 7 (HTTP) · SOCKS = Capa 5 (Sesión) Todos pueden combinarse entre sí para arquitecturas híbridas de red

🦑 Squid: el proxy de referencia en Linux

Squid es el servidor proxy más veterano y utilizado en el ecosistema Linux. Nació en 1996 como evolución del proyecto Harvest y desde entonces ha sido la columna vertebral de la caché web en miles de organizaciones.

Squid soporta los protocolos HTTP, HTTPS, FTP y funciona tanto como forward proxy como proxy transparente. Su sistema de ACL (listas de control de acceso) es extremadamente potente, permitiendo políticas de acceso basadas en IP, dominio, horario, tipo MIME, usuario autenticado y mucho más.

Entre las organizaciones que usan o han usado Squid se encuentran Wikipedia (para su CDN), la NASA, numerosas universidades y la mayoría de los proveedores de Internet que ofrecen servicios de caché.

📦 Instalación y configuración básica de Squid

Squid está disponible en los repositorios oficiales de todas las distribuciones principales. La instalación es directa:

terminal — instalación de Squid
# En Ubuntu / Debian / Linux Mint sudo apt update sudo apt install squid -y # En Fedora / RHEL / Rocky Linux / CentOS sudo dnf install squid -y # Verificar la versión instalada squid -v # Iniciar y habilitar el servicio sudo systemctl start squid sudo systemctl enable squid sudo systemctl status squid

Toda la configuración de Squid reside en un único archivo: /etc/squid/squid.conf. Este archivo puede tener más de 4.000 líneas (la mayoría comentarios explicativos), pero solo unas pocas directivas están activas por defecto.

✅ Buena práctica
Antes de modificar la configuración, haz siempre una copia de seguridad del archivo original: sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup

Configuración mínima funcional

Una configuración básica de Squid para permitir el acceso desde la red local y denegar todo lo demás:

/etc/squid/squid.conf — configuración básica
# Puerto de escucha (por defecto 3128) http_port 3128 # Definir la red local acl red_local src 192.168.1.0/24 # Puertos seguros permitidos 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 1025-65535 # Puertos altos acl CONNECT method CONNECT # Reglas de acceso http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow red_local http_access deny all # Nombre visible del proxy visible_hostname proxy.miempresa.local
terminal — verificar y aplicar configuración
# Verificar sintaxis de la configuración sudo squid -k parse # Reiniciar para aplicar cambios sudo systemctl restart squid # Comprobar que escucha en el puerto 3128 sudo ss -tlnp | grep 3128

Para probar que el proxy funciona desde un equipo cliente:

terminal — prueba desde el cliente
# Usar curl a través del proxy curl -x http://192.168.1.1:3128 http://example.com # O configurar la variable de entorno export http_proxy="http://192.168.1.1:3128" export https_proxy="http://192.168.1.1:3128" curl http://example.com

🛡️ Listas de control de acceso (ACL) en Squid

Las ACL son el corazón del sistema de políticas de Squid. Permiten definir quién puede acceder a qué, cuándo y cómo. El funcionamiento es sencillo: primero defines las ACL (condiciones) y luego las aplicas con directivas http_access.

Bloquear dominios específicos

/etc/squid/squid.conf — bloqueo por dominio
# Definir lista de sitios bloqueados acl sitios_bloqueados dstdomain .facebook.com .tiktok.com .twitter.com # O cargar desde un archivo externo acl sitios_bloqueados dstdomain "/etc/squid/sitios_bloqueados.txt" # Denegar acceso a esos sitios (ANTES del allow) http_access deny sitios_bloqueados

Restricción por horario laboral

/etc/squid/squid.conf — acceso por horario
# Horario laboral: lunes a viernes, 9:00-18:00 acl horario_laboral time MTWHF 09:00-18:00 # Solo permitir redes sociales fuera del horario laboral acl redes_sociales dstdomain .facebook.com .instagram.com .twitter.com http_access deny redes_sociales horario_laboral

Bloquear tipos de archivo

/etc/squid/squid.conf — bloqueo por extensión
# Bloquear descargas de archivos grandes/peligrosos acl archivos_prohibidos urlpath_regex -i \.(exe|msi|torrent|mp4|avi|mkv)$ http_access deny archivos_prohibidos
⚠️ Orden de las reglas
Squid evalúa las reglas http_access de arriba abajo y aplica la primera que coincide. Coloca siempre las reglas deny específicas antes de las reglas allow generales, y termina siempre con http_access deny all como última línea.
Flujo de caché en Squid Proxy 🖥️ Cliente Petición HTTP 🦑 Squid ¿En caché? SÍ ✓ NO ✗ 🌐 Internet Servidor origen Almacena en caché ⚡ Respuesta inmediata Rendimiento HIT: <1ms latencia MISS: 50-500ms Ahorro: 40-60% BW

⚡ Optimización de caché y rendimiento

Una de las funciones más valiosas de Squid es su sistema de caché. Almacena copias locales del contenido web, de modo que las siguientes peticiones al mismo recurso se sirven desde disco local en lugar de descargarse de nuevo de Internet.

/etc/squid/squid.conf — configuración de caché
# Caché en memoria RAM (ajustar según RAM disponible) cache_mem 256 MB # Caché en disco # Formato: cache_dir tipo directorio tamaño_MB L1 L2 cache_dir ufs /var/spool/squid 10000 16 256 # Tamaño máximo de un objeto en caché (por defecto 4MB) maximum_object_size 50 MB # Tamaño máximo de un objeto en caché de memoria maximum_object_size_in_memory 2 MB # Política de reemplazo (LRU = Least Recently Used) cache_replacement_policy lru memory_replacement_policy lru

Con esta configuración, Squid usará hasta 256 MB de RAM y 10 GB de disco para almacenar contenido cacheado. Los subdirectorios L1 (16) y L2 (256) organizan la caché en disco para un acceso eficiente.

terminal — inicializar y monitorizar la caché
# Inicializar los directorios de caché (primera vez) sudo squid -z # Ver estadísticas de caché en tiempo real sudo squidclient -h localhost mgr:info # Ver los logs de acceso sudo tail -f /var/log/squid/access.log

🔐 Autenticación de usuarios en el proxy

En entornos donde necesitas saber quién está navegando, Squid soporta varios métodos de autenticación. El más sencillo es NCSA (archivo de contraseñas), similar al .htpasswd de Apache.

terminal — crear archivo de usuarios
# Instalar las herramientas de Apache (para htpasswd) sudo apt install apache2-utils -y # Crear el primer usuario sudo htpasswd -c /etc/squid/usuarios usuario1 New password: ******** # Añadir más usuarios (sin -c para no sobrescribir) sudo htpasswd /etc/squid/usuarios usuario2
/etc/squid/squid.conf — activar autenticación
# Configurar el helper de autenticación NCSA auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/usuarios auth_param basic realm Proxy Corporativo - Introduce tus credenciales auth_param basic credentialsttl 2 hours # Crear ACL que requiere autenticación acl usuarios_auth proxy_auth REQUIRED # Aplicar: solo usuarios autenticados pueden navegar http_access allow usuarios_auth http_access deny all
💡 Autenticación avanzada
Squid también soporta autenticación contra LDAP (Active Directory), Kerberos y bases de datos MySQL. En entornos corporativos con Active Directory, la integración LDAP permite que los usuarios se autentiquen con sus credenciales de dominio sin necesidad de crear cuentas adicionales.
Arquitectura Reverse Proxy con Nginx 👤 Usuario 1 👤 Usuario 2 👤 Usuario N 🔒 HTTPS ⚙️ Nginx Reverse Proxy Terminación SSL Balanceo de carga Caché estática proxy_pass → upstream HTTP 🖥️ App:8001 weight=3 🖥️ App:8002 weight=2 🖥️ App:8003 weight=1 (backup) Algoritmos • round-robin • least_conn • ip_hash • weight El proxy inverso descarga SSL, distribuye tráfico y protege los backends del acceso directo

🔄 Proxy inverso con Nginx

Mientras Squid es el rey del forward proxy, Nginx domina el mundo del proxy inverso. Un reverse proxy recibe todas las peticiones de Internet y las distribuye entre los servidores backend de tu infraestructura.

Los beneficios principales del proxy inverso son: balanceo de carga (distribuir tráfico entre múltiples servidores), terminación SSL (gestionar los certificados en un único punto), protección contra DDoS (el backend no está expuesto directamente) y caché de contenido estático.

terminal — instalación de Nginx
# En Ubuntu / Debian sudo apt install nginx -y # Verificar e iniciar sudo systemctl start nginx sudo systemctl enable nginx
/etc/nginx/sites-available/mi-app — reverse proxy básico
upstream backend { # Servidores de la aplicación server 127.0.0.1:8080; server 127.0.0.1:8081; server 127.0.0.1:8082; } server { listen 443 ssl; server_name mi-app.ejemplo.com; # Certificados SSL (Let's Encrypt) ssl_certificate /etc/letsencrypt/live/mi-app.ejemplo.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mi-app.ejemplo.com/privkey.pem; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

Esta configuración distribuye las peticiones entre tres servidores backend usando round-robin (por defecto). Nginx también soporta algoritmos de balanceo como least_conn (menos conexiones), ip_hash (persistencia por IP) y weight (pesos personalizados).

🧦 Proxy SOCKS5 con SSH y Dante

Un proxy SOCKS5 trabaja a un nivel más bajo que HTTP: opera a nivel de socket y puede redirigir cualquier tipo de tráfico TCP/UDP, no solo web. Esto lo hace ideal para aplicaciones como clientes de correo, transferencias FTP, clientes de chat y herramientas de desarrollo.

Método rápido: túnel SSH como proxy SOCKS5

La forma más sencilla de crear un proxy SOCKS5 es con un túnel SSH. Solo necesitas un servidor Linux con OpenSSH:

terminal — proxy SOCKS5 con SSH
# Crear un proxy SOCKS5 en el puerto local 1080 ssh -D 1080 -N -f usuario@servidor-remoto.com # -D 1080 → Abre un proxy SOCKS en el puerto 1080 # -N → No ejecutar comandos remotos # -f → Pasar a segundo plano # Verificar que el proxy está activo ss -tlnp | grep 1080 # Probar con curl curl --socks5 localhost:1080 http://ifconfig.me

Todo el tráfico que pase por localhost:1080 será reenviado cifrado a través del túnel SSH hasta el servidor remoto, que lo enviará a su destino. Es una VPN casera sencilla y efectiva.

Método profesional: servidor Dante

Para un proxy SOCKS5 permanente con autenticación y control granular, Dante es la solución profesional:

terminal — instalación de Dante
# En Ubuntu / Debian sudo apt install dante-server -y
/etc/danted.conf — configuración básica de Dante
# Interfaz externa (hacia Internet) external: eth0 # Interfaz interna (escucha clientes) internal: 0.0.0.0 port = 1080 # Método de autenticación socksmethod: username # Reglas de acceso client pass { from: 192.168.1.0/24 to: 0.0.0.0/0 log: connect disconnect error } socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 protocol: tcp udp }
Cables de red conectados a equipos de red, representando la seguridad y conectividad en servidores proxy
📸 Equipamiento de red y seguridad en infraestructura proxy — Pexels (Licencia libre)

🔒 Seguridad y buenas prácticas

Un proxy mal configurado puede convertirse en una puerta abierta para atacantes. Estas son las medidas de seguridad fundamentales:

MedidaDescripciónConfiguración
FirewallPermitir solo las IPs autorizadas al puerto del proxysudo ufw allow from 192.168.1.0/24 to any port 3128
Deny all por defectoLa última regla de Squid siempre debe ser deny allhttp_access deny all
No ser open proxyUn proxy abierto será usado para spam y ataquesRestringir ACLs a redes conocidas
Logs y auditoríaRevisar regularmente los logs de accesotail -f /var/log/squid/access.log
Actualizar SquidMantener la versión actualizada contra vulnerabilidadessudo apt upgrade squid
Ocultar versiónNo revelar la versión de Squid en las cabecerashttpd_suppress_version_string on
🚫 Nunca configures un open proxy
Un proxy sin restricciones de acceso (open proxy) será descubierto en minutos por escáneres automáticos y utilizado para enviar spam, realizar ataques DDoS o acceder a contenido ilegal. Siempre restringe el acceso a IPs conocidas y activa la autenticación.

📝 Ejercicios prácticos

✏️ Ejercicio 1: Proxy básico con Squid
Instala Squid en una máquina virtual con Ubuntu. Configura el proxy para permitir acceso solo desde la red 10.0.2.0/24. Prueba la conexión desde otra máquina usando curl -x http://IP_PROXY:3128 http://example.com. Verifica en los logs que la petición aparece registrada.
✏️ Ejercicio 2: Filtrado de contenido
Crea un archivo /etc/squid/sitios_bloqueados.txt con 5 dominios. Configura una ACL en Squid que los bloquee. Comprueba que al intentar acceder a uno de ellos obtienes un error 403 Forbidden. Luego añade una restricción horaria: los sitios solo se bloquean de lunes a viernes de 9:00 a 18:00.
✏️ Ejercicio 3: Proxy inverso con Nginx
Instala Nginx y dos instancias de un servidor web simple (por ejemplo, python3 -m http.server 8080 y python3 -m http.server 8081 en directorios diferentes). Configura Nginx como reverse proxy con un bloque upstream que distribuya las peticiones entre ambos. Comprueba que las peticiones se alternan entre los dos backends.
✏️ Ejercicio 4: Túnel SOCKS5 con SSH
Crea un proxy SOCKS5 usando SSH: ssh -D 1080 -N usuario@tu-servidor. Configura Firefox para usar el proxy SOCKS5 en localhost:1080. Visita ifconfig.me y comprueba que la IP que muestra es la del servidor remoto, no la tuya.
✏️ Ejercicio 5: Autenticación en Squid
Activa la autenticación NCSA en Squid. Crea dos usuarios con htpasswd. Configura el proxy para que solo permita navegar a usuarios autenticados. Prueba con curl: curl -x http://usuario1:password@IP_PROXY:3128 http://example.com.

❓ Preguntas frecuentes sobre Servidor proxy en Linux: guía completa con Squid, Nginx y SOCKS

Las dudas más comunes respondidas de forma clara y directa.

Un proxy forward actúa en nombre de los clientes: intercepta sus peticiones y las envía a Internet. Un proxy inverso (reverse proxy) actúa en nombre de los servidores: recibe las peticiones de Internet y las distribuye entre servidores internos. Squid se usa típicamente como forward proxy, mientras que Nginx es la opción más popular como reverse proxy.
Sí. Squid es software libre bajo licencia GPL. Está disponible en los repositorios oficiales de todas las distribuciones Linux principales: Ubuntu, Debian, Fedora, CentOS, Rocky Linux y RHEL.
Sí. Con las ACL (Access Control Lists) de Squid puedes bloquear dominios específicos, URLs que contengan ciertas palabras, tipos de archivo concretos e incluso restringir el acceso por horario o dirección IP del cliente.
No. Un proxy SOCKS5 redirige el tráfico de aplicaciones específicas a través de un servidor intermedio, mientras que una VPN cifra todo el tráfico de red del dispositivo. SOCKS5 es más rápido pero ofrece menos privacidad que una VPN completa.
Squid escucha en el puerto 3128 por defecto. Este puerto se puede cambiar editando la directiva http_port en el archivo /etc/squid/squid.conf. En entornos corporativos también se usan los puertos 8080 y 3129.
Nginx está diseñado principalmente como proxy inverso y servidor web. Aunque técnicamente puede funcionar como forward proxy, no es su uso recomendado. Para forward proxy, Squid es la solución estándar en Linux.
Valora este artículo

💬 Foro de discusión

¿Tienes dudas sobre Servidor proxy en Linux: guía completa con Squid, Nginx y SOCKS? Comparte tu pregunta con la comunidad.

¿Tienes cuenta? o comenta como invitado ↓

Todavía no hay mensajes. ¡Sé el primero en participar!

🚀 ¿Quieres dominar Linux profesionalmente?
Cursos bonificados por FUNDAE para empresas — formación 100% subvencionada
Ver cursos de Linux →