在部分项目中使用了谷歌邮箱提供的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加强防护