在部分项目中使用了谷歌邮箱提供的SMTP发信服务,但最近偶然测试发现客户端IP被暴露,在印象中是隐藏的不然也不会使用。  
项目外部使用了Cloudflare用来负责恶意流量攻击问题,但结果通过Gmail这一操作,简直让CDN形同虚设;吐槽归吐槽,问题还是得解决,因为服务器一直在正常运行,不想在原有服务器做太多操作以免造成更多事故,所以决定在两者之间加一个转发服务器隐藏源真实IP,流程如下:  

源服务器配置
源服务器主要通过与smtp.gmail.com:587进行TLS通信,现在加了转发,只需要在让其DNS强制解析为转发服务器即可,其它不需要做任何修改。  
服务器文件/etc/hosts追增一条记录1.1.1.1   smtp.gmail.com,这里的1.1.1.1是转发服务器演示IP,酌情修改。
转发服务器配置
转发服务器其实只做了一个工作,那就是TCP流量转发,实际上只需要依靠iptables配置即可,但这里我用了Gost,主要是方便配置管理以及日志观察,当然iptables同样也可以,看自己喜好了。
Gost手动安装
使用的服务器环境是debian11,架构amd64;截止目前最新版本:v3.0.0-nightly.20231127 Pre-release
cd ~
# 下载
wget https://github.com/go-gost/gost/releases/download/v3.0.0-nightly.20231126/gost_3.0.0-nightly.20231126_linux_amd64.tar.gz
# 解压
tar -zxvf gost_3.0.0-nightly.20231126_linux_amd64.tar.gz
# 给予权限
chmod +x ./gost  
# 移至系统执行目录 
mv ./gost /usr/local/bin/
# 测试是否安装成功
gost -V如果能正确看到版本号输出说明安装成功。  
Gost 配置转发
创建目录/usr/local/gost/,建立配置文件config.yaml;完整路径:/usr/local/gost/config.yaml,写进以下内容:
services:
  - name: gmail-stmp-tls
    addr: :587
    handler:
      type: tcp
    listener:
      type: tcp
    forwarder:
      nodes:
        - name: gmail-stmp-remote
          addr: smtp.gmail.com:587
log:
  level: info
  format: text
  output: /var/log/gost.log
  rotation:
    maxSize: 100
    maxAge: 10
    maxBackups: 3
    localTime: false
    compress: false
配置非常简单,将本地端口587的所有流程转发至远程smtp.gmail.com:587,本地日志路径:/var/log/gost.log,配置写完可以通过执行/usr/local/bin/gost -C /usr/local/gost/config.yaml,观察日志用以判断是否配置正确。
Gost 配置自启
创建文件/etc/systemd/system/gost.service写入以下内容保存:
[Unit]
Description=GO Simple Tunnel
After=network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/gost -C /usr/local/gost/config.yaml
Restart=always
[Install]
WantedBy=multi-user.target最后执行:systemctl enable gost && systemctl start gost && systemctl status gost,观察结果,如图所示即为成功启动:  
 
  
目前就可以在项目中测试发送邮件判断客户端IP是不是转发服务器啦。
其它事项
- 以上所有操作步骤只适合在网络没有污染且通畅的情况下使用
- 此方法虽然隐藏了源服务器IP,但依然会暴露转发服务器IP
- 转发服务器可通过白名单或使用 Cloudflare WARP加强防护
