SMTP 隧道代理——基于 SMTP 的高速 SOCKS5,可规避 DPI
SMTP 隧道代理
在深度包检测 (DPI) 能够屏蔽网页流量的时代,研究人员和隐私倡导者需要兼顾隐蔽与性能的解决方案。SMTP 隧道代理正填补此空白,它将任何 TCP 流转换为 SMTP 对话,让数据通过通常允许的 SMTP 端口(25、587 或 465)穿透防火墙。该项目用纯 Python 编写,部署快速,无需内核改动。
问题陈述
- 许多企业及国家防火墙会在 80/443 端口过滤流量,阻止 HTTPS。
- 传统 VPN 与 SSH 隧道会被 DPI 检测到或被限速。
- 规避审查需要外观无害的工具。
解决方案:使用标准 SMTP 协议作为掩护,利用 TLS 加密以及防火墙对端口检索少量的标准邮件传输端口。
架构概览
浏览器 → SOCKS5 客户端 → SMTP 隧道服务器 → 网络
TCP 流量 伪装为 SMTP 通过 TLS 正常外发
关键组件: * 服务器 – 监听 TCP 587,完成 STARTTLS 握手,然后切换为自定义二进制协议。 * 客户端 – 本地 SOCKS5 代理(默认 1080 端口),将流量转发到服务器。 * 用户层 – 每个用户名拥有唯一预共享密钥,可选 IP 白名单,按用户日志。
核心功能
| 功能 | 描述 |
|---|---|
| TLS 1.2+ | STARTTLS 后所有数据加密 |
| DPI 绕过 | 握手模拟真实 Postfix 服务器 |
| 高速 | 二进制流,极低开销 |
| 多用户 | 独立密钥、IP 限制、日志 |
| 自动重连 | 客户端断开后自动重连 |
| 一键安装 | curl … | sudo bash |
| systemd 服务 | 后台运行并在重启后自动重启 |
快速开始指南
1. 服务器搭建(Linux VPS)
# 1. 选择指向你的 VPS 的域名(DuckDNS、No‑IP 等)
# 2. 运行一键安装脚本
curl -sSL https://raw.githubusercontent.com/x011/smtp-tunnel-proxy/main/install.sh | sudo bash
安装程序做了以下工作: * 下载所有必要文件。 * 询问你的域名。 * 生成 TLS 证书。 * 创建第一个用户。 * 配置防火墙并启动 systemd 服务。
2. 添加额外用户
sudo smtp-tunnel-adduser alice # 创建包含客户端配置的 ZIP
sudo smtp-tunnel-adduser bob
ZIP 包含 client.py、start.sh/.bat 以及用户秘密的 config.yaml。
3. 客户端搭建(Windows/Linux/macOS)
方案 A – 简易(推荐)
1. 解压 alice.zip。
2. 运行 start.bat(Windows)或 ./start.sh(Linux/macOS)。
方案 B – 手动
cd alice
pip install -r requirements.txt
python client.py
启动后客户端会在 127.0.0.1:1080 启动 SOCKS5 监听。
4. 将应用指向 SOCKS 代理
- 浏览器 →
http://127.0.0.1:1080(Firefox、Chrome)。 - 系统全局 → 环境变量
ALL_PROXY=socks5://127.0.0.1:1080。 - 用
curl -x socks5://127.0.0.1:1080 https://ifconfig.me测试。
高级配置
- IP 白名单 – 编辑
users.yaml,在每个用户下添加 CIDR 块。 - 日志 – 在
users.yaml中logging: true/false。 - 自定义端口 – 在
config.yaml中修改socks_port或server_port。 - 升级 –
smtp-tunnel-update同步最新代码,同时保留配置。
安全建议
- 使用域名 – TLS 证书需要主机名,IP 地址会触发验证错误。
- 保留
ca.crt– 将 CA 文件分发给客户端,防止 MITM。 - 限制 IP – 如可行,白名单已知客户端 IP。
- 保护
users.yaml– 设置文件权限为600。 - 禁用敏感用户日志 – 防止日志泄露。
常见故障排除 FAQ
| 症状 | 可能原因 | 解决办法 |
|---|---|---|
| 连接被拒绝 | 服务器未运行 | sudo systemctl status smtp-tunnel 或 ps aux | grep server.py |
| 认证失败 | 密钥不匹配 | 检查 users.yaml;使用 smtp-tunnel-adduser 重新生成 |
| IP 不在白名单 | 当前 IP 未列入 | 更新 users.yaml 或移除白名单键 |
| 证书校验失败 | 使用 IP、域名不匹配 | 确保 server_host 与证书一致;复制 ca.crt |
结论
SMTP 隧道代理证明,您可以构建可靠、极速、伪装成合法 SMTP 流量的隧道。其纯 Python 的实现、简洁的一键安装脚本以及强大的功能,使其成为开发者、系统管理员和隐私倡导者在无需复杂 VPN 配置的情况下,突破受限网络的理想选择。
欢迎 Fork 该项目,贡献改进,或根据自身需要修改以满足审查规避需求。祝您使用愉快!