完美隐藏服务器IP:宝塔+Nginx四层转发,让SMTP发信“隐身”

探索博客探索博客昨天5 阅读0 评论

完美隐藏服务器IP:宝塔+Nginx四层转发,让SMTP发信“隐身”

📌 适用场景:卡易信、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月

The End 微信扫一扫

文章声明:以上内容(如有图片或视频在内)除非注明,否则均为探索博客 | 原郁铭阳博客原创文章,转载或复制请以超链接形式并注明出处。

本文作者:探索博客本文链接:https://blog.tskjwl.com/?id=13

上一篇 下一篇

相关阅读

发表评论

访客 访客
快捷回复: 表情:
评论列表 (暂无评论,5人围观)

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

取消
微信二维码
微信二维码
支付宝二维码