
Un túnel encubierto de alta velocidad que disfraza el tráfico TCP como comunicación de correo electrónico SMTP para evadir firewalls de inspección profunda de paquetes (DPI).
Un túnel encubierto de alta velocidad que disfraza el tráfico TCP como comunicación de correo electrónico SMTP para evadir firewalls de inspección profunda de paquetes (DPI).
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ Application │─────▶│ Client │─────▶│ Server │─────▶│ Internet │
│ (Browser) │ TCP │ SOCKS5:1080 │ SMTP │ Port 587 │ TCP │ │
│ │◀─────│ │◀─────│ │◀─────│ │
└─────────────┘ └─────────────┘ └─────────────┘ └──────────────┘
│ │
│ Looks like │
│ Email Traffic │
▼ ▼
┌────────────────────────────────┐
│ DPI Firewall │
│ ✅ Sees: Normal SMTP Session │
│ ❌ Cannot see: Tunnel Data │
└────────────────────────────────┘
📚 Para detalles técnicos exhaustivos, especificaciones del protocolo y análisis de seguridad, consulta TECHNICAL.md.
Obtén un dominio gratuito que apunte a tu VPS:
Ejemplo: myserver.duckdns.org → 203.0.113.50 (la IP de tu VPS)
curl -sSL https://raw.githubusercontent.com/x011/smtp-tunnel-proxy/main/install.sh | sudo bash
El instalador hará lo siguiente:
¡Eso es todo! Tu servidor está listo.
smtp-tunnel-adduser bob # Agregar usuario + generar ZIP de cliente
smtp-tunnel-listusers # Listar todos los usuarios
smtp-tunnel-deluser bob # Eliminar un usuario
smtp-tunnel-update # Actualiza el código, preserva configuración/certificados/usuarios
username.zip del administrador del servidor| Plataforma | Cómo Ejecutar |
|---|---|
| 🪟 Windows | Haz doble clic en start.bat |
El lanzador instalará automáticamente las dependencias e iniciará el cliente.
✅ Deberías ver:
SMTP Tunnel Proxy Client
User: alice
[INFO] Starting SMTP Tunnel...
[INFO] SOCKS5 proxy will be available at 127.0.0.1:1080
Connecting to myserver.duckdns.org:587
Connected - binary mode active
SOCKS5 proxy on 127.0.0.1:1080
cd alice
pip install -r requirements.txt
python client.py
# Download files
scp [email protected]:/etc/smtp-tunnel/ca.crt .
# Create config.yaml:
cat > config.yaml << EOF
client:
server_host: "myserver.duckdns.org"
server_port: 587
socks_port: 1080
username: "alice"
secret: "your-secret-from-admin"
ca_cert: "ca.crt"
EOF
# Run client
python client.py -c config.yaml
Configura el proxy SOCKS5 en: 127.0.0.1:1080
127.0.0.1, Puerto: 1080127.0.0.1:1080Configuración → Red e Internet → Proxy → Configuración manual → socks=127.0.0.1:1080
Preferencias del Sistema → Red → Avanzado → Proxies → Proxy SOCKS → 127.0.0.1:1080
export ALL_PROXY=socks5://127.0.0.1:1080
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me
git config --global http.proxy socks5://127.0.0.1:1080
export ALL_PROXY=socks5://127.0.0.1:1080
# Should show your VPS IP
curl -x socks5://127.0.0.1:1080 https://ifconfig.me
config.yaml)users.yaml)Cada usuario puede tener configuraciones individuales:
users:
alice:
secret: "auto-generated-secret"
# whitelist: # Optional: restrict to specific IPs
# - "192.168.1.100"
# - "10.0.0.0/8" # CIDR notation supported
# logging: true # Optional: disable to stop logging this user
bob:
secret: "another-secret"
whitelist:
- "203.0.113.50" # Bob can only connect from this IP
logging: false # Don't log Bob's activity
| Opción | Descripción | Valor por Defecto |
|---|
# Check status
sudo systemctl status smtp-tunnel
# Restart after config changes
sudo systemctl restart smtp-tunnel
# View logs
sudo journalctl -u smtp-tunnel -n 100
# Uninstall
sudo /opt/smtp-tunnel/uninstall.sh
python server.py [-c CONFIG] [-d]
-c, --config Archivo de configuración (por defecto: config.yaml)
-d, --debug Habilitar registro de depuración
python client.py [-c CONFIG] [--server HOST] [--server-port PORT]
[-p SOCKS_PORT] [-u USERNAME] [-s SECRET] [--ca-cert FILE] [-d]
-c, --config Archivo de configuración (por defecto: config.yaml)
--server Sobrescribir dominio del servidor
--server-port Sobrescribir puerto del servidor
-p, --socks-port Sobrescribir puerto SOCKS local
-u, --username Tu nombre de usuario
-s, --secret Sobrescribir secreto
--ca-cert Ruta del certificado CA
-d, --debug Habilitar registro de depuración
smtp-tunnel-adduser <username> [-u USERS_FILE] [-c CONFIG] [--no-zip]
Agregar un nuevo usuario y generar paquete de cliente
smtp-tunnel-deluser <username> [-u USERS_FILE] [-f]
Eliminar un usuario (usa -f para omitir confirmación)
smtp-tunnel-listusers [-u USERS_FILE] [-v]
Listar todos los usuarios (usa -v para información detallada)
smtp-tunnel-update
Actualizar servidor a la última versión (preserva configuración/certificados/usuarios)
smtp_proxy/
├── 📄 server.py # Servidor (se ejecuta en VPS)
├── 📄 client.py # Cliente (se ejecuta localmente)
├── 📄 common.py # Utilidades compartidas
├── 📄 generate_certs.py # Generador de certificados
├── 📄 config.yaml # Configuración del servidor/cliente
├── 📄 users.yaml # Base de datos de usuarios
├── 📄 requirements.txt # Dependencias de Python
├── 📄 install.sh # Instalador del servidor en una línea
├── 📄 smtp-tunnel.service # Archivo de unidad systemd
├── 🔧 smtp-tunnel-adduser # Script para agregar usuario
├── 🔧 smtp-tunnel-deluser # Script para eliminar usuario
├── 🔧 smtp-tunnel-listusers # Script para listar usuarios
├── 🔧 smtp-tunnel-update # Script para actualizar servidor
├── 📄 README.md # Este archivo
└── 📄 TECHNICAL.md # Documentación técnica
/opt/smtp-tunnel/ # Application files
/etc/smtp-tunnel/ # Configuration files
├── config.yaml
├── users.yaml
├── server.crt
├── server.key
└── ca.crt
/usr/local/bin/ # Management commands
├── smtp-tunnel-adduser
├── smtp-tunnel-deluser
├── smtp-tunnel-listusers
└── smtp-tunnel-update
systemctl status smtp-tunnel o ps aux | grep server.pynetstat -tlnp | grep 587ufw statususername y secret coincidan en users.yamlsmtp-tunnel-listusers -v para verificar que el usuario existe10.0.0.0/8)server_host coincida con el nombre de host del certificadoca.crt correcto del servidor# Enable detailed logging
python server.py -d
python client.py -d
# View systemd logs
journalctl -u smtp-tunnel -f
ca_cert para evitar ataques de intermediariosmtp-tunnel-adduser para generar secretos fuertes automáticamenteusers.yaml - contiene todos los secretos de usuario (chmod 600)logging: false📚 Para un análisis de seguridad detallado y modelo de amenazas, consulta TECHNICAL.md.
Este proyecto se proporciona solo para uso educativo y autorizado. Úsalo de manera responsable y de acuerdo con las leyes aplicables.
Esta herramienta está diseñada para fines legítimos de privacidad y elusión de censura. Los usuarios son responsables de asegurar que su uso cumple con las leyes y regulaciones aplicables.
Hecho con ❤️ por la libertad de internet
| Característica | Descripción |
|---|
| 🔒 Cifrado TLS | Todo el tráfico se cifra con TLS 1.2+ después de STARTTLS |
| 🎭 Evasión de DPI | El handshake inicial imita servidores SMTP reales (Postfix) |
| ⚡ Alta Velocidad | Protocolo de transmisión binaria tras el handshake - sobrecarga mínima |
| 👥 Multi-Usuario | Secretos por usuario, listas blancas IP y configuración de registro |
| 🔑 Autenticación | Claves precompartidas por usuario con HMAC-SHA256 |
| 🌐 Proxy SOCKS5 | Interfaz de proxy estándar - funciona con cualquier aplicación |
| 📡 Multiplexación | Múltiples conexiones a través de un solo túnel |
| 🛡️ Lista Blanca IP | Control de acceso por usuario mediante dirección IP/CIDR |
| 📦 Instalación Fácil | Instalación del servidor en una sola línea con servicio systemd |
| 🎁 Paquetes de Cliente | Archivos ZIP generados automáticamente para cada usuario |
| 🔄 Reconexión Automática | El cliente se reconecta automáticamente ante pérdida de conexión |
| 🐧 Linux | Ejecuta ./start.sh |
| 🍎 macOS | Ejecuta ./start.sh |
| Opción | Descripción | Valor por Defecto |
|---|
host | Interfaz de escucha | 0.0.0.0 |
port | Puerto de escucha | 587 |
hostname | Nombre de host SMTP (debe coincidir con el certificado) | mail.example.com |
cert_file | Ruta del certificado TLS | server.crt |
key_file | Ruta de la clave privada TLS | server.key |
users_file | Ruta del archivo de usuarios | users.yaml |
log_users | Configuración global de registro | true |
secret | Secreto de autenticación del usuario | Requerido |
whitelist | IPs permitidas para este usuario (soporta CIDR) | Todas las IPs |
logging | Habilitar registro de actividad para este usuario | true |
| Opción | Descripción | Valor por Defecto |
|---|
server_host | Nombre de dominio del servidor | Requerido |
server_port | Puerto del servidor | 587 |
socks_port | Puerto local SOCKS5 | 1080 |
socks_host | Interfaz local SOCKS5 | 127.0.0.1 |
username | Tu nombre de usuario | Requerido |
secret | Tu secreto de autenticación | Requerido |
ca_cert | Certificado CA para verificación | Recomendado |