Stack Docker para levantar Proxy HTTPS (stunnel+Squid) en 443 y SOCKS5 (Dante), con autenticación, certificados Let’s Encrypt y scripts de setup.
Servidor proxy HTTPS/SOCKS5 con autenticación, configurado para ejecutarse en tu VPS y permitirte navegar con la IP del servidor.
✨ Características:
- 🌐 Proxy HTTPS - Compatible con navegadores y Proxy SwitchyOmega
- 🔐 Autenticación por usuario/contraseña
- 🔒 Cifrado TLS/SSL con certificados de Let's Encrypt
- 🌍 Compatible con dominios personalizados (cualquier TLD: .com, .dev, .net, etc.)
- 🔄 Renovación automática de certificados
- 🚀 Fácil configuración con scripts automatizados
- 📦 Incluye también proxy SOCKS5 con Dante
🔑 Credenciales por defecto:
- Usuario:
proxyuser - Contraseña:
changeme123 ⚠️ IMPORTANTE: Cambia estas credenciales después de la instalación (ver sección "Cambiar credenciales")
Prerrequisitos:
- Un dominio que apunte a tu servidor VPS (ej:
proxy.tudominio.com,proxy.tudominio.dev, etc.) - Puerto 80 y 443 abiertos en el firewall
Pasos:
-
Ejecutar el script de setup:
sudo bash setup-ssl.sh
El script te pedirá tu dominio (puede ser .com, .dev, .net, o cualquier TLD) y automáticamente:
- Obtendrá certificados SSL de Let's Encrypt
- Configurará stunnel con TLS
- Configurará renovación automática
Nota: Puedes usar cualquier dominio o subdominio que poseas, siempre que apunte a la IP de tu VPS.
-
Iniciar servicios:
docker compose up -d
-
Verificar que todo esté funcionando:
docker ps # Todos los contenedores deben estar "Up" docker logs stunnel-https # Debe mostrar "Configuration successful" docker logs squid-proxy # No debe haber errores FATAL
-
Probar el proxy:
curl --proxy https://proxyuser:changeme123@proxy.tudominio.com:443 https://ifconfig.me
Deberías ver la IP de tu VPS.
-
Cambiar credenciales (RECOMENDADO):
sudo bash setup-squid-auth.sh docker compose restart squid-proxy stunnel-https
Edita el archivo docker-compose.yml y cambia las credenciales por defecto:
environment:
- PROXY_USER=tuusuario
- PROXY_PASS=tucontraseñadocker compose build
docker compose up -ddocker logs -f socks5-proxyDeberías ver: Iniciando servidor SOCKS5...
Desde tu PC o servidor:
# Probar conexión HTTPS
curl --proxy https://proxyuser:changeme123@proxy.tudominio.com:443 https://ifconfig.me
# O con -k si tienes problemas con el certificado
curl -k --proxy https://proxyuser:changeme123@proxy.tudominio.com:443 https://ifconfig.meResultado esperado: Deberías ver la IP de tu VPS.
Si prefieres usar SOCKS5:
-
Crear túnel SSH:
ssh -N -L 1080:localhost:1080 usuario@proxy.tudominio.com
-
Probar conexión:
curl --proxy socks5h://proxyuser:changeme123@localhost:1080 https://ifconfig.me
Requiere cliente stunnel instalado en tu PC:
curl --proxy socks5h://proxyuser:changeme123@proxy.tudominio.com:1443 https://ifconfig.meNota: Este método requiere configuración adicional de stunnel en el cliente.
- Instala la extensión Proxy SwitchyOmega
- Clic en el ícono → Options
- New profile → Nombre:
VPS Proxy→ Proxy Profile - Configuración:
- Protocol:
HTTPS - Server:
proxy.tudominio.com(tu dominio) - Port:
443
- Protocol:
- Expande Authentication (abajo):
- Username:
proxyuser - Password:
changeme123
- Username:
- Apply changes
- Clic en el ícono de SwitchyOmega → Selecciona
VPS Proxy
🎉 ¡Listo! Ahora todo tu tráfico irá por el proxy con SSL en el puerto 443.
- Instala la extensión FoxyProxy
- Clic en el ícono → Options
- Add → Manual Proxy Configuration
- Configuración:
- Title:
VPS Proxy - Type:
HTTP(Firefox trata HTTPS como HTTP con auth) - Hostname:
proxy.tudominio.com - Port:
443 - Username:
proxyuser - Password:
changeme123
- Title:
- Save
- Activa el proxy desde el menú de FoxyProxy
Si prefieres usar SOCKS5 con cifrado SSH:
-
Crea un túnel SSH local (deja esta terminal abierta):
ssh -N -L 1080:localhost:1080 usuario@proxy.tudominio.com
-
Configura el navegador:
- Tipo:
SOCKS5 - Servidor:
localhost - Puerto:
1080 - Usuario:
proxyuser - Contraseña:
changeme123
- Tipo:
Ventaja: Doble capa de cifrado (SSH + TLS) Desventaja: Requiere mantener conexión SSH abierta
# Con SSL/TLS
export ALL_PROXY=socks5h://proxyuser:changeme123@proxy.tudominio.com:443
# Sin SSL
export ALL_PROXY=socks5://proxyuser:changeme123@IP_DEL_VPS:443Este proyecto ofrece dos tipos de proxy:
┌─────────┐ HTTPS/SSL ┌──────────┐ HTTP ┌───────┐
│ Cliente │─────────────▶│ stunnel │──────────▶│ Squid │───▶ Internet
│ (tu PC)│ cifrado │ (443) │ (interno) │(3128) │
└─────────┘ └──────────┘ └───────┘
| Servicio | Puerto contenedor | Puerto público | Notas |
|---|---|---|---|
| stunnel (HTTPS→Squid) | 443 | 443 | Tráfico HTTPS con auth |
| Squid (HTTP interno) | 3128 | — | Solo interno en la red |
| Dante (SOCKS5) | 1080 | — | Úsalo con túnel SSH |
| stunnel (SOCKS5+TLS) | 1443 | 1443 | Cliente stunnel requerido |
Ventajas:
- ✅ Compatible nativamente con navegadores y extensiones
- ✅ Certificado válido de Let's Encrypt
- ✅ Parece tráfico HTTPS normal
- ✅ No requiere configuración adicional en el cliente
- ✅ Autenticación HTTP Basic integrada
Uso ideal:
- Proxy SwitchyOmega, FoxyProxy
- Configuración de proxy en navegadores
- Aplicaciones que soportan proxies HTTPS
Para uso con SSH tunnel o acceso directo:
┌─────────┐ SSH Tunnel ┌──────────┐ SOCKS5 ┌───────┐
│ Cliente │─────────────▶│ SSH │───────────▶│ Dante │───▶ Internet
│ (tu PC)│ cifrado │ (VPS) │ interno │(1080) │
└─────────┘ └──────────┘ └───────┘
Para qué sirve el SSL:
- Redes corporativas que bloquean proxies sin SSL
- ISPs que hacen inspección profunda de paquetes
- Países con censura que detectan y bloquean proxies
- Evitar que tu ISP sepa que usas un proxy
✅ Incluye autenticación por usuario/contraseña
- Usuario por defecto:
proxyuser - Contraseña por defecto:
changeme123 ⚠️ CAMBIA ESTAS CREDENCIALES endocker-compose.yml
Limita el acceso solo desde tu IP:
# UFW (Ubuntu/Debian)
sudo ufw allow from TU_IP_PERSONAL to any port 443
# iptables
sudo iptables -A INPUT -p tcp -s TU_IP_PERSONAL --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j DROPProxy HTTPS (stunnel + Squid):
squid.conf→ Configuración del proxy HTTP (sin SSL, stunnel lo maneja)squid-passwd→ Archivo de contraseñas (generado automáticamente)stunnel-squid.conf→ Configuración de stunnel para HTTPS en puerto 443setup-squid-auth.sh→ Script para cambiar credenciales de Squid
Proxy SOCKS5 (Dante):
Dockerfile→ Imagen Docker con Dante SOCKS5danted.conf→ Configuración del servidor Danteentrypoint.sh→ Script que crea usuarios y arranca Dantestunnel.conf→ Configuración de stunnel para SOCKS5+TLS en puerto 1443
General:
docker-compose.yml→ Configuración de despliegue (Squid + Dante + stunnel)setup-ssl.sh→ Script automatizado para obtener certificados SSL
# Logs de stunnel (HTTPS en puerto 443)
docker logs -f stunnel-https
# Logs de Squid (proxy HTTP)
docker logs -f squid-proxy
# Logs de Dante (proxy SOCKS5)
docker logs -f socks5-proxy
# Logs de stunnel (SOCKS5+TLS en puerto 1443)
docker logs -f stunnel-socks
# Todos
docker compose logs -f- Verifica que los contenedores están corriendo:
docker ps
- Verifica el firewall del VPS:
sudo ufw status # Deben estar abiertos los puertos 80 (para Let's Encrypt) y 443 - Prueba localmente en el VPS primero
- Si usas SSL, verifica que el dominio apunte al servidor:
dig +short tudominio.com
-
Error: "cert = /etc/letsencrypt/live/DOMAIN/fullchain.pem"
- No ejecutaste
setup-ssl.sh - Solución:
sudo bash setup-ssl.sh
- No ejecutaste
-
Error: "Certificate verify failed"
- El certificado expiró (después de 90 días)
- Solución: Renovar manualmente:
sudo certbot renew docker compose restart stunnel
-
Error al obtener certificado:
- Verifica que el puerto 80 está abierto
- Verifica que el dominio apunta al servidor
- Temporalmente detén servicios:
docker compose down
- Verifica las credenciales en
docker-compose.yml - Reconstruye la imagen:
docker compose down docker compose build docker compose up -d
Para el proxy HTTPS (Squid) en puerto 443:
sudo bash setup-squid-auth.sh
docker compose restart squid-proxy stunnel-httpsPara el proxy SOCKS5 (Dante) en puerto 1080:
- Edita
docker-compose.yml(sección de variables de entorno) - Reconstruye:
docker compose up -d --force-recreate dante
- Problema: Los navegadores no soportan SOCKS5+TLS directamente
- Solución: Usa el proxy HTTPS (Squid) en puerto 443 o un túnel SSH local
# Verificar certificado SSL
openssl s_client -connect tudominio.com:443 -showcerts
# Deberías ver el certificado de Let's Encrypt
# Probar proxy HTTPS directamente
curl -k --proxy https://proxyuser:changeme123@tudominio.com:443 https://ifconfig.me-
Error 407 Proxy Authentication Required:
- Las credenciales son incorrectas
- Verifica el archivo
squid-passwd - Cambia credenciales:
sudo bash setup-squid-auth.sh - Reinicia:
docker compose restart squid-proxy
-
Error de certificado SSL:
- Ejecuta:
sudo bash setup-ssl.sh - Asegúrate de que el dominio apunta al servidor
- Reinicia:
docker compose restart stunnel-https
- Ejecuta:
-
Squid no arranca:
- Ver logs:
docker logs squid-proxy - Verifica permisos:
ls -la squid-passwd squid.conf - Verifica sintaxis:
docker exec squid-proxy squid -k parse
- Ver logs:
# 1. Verificar que Squid responde
curl -I http://proxy.tudominio.com:443
# 2. Probar autenticación (debe pedir credenciales)
curl --proxy https://proxy.tudominio.com:443 https://ifconfig.me
# 3. Probar con credenciales
curl --proxy https://proxyuser:changeme123@proxy.tudominio.com:443 https://ifconfig.me