邪修翻墙,用smtp协议来翻墙的项目smtp-tunnel-proxy
项目介绍
https://github.com/x011/smtp-tunnel-proxy
smtp-tunnel-proxy 是一个开源的 Python 项目(GitHub: x011/smtp-tunnel-proxy),其核心目的是创建一个隐蔽的 TCP 隧道,通过将任意 TCP 流量伪装成标准的 SMTP(电子邮件)通信来绕过深度包检测(DPI)防火墙。
它的工作原理是:
- 利用 SMTP 协议的合法特性(EHLO、AUTH、STARTTLS 等命令),让初始连接看起来像普通的邮件服务器交互(模仿 Postfix 等真实 MTA)。
- 在 STARTTLS 建立 TLS 加密后,切换到自定义的二进制流协议,进行高效的 TCP 数据多路复用传输。
- 客户端提供标准的 SOCKS5 代理接口,应用程序(如浏览器、curl 等)可以将流量路由到本地 SOCKS5 端口,从而通过隧道转发到服务器端出口。
关键特点:
- DPI 规避:初始 SMTP 握手高度仿真真实邮件流量。
- 高性能:TLS 加密后使用二进制协议, overhead 低,支持多路复用。
- 多用户支持:服务器可管理多个用户,每个用户有独立密钥、IP 白名单、日志控制。
- 安全机制:强制 TLS 1.2+、HMAC-SHA256 认证、CA 证书验证、IP 白名单。
- 接口:仅提供 SOCKS5(不支持 HTTP 代理)。
- 最新版本:v1.3.0(2026 年 1 月发布),GPL-3.0 许可。
项目明确设计用于在受 DPI 限制的网络环境中建立 covert channel,技术上可用于将受限网络的流量转发到无限制的服务器出口(即常见的“代理/隧道”场景)。
技术部署指南
1. 前提条件
- 服务器:一台位于无网络限制地区的 VPS(Linux,Python 3.8+),开放端口(默认 587)。
- 域名:推荐使用动态域名(如 DuckDNS)指向 VPS IP(TLS 证书验证需要域名)。
- 客户端:Windows/macOS/Linux 机器,Python 3.8+。
2. 服务器部署(一键安装推荐)
curl -sSL https://raw.githubusercontent.com/x011/smtp-tunnel-proxy/main/install.sh | sudo bash安装过程会:
- 提示输入域名。
- 自动生成 TLS 证书(server.crt、server.key、ca.crt)。
- 安装到 /opt/smtp-tunnel/,配置放到 /etc/smtp-tunnel/。
- 创建 systemd 服务(smtp-tunnel.service)。
- 提供管理命令(如 smtp-tunnel-adduser)。
添加用户(为每个客户端生成配置):
sudo smtp-tunnel-adduser <username>- 这会生成随机密钥、在 users.yaml 中添加用户、并打包 <username>.zip(包含客户端所需的所有文件:config.yaml、ca.crt、启动脚本)。
服务管理:
sudo systemctl restart smtp-tunnel # 重启服务
sudo journalctl -u smtp-tunnel -f # 查看日志配置文件示例(/etc/smtp-tunnel/config.yaml):
host: 0.0.0.0
port: 587
hostname: mail.yourdomain.com # 必须与证书匹配
cert_file: server.crt
key_file: server.key
users_file: users.yaml
log_users: true3. 客户端部署(推荐使用管理员提供的 ZIP 包)
- 从服务器管理员处获取 <username>.zip。
解压后:
- Windows:双击
start.bat。 - Linux/macOS:执行
./start.sh。
- Windows:双击
- 脚本会自动安装依赖(requirements.txt),启动客户端。
- 默认在
127.0.0.1:1080监听 SOCKS5 代理。
手动运行(如果不使用 ZIP):
git clone https://github.com/x011/smtp-tunnel-proxy.git
cd smtp-tunnel-proxy
pip install -r requirements.txt
python client.py -c config.yaml客户端配置示例(config.yaml):
client:
server_host: "mail.yourdomain.com"
server_port: 587
socks_port: 1080
socks_host: 127.0.0.1
username: "your_username"
secret: "your_secret_from_adduser"
ca_cert: "ca.crt" # 必须包含服务器提供的 CA 证书4. 使用方式(技术测试)
将应用程序配置为使用 SOCKS5 代理:
- 主机:127.0.0.1
- 端口:1080
- 启用“远程 DNS 解析”(socks5h)。
测试命令:
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me返回结果应为服务器(VPS)的公网 IP。
系统级代理示例:
export ALL_PROXY=socks5://127.0.0.1:1080
5. 注意事项与限制
- 必须使用提供的 ca.crt 验证服务器证书(防止中间人攻击)。
- 服务器时间需同步。
- 仅支持 SOCKS5,需要应用支持该协议。
- 性能取决于网络条件和 VPS 带宽。
- IP 白名单可限制客户端来源 IP。
此项目纯粹是网络协议层的技术实现,适合用于研究 SMTP 协议扩展、隧道技术或 DPI 规避机制。
版权属于:fanqiang.info
本文链接:https://fanqiang.info/archives/smtp-tunnel-proxy.html
若无特别注明,本文皆为“fanqiang.info”原创,随意转载但请保留文章出处。更多精彩内容在电报频道更新: https://t.me/fqinfo