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 uso
Descripción
Software recomendado
Caché web corporativa
Almacenar copias locales de sitios visitados para reducir ancho de banda
Squid
Filtrado de contenido
Bloquear sitios no productivos o peligrosos en redes empresariales
Squid + SquidGuard
Balanceo de carga
Distribuir peticiones entrantes entre múltiples servidores backend
Nginx, HAProxy
Terminación SSL
Gestionar certificados HTTPS en un punto central
Nginx
Anonimato y privacidad
Ocultar la IP real del cliente al navegar
Dante, SSH SOCKS
Acceso remoto seguro
Tunelizar tráfico a través de conexiones cifradas
SSH + SOCKS5
📸 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.
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.
🦑 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 Mintsudo apt update
sudo apt install squid -y
# En Fedora / RHEL / Rocky Linux / CentOSsudo dnf install squid -y
# Verificar la versión instaladasquid-v
# Iniciar y habilitar el serviciosudosystemctl 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_port3128# Definir la red localacl red_local src 192.168.1.0/24
# Puertos seguros permitidosacl SSL_ports port 443
acl Safe_ports port 80 # HTTPacl Safe_ports port 21 # FTPacl Safe_ports port 443 # HTTPSacl Safe_ports port 1025-65535 # Puertos altosacl CONNECT method CONNECT
# Reglas de accesohttp_accessdeny !Safe_ports
http_accessdeny CONNECT !SSL_ports
http_accessallow localhost
http_accessallow red_local
http_accessdeny all
# Nombre visible del proxyvisible_hostname proxy.miempresa.local
terminal — verificar y aplicar configuración
# Verificar sintaxis de la configuraciónsudo squid -k parse
# Reiniciar para aplicar cambiossudo systemctl restart squid
# Comprobar que escucha en el puerto 3128sudo 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 proxycurl-x http://192.168.1.1:3128 http://example.com
# O configurar la variable de entornoexport 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 bloqueadosacl sitios_bloqueados dstdomain .facebook.com .tiktok.com .twitter.com
# O cargar desde un archivo externoacl sitios_bloqueados dstdomain"/etc/squid/sitios_bloqueados.txt"# Denegar acceso a esos sitios (ANTES del allow)http_accessdeny sitios_bloqueados
Restricción por horario laboral
/etc/squid/squid.conf — acceso por horario
# Horario laboral: lunes a viernes, 9:00-18:00acl horario_laboral time MTWHF 09:00-18:00
# Solo permitir redes sociales fuera del horario laboralacl redes_sociales dstdomain .facebook.com .instagram.com .twitter.com
http_accessdeny redes_sociales horario_laboral
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.
⚡ 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_mem256 MB
# Caché en disco# Formato: cache_dir tipo directorio tamaño_MB L1 L2cache_dir ufs /var/spool/squid 1000016256# Tamaño máximo de un objeto en caché (por defecto 4MB)maximum_object_size50 MB
# Tamaño máximo de un objeto en caché de memoriamaximum_object_size_in_memory2 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 realsudo squidclient -h localhost mgr:info
# Ver los logs de accesosudo 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 usuariosudo 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 NCSAauth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/usuarios
auth_param basic realm Proxy Corporativo - Introduce tus credencialesauth_param basic credentialsttl 2 hours
# Crear ACL que requiere autenticaciónacl usuarios_auth proxy_auth REQUIRED
# Aplicar: solo usuarios autenticados pueden navegarhttp_accessallow usuarios_auth
http_accessdeny 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.
🔄 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 / Debiansudo apt install nginx -y
# Verificar e iniciarsudo systemctl start nginx
sudo systemctl enable nginx
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 1080ssh-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á activoss-tlnp | grep 1080
# Probar con curlcurl--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 / Debiansudo 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ónsocksmethod: username
# Reglas de accesoclient 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
}
📸 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:
Medida
Descripción
Configuración
Firewall
Permitir solo las IPs autorizadas al puerto del proxy
sudo ufw allow from 192.168.1.0/24 to any port 3128
Deny all por defecto
La última regla de Squid siempre debe ser deny all
http_access deny all
No ser open proxy
Un proxy abierto será usado para spam y ataques
Restringir ACLs a redes conocidas
Logs y auditoría
Revisar regularmente los logs de acceso
tail -f /var/log/squid/access.log
Actualizar Squid
Mantener la versión actualizada contra vulnerabilidades
sudo apt upgrade squid
Ocultar versión
No revelar la versión de Squid en las cabeceras
httpd_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
¿Útil?
💬 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 ↓
Iniciar sesión
🔑 Recuperar contraseña
Introduce el email con el que te registraste. Te enviaremos un enlace para crear una nueva contraseña.
Crear cuenta
Solo necesitas nombre, email y contraseña. Sin verificación por email.
Todavía no hay mensajes. ¡Sé el primero en participar!
🚀 ¿Quieres dominar Linux profesionalmente?
Cursos bonificados por FUNDAE para empresas — formación 100% subvencionada
Usamos cookies propias para mejorar tu experiencia de navegación y analizar
el uso del sitio. No compartimos datos con terceros ni usamos cookies de
publicidad. Puedes aceptar todas, aceptar solo las necesarias o configurar
tus preferencias.
Política de privacidad
Imprescindibles para el funcionamiento del sitio: preferencias de interfaz,
gestión de sesiones y este mismo aviso de cookies. No recogen datos
identificativos.
Nos permiten entender cómo navegas por el contenido para mejorar la
experiencia de aprendizaje. Utilizan identificadores anónimos (UUID) sin
vinculación a datos personales. Retención máxima: 6 meses.
¿Cómo valorarías tu experiencia aprendiendo en esta sección?