📌 适用场景:卡易信、WordPress、各类商城系统等,后台强制锁定SMTP发信地址(如smtp.qq.com),无法修改。同时又不想让邮件接收方(如QQ邮箱)通过Received头追踪到你的源服务器真实IP。
✨ 方案核心优势
无需修改程序配置:程序后台依然填写smtp.qq.com,全程无感转发,不用改动商城/卡易信后台参数
一劳永逸:不依赖特定SMTP服务器固定IP,服务商更换IP也不会失效
极致隐蔽:收件方查看邮件源码,仅能看到中转服务器IP,源站真实IP完全隐藏
🔧 架构原理
我们利用 iptables DNAT 目标地址转换 配合 Nginx 四层(TCP)流式转发,把原本发往外部SMTP的流量强行牵引至中转服务器,实现流量中转。
[源服务器: 210.98.132.55] | 1. 程序发起连接: smtp.qq.com:465 v [Hosts 劫持: smtp.qq.com -> 103.363.9.876] | [iptables DNAT: 所有465端口流量 -> 103.363.9.876] | v [香港中转服务器: 103.363.9.876] | 2. Nginx Stream 纯TCP透传,不解析加密内容 v [真实SMTP服务器: smtp.qq.com:465]
📋 准备工作
源服务器(湖北业务机):IP 210.98.132.55,安装宝塔面板,部署卡易信/商城/WordPress程序
中转服务器(香港节点):IP 103.363.9.876,仅IPv4,预装宝塔+Nginx
端口放行:香港服务器防火墙、云厂商安全组放行 TCP 465端口
第一步:配置香港中转服务器 Nginx四层转发
登录香港中转服务器,启用Nginx Stream四层模块,纯透传TCP流量,兼容SMTP加密SSL连接。
1. 进入宝塔Nginx配置目录:/www/server/panel/vhost/nginx/,新建配置文件 tcp_smtp_relay.conf
2. 写入完整转发规则代码:
# 存放路径:/www/server/panel/vhost/nginx/tcp_smtp_relay.conf
stream {
# 自定义日志格式,方便故障排查
log_format smtp_proxy '$remote_addr [$time_local] $protocol $status $bytes_sent $bytes_received $session_time "$upstream_addr"';
# 上游QQ邮箱SMTP服务池
upstream smtp_qq {
server smtp.qq.com:465;
}
# 监听本机465端口接收转发流量
server {
listen 465;
proxy_pass smtp_qq;
# 强制使用香港服务器公网IP出站(核心,控制邮件头IP)
proxy_bind 103.363.9.876;
# 连接超时参数优化
proxy_connect_timeout 15s;
proxy_timeout 300s;
proxy_buffer_size 16k;
# 日志存储路径
access_log /var/log/nginx/smtp_proxy_access.log smtp_proxy;
error_log /var/log/nginx/smtp_proxy_error.log warn;
}
}3. 校验Nginx语法并重载服务
# 校验配置语法 nginx -t # 重载Nginx生效 systemctl reload nginx # 查看465端口监听状态 ss -lntp | grep 465
执行后正常输出 nginx 进程监听465端口即代表中转配置完成。
第二步:配置源服务器(双重流量劫持,核心步骤)
登录湖北源业务服务器,分两步劫持DNS与内核流量,杜绝程序绕过中转的情况。
1. Hosts静态DNS劫持
# 编辑hosts文件 vim /etc/hosts
文件末尾追加一行,强制解析smtp.qq.com到中转IP:
103.363.9.876 smtp.qq.com
2. iptables内核DNAT强制转发(兜底方案,防止Hosts失效)
# 清空旧nat转发规则 iptables -t nat -F OUTPUT # 核心规则:本机所有TCP 465流量全部转发至香港中转机 iptables -t nat -A OUTPUT -p tcp --dport 465 -j DNAT --to-destination 103.363.9.876:465 # 放行连接回包,保证TCP链路正常 iptables -I OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -I FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
3. 持久化防火墙规则(服务器重启不丢失)
Debian/Ubuntu系统:
mkdir -p /etc/iptables iptables-save > /etc/iptables/rules.v4
CentOS系统:
service iptables save # 或 iptables-save > /etc/sysconfig/iptables
✅ 第三步:链路效果验证
1. 源服务器测试端口连通性
nc -vz smtp.qq.com 465
正常输出 Connected to smtp.qq.com (103.363.9.876) 代表劫持生效。
2. 进入卡易信/商城后台发送测试邮件,接收后查看邮件原始源码。
❌ 失败效果(暴露源站IP,方案未生效):
Received: from unknown (HELO localhost) (210.98.132.55)
✅ 成功效果(仅显示中转IP,源站隐藏):
Received: from localhost ([103.363.9.876]) by newxmesmtplogicsvrsz.xxx.qq.com ...
🔍 常见问题排查
连接超时 Connection timed out:检查香港服务器安全组/防火墙放行465端口、Nginx正常监听465、源站iptables规则无书写错误
SMTP认证失败 Authentication failed:和转发方案无关,核对QQ邮箱授权码、确认QQ邮箱后台已开启SMTP服务
Nginx报错 cannot assign requested address:检查proxy_bind后填写的IP
103.363.9.876是否为香港服务器真实网卡公网IP
📝 方案总结
通过 Hosts静态劫持 + iptables DNAT内核转发 + Nginx Stream四层TCP透传 三层机制搭建SMTP加密流量隧道。
方案通用性极强,不局限QQ邮箱,Gmail、阿里云企业邮等所有SMTP服务均可适配;全程无需修改商城、卡易信、WordPress等业务程序配置,完美解决强制锁定SMTP地址场景下隐藏源服务器公网IP的需求。
探索博客 · 运维笔记
2026年06月
文章声明:以上内容(如有图片或视频在内)除非注明,否则均为探索博客 | 原郁铭阳博客原创文章,转载或复制请以超链接形式并注明出处。
本文作者:探索博客本文链接:https://blog.tskjwl.com/?id=13







还没有评论,来说两句吧...