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.pystart.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.yamllogging: true/false
  • 自定义端口 – 在 config.yaml 中修改 socks_portserver_port
  • 升级smtp-tunnel-update 同步最新代码,同时保留配置。

安全建议

  1. 使用域名 – TLS 证书需要主机名,IP 地址会触发验证错误。
  2. 保留 ca.crt – 将 CA 文件分发给客户端,防止 MITM。
  3. 限制 IP – 如可行,白名单已知客户端 IP。
  4. 保护 users.yaml – 设置文件权限为 600
  5. 禁用敏感用户日志 – 防止日志泄露。

常见故障排除 FAQ

症状 可能原因 解决办法
连接被拒绝 服务器未运行 sudo systemctl status smtp-tunnelps aux | grep server.py
认证失败 密钥不匹配 检查 users.yaml;使用 smtp-tunnel-adduser 重新生成
IP 不在白名单 当前 IP 未列入 更新 users.yaml 或移除白名单键
证书校验失败 使用 IP、域名不匹配 确保 server_host 与证书一致;复制 ca.crt

结论

SMTP 隧道代理证明,您可以构建可靠、极速、伪装成合法 SMTP 流量的隧道。其纯 Python 的实现、简洁的一键安装脚本以及强大的功能,使其成为开发者、系统管理员和隐私倡导者在无需复杂 VPN 配置的情况下,突破受限网络的理想选择。

欢迎 Fork 该项目,贡献改进,或根据自身需要修改以满足审查规避需求。祝您使用愉快!

原创文章: 查看原文

分享本文