
Un tunnel clandestin à haute vitesse qui déguise le trafic TCP en communication email SMTP pour contourner les pare-feux d'inspection profonde des paquets (DPI).
Un tunnel furtif haute vitesse qui déguise le trafic TCP en communication email SMTP pour contourner les pare-feux d'inspection approfondie des paquets (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 │
└────────────────────────────────┘
📚 Pour des détails techniques approfondis, les spécifications du protocole et l'analyse de sécurité, voir TECHNICAL.md.
Obtenez un domaine gratuit pointant vers votre VPS :
Exemple : myserver.duckdns.org → 203.0.113.50 (l'IP de votre VPS)
curl -sSL https://raw.githubusercontent.com/x011/smtp-tunnel-proxy/main/install.sh | sudo bash
L'installateur va :
Et voilà ! Votre serveur est prêt.
smtp-tunnel-adduser bob # Ajouter un utilisateur + générer un ZIP client
smtp-tunnel-listusers # Lister tous les utilisateurs
smtp-tunnel-deluser bob # Supprimer un utilisateur
smtp-tunnel-update # Met à jour le code, préserve la configuration/certificats/utilisateurs
username.zip auprès de l'administrateur du serveur| Plateforme | Comment exécuter |
|---|---|
| 🪟 Windows | Double-cliquez sur start.bat |
Le lanceur installera automatiquement les dépendances et démarrera le client.
✅ Vous devriez voir :
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
Définir le proxy SOCKS5 sur : 127.0.0.1:1080
127.0.0.1, Port : 1080127.0.0.1:1080Paramètres → Réseau et Internet → Proxy → Configuration manuelle → socks=127.0.0.1:1080
Préférences Système → Réseau → Avancé → Proxies → Proxy SOCKS → 127.0.0.1:1080
export ALL_PROXY=socks5://127.0.0.1:1080
# curl
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me
# git
git config --global http.proxy socks5://127.0.0.1:1080
# Environment variable
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)Chaque utilisateur peut avoir des paramètres individuels :
users:
alice:
secret: "auto-generated-secret"
# whitelist: # Optionnel : restreindre à des IP spécifiques
# - "192.168.1.100"
# - "10.0.0.0/8" # Notation CIDR prise en charge
# logging: true # Optionnel : désactiver pour arrêter la journalisation de cet utilisateur
bob:
secret: "another-secret"
whitelist:
- "203.0.113.50" # Bob ne peut se connecter qu'à partir de cette IP
logging: false # Ne pas journaliser l'activité de Bob
| Option | Description | Défaut |
|---|
# Vérifier le statut
sudo systemctl status smtp-tunnel
# Redémarrer après modifications de configuration
sudo systemctl restart smtp-tunnel
# Voir les journaux
sudo journalctl -u smtp-tunnel -n 100
# Désinstaller
sudo /opt/smtp-tunnel/uninstall.sh
python server.py [-c CONFIG] [-d]
-c, --config Config file (default: config.yaml)
-d, --debug Enable debug logging
python client.py [-c CONFIG] [--server HOST] [--server-port PORT]
[-p SOCKS_PORT] [-u USERNAME] [-s SECRET] [--ca-cert FILE] [-d]
-c, --config Config file (default: config.yaml)
--server Override server domain
--server-port Override server port
-p, --socks-port Override local SOCKS port
-u, --username Your username
-s, --secret Override secret
--ca-cert CA certificate path
-d, --debug Enable debug logging
smtp-tunnel-adduser <username> [-u USERS_FILE] [-c CONFIG] [--no-zip]
Ajouter un nouvel utilisateur et générer un paquet client
smtp-tunnel-deluser <username> [-u USERS_FILE] [-f]
Supprimer un utilisateur (utiliser -f pour ignorer la confirmation)
smtp-tunnel-listusers [-u USERS_FILE] [-v]
Lister tous les utilisateurs (utiliser -v pour des infos détaillées)
smtp-tunnel-update
Mettre à jour le serveur vers la dernière version (préserve configuration/certificats/utilisateurs)
smtp_proxy/
├── 📄 server.py # Serveur (s'exécute sur le VPS)
├── 📄 client.py # Client (s'exécute localement)
├── 📄 common.py # Utilitaires partagés
├── 📄 generate_certs.py # Générateur de certificats
├── 📄 config.yaml # Configuration serveur/client
├── 📄 users.yaml # Base de données utilisateurs
├── 📄 requirements.txt # Dépendances Python
├── 📄 install.sh # Installateur serveur en une ligne
├── 📄 smtp-tunnel.service # Fichier unité systemd
├── 🔧 smtp-tunnel-adduser # Script d'ajout d'utilisateur
├── 🔧 smtp-tunnel-deluser # Script de suppression d'utilisateur
├── 🔧 smtp-tunnel-listusers # Script de liste des utilisateurs
├── 🔧 smtp-tunnel-update # Script de mise à jour du serveur
├── 📄 README.md # Ce fichier
└── 📄 TECHNICAL.md # Documentation technique
/opt/smtp-tunnel/ # Fichiers d'application
/etc/smtp-tunnel/ # Fichiers de configuration
├── config.yaml
├── users.yaml
├── server.crt
├── server.key
└── ca.crt
/usr/local/bin/ # Commandes de gestion
├── smtp-tunnel-adduser
├── smtp-tunnel-deluser
├── smtp-tunnel-listusers
└── smtp-tunnel-update
systemctl status smtp-tunnel ou ps aux | grep server.pynetstat -tlnp | grep 587ufw statususername et secret correspondent dans users.yamlsmtp-tunnel-listusers -v pour vérifier que l'utilisateur existe10.0.0.0/8)server_host correspond au nom d'hôte du certificatca.crt du serveur# Activer la journalisation détaillée
python server.py -d
python client.py -d
# Voir les journaux systemd
journalctl -u smtp-tunnel -f
ca_cert pour prévenir les attaques de l'homme du milieusmtp-tunnel-adduser pour générer automatiquement des secrets fortsusers.yaml - contient tous les secrets des utilisateurs (chmod 600)logging: false📚 Pour une analyse de sécurité détaillée et un modèle de menace, voir TECHNICAL.md.
Ce projet est fourni uniquement à des fins éducatives et d'utilisation autorisée. Utilisez-le de manière responsable et conformément aux lois applicables.
Cet outil est conçu pour des fins légitimes de confidentialité et de contournement de la censure. Les utilisateurs sont responsables de s'assurer que leur utilisation est conforme aux lois et réglementations applicables.
Fait avec ❤️ pour la liberté d'Internet
| Fonctionnalité | Description |
|---|
| 🔒 Chiffrement TLS | Tout le trafic chiffré avec TLS 1.2+ après STARTTLS |
| 🎭 Contournement DPI | La poignée de main initiale imite les serveurs SMTP réels (Postfix) |
| ⚡ Haute vitesse | Protocole de flux binaire après la poignée de main - surcharge minimale |
| 👥 Multi-utilisateur | Secrets par utilisateur, listes blanches IP et paramètres de journalisation |
| 🔑 Authentification | Clés pré-partagées par utilisateur avec HMAC-SHA256 |
| 🌐 Proxy SOCKS5 | Interface proxy standard - fonctionne avec n'importe quelle application |
| 📡 Multiplexage | Connexions multiples sur un seul tunnel |
| 🛡️ Liste blanche IP | Contrôle d'accès par utilisateur par adresse IP/CIDR |
| 📦 Installation facile | Installation du serveur en une ligne avec service systemd |
| 🎁 Paquets clients | Fichiers ZIP générés automatiquement pour chaque utilisateur |
| 🔄 Reconnexion automatique | Le client se reconnecte automatiquement en cas de perte de connexion |
| 🐧 Linux | Exécutez ./start.sh |
| 🍎 macOS | Exécutez ./start.sh |
| Option | Description | Défaut |
|---|
host | Interface d'écoute | 0.0.0.0 |
port | Port d'écoute | 587 |
hostname | Nom d'hôte SMTP (doit correspondre au certificat) | mail.example.com |
cert_file | Chemin du certificat TLS | server.crt |
key_file | Chemin de la clé privée TLS | server.key |
users_file | Chemin vers la configuration des utilisateurs | users.yaml |
log_users | Paramètre global de journalisation | true |
secret | Secret d'authentification de l'utilisateur | Requis |
whitelist | IP autorisées pour cet utilisateur (CIDR pris en charge) | Toutes les IP |
logging | Activer la journalisation des activités pour cet utilisateur | true |
| Option | Description | Défaut |
|---|
server_host | Nom de domaine du serveur | Requis |
server_port | Port du serveur | 587 |
socks_port | Port SOCKS5 local | 1080 |
socks_host | Interface SOCKS5 locale | 127.0.0.1 |
username | Votre nom d'utilisateur | Requis |
secret | Votre secret d'authentification | Requis |
ca_cert | Certificat CA pour vérification | Recommandé |