Maybe this is a joke.
663 字
3 分钟
MTProxy 代理搭建
利用 Nginx SNI 分流隐藏 MTProto Proxy (mtg)
在当前的防火墙环境下,直接暴露 MTProto 代理端口极易被精准识别并阻断。尝试利用 Nginx 的 stream 模块与 ssl_preread 功能,通过 SNI 分流技术将 mtg 隐藏在标准的 HTTPS(443 端口)流量中。
1. 方案优势
- 共用 443 端口:外部看来只是一个正常的 HTTPS 网站。
- 主动探测防御:直接访问 IP 或错误域名只会看到普通的 Web 页面。
- 协议混淆:结合
mtg的 FakeTLS 特性,极大地提高了流量的隐蔽性。
2. 环境准备
确保你的 Nginx 已经编译了 --with-stream 和 --with-stream_ssl_preread_module 模块。你可以通过 nginx -V 命令查看。
wget https://raw.githubusercontent.com/findthewayxf/scripts/refs/heads/main/nginx13.shbash nginx13.sh第一步:安装 mtg
首先,下载并安装支持 FakeTLS 的 mtg。
https://github.com/9seconds/mtg
# 设置 mtg 执行权限并移动到系统路径chmod +x mtgmv mtg /usr/local/bin/mtg --version第二步:生成 FakeTLS 密钥
我们需要生成一个带有 ee 前缀的密钥,用于启用 Enhanced FakeTLS 模式。
# 生成密钥(请记录输出的密钥)mtg generate-secret --hex mtg.test.com# 示例输出:ee39489da88888888cf0f4bdfd1ad533a474756e6e656c2e788888888e6c693. 配置 mtg 服务
创建配置文件
新建 /etc/mtg/config.toml,并填入你的密钥:
secret = "你的生成的密钥"bind-to = "127.0.0.1:3128" # 仅监听本地domain-fronting-port = 443创建 Systemd 服务
为了保证 mtg 在后台稳定运行,创建服务文件 /etc/systemd/system/mtg.service:
[Unit]Description=MTPROTO ProxyAfter=network.target
[Service]ExecStart=/usr/local/bin/mtg run /etc/mtg/config.tomlRestart=alwaysRestartSec=3DynamicUser=trueAmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]WantedBy=multi-user.target启动服务:
systemctl daemon-reloadsystemctl enable mtg --nowsystemctl status mtg4. Nginx 核心配置(SNI 分流)
这是整套方案的“大脑”。修改 /etc/nginx/nginx.conf 或在 stream.d/ 目录下添加配置。
Nginx Stream 配置
编辑 /etc/nginx/stream.d/mtg.conf:
stream { # 启用 ssl_preread 模块,读取 TLS ClientHello 中的 SNI ssl_preread on;
map $ssl_preread_server_name $backend_name { mtg.test.com mtg_backend; # 代理域名指向 mtg www.test.com https_backend; # 正常域名指向网站 default https_backend; # 默认转发给网站 }
upstream mtg_backend { server 127.0.0.1:3128; }
upstream https_backend { server 127.0.0.1:4443; # 网站后端监听内部端口 }
server { listen 443; proxy_pass $backend_name; }}Nginx Web 配置
确保你的 Web 服务(如 www.test.com)监听在内部端口 4443 上:
/etc/nginx/conf.d/mtg-server.conf
server { listen 127.0.0.1:4443 ssl; server_name www.test.com;
ssl_certificate /etc/nginx/ssl/crt.crt; ssl_certificate_key /etc/nginx/ssl/key.key;
root /var/www/html; index index.html;
location / { try_files $uri $uri/ =404; }}5. 总结与注意事项
配置完成后,重启 Nginx:systemctl restart nginx。
- 域名选择:建议为
mtg使用一个真实的二级域名,并为其配置合法的 SSL 证书(尽管 mtg 处理的是 FakeTLS)。 - 流量指纹:虽然本方案能隐藏协议特征,但大流量、长时间的连接依然可能被流量统计学识别。建议定期更换
secret。 - 安全加固:建议配合
fail2ban或防火墙策略,禁止 443 以外的不必要端口暴露。
MTProxy 代理搭建
https://harlon.me/posts/2019/02/08/mtproxy-代理搭建/