Postfix 搭建 SMTP 中继,避免 Lark 域名邮箱 SMTP 发件暴露源站 IP
前言
许多站长在回复评论时,通过 SMTP 发送通知邮件容易忽略一个安全隐患,部分邮局会在邮件头中记录源站的 IP。比如我正在用的 Lark 邮箱,也就是国际版的飞书,查看一下邮件原文。
可以在 Received: from 中直接看到源站的 IP 地址。
解决思路
最简单的方法自然是换个“专业点”邮局,这样 Received 里直接就没有源站的 IP 了,缺点是有点吃经济。至于免费邮局,目前能够完全免费使用的恐怕只有开头提到的 Lark 了。
想要避免这个问题也不难,可以找一台吃灰的服务器(无需 25 端口),在上面用 Postfix 搭建 SMTP 中继,中继的同时把邮件头中的源站 IP 丢弃,这样邮件头中的 IP 就会变成这台中继服务器,避免源站的 IP 暴漏。
Postfix
安装
以 Debian 为例,可以直接通过 apt 安装 Postfix
apt install postfix libsasl2-modules postfix-pcre -y在弹出的配置界面中,选择第二项 “Internet Site”,接下来的 “System mail name” 可以保持默认主机名
配置账号密码
让 Postfix 将 Lark 的 SMTP 服务器作为 relayhost,在 /etc/postfix/sasl_passwd 中配置 Lark 的账号密码
[smtp.larksuite.com]:587 your_lark_email@domain.com:your_smtp_password生成哈希数据库并修改权限
postmap /etc/postfix/sasl_passwd
chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db配置规则
创建 /etc/postfix/header_checks 文件,在里面配置上对应的规则,将源站 IP、客户端特征等都移除掉
/^Received:/ IGNORE
/^X-Mailer:/ IGNORE
/^User-Agent:/ IGNORE
/^X-Originating-IP:/ IGNORE
/^X-Real-IP:/ IGNORE
/^X-Forwarded-For:/ IGNORE配置 SMTP 中继
修改 Postfix 主配置文件 /etc/postfix/main.cf,在文件的最后添加上以下内容
# 1. 设置中继服务器为 Lark
relayhost = [smtp.larksuite.com]:587
# 2. 开启 SASL 认证
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
# 3. 开启 TLS 加密传输
smtp_tls_security_level = may
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
# 4. 允许源站无密码发邮件 例如源站 IP 为 x.x.x.x/32
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/10 [::1]/128 x.x.x.x/32
# 5. 修改 Postfix 的 HELO 问候名
smtp_helo_name = [127.0.0.1]修改端口
Postfix 默认情况下运行在 25 端口,还需要在 /etc/postfix/master.cf 中将端口修改为 2525
smtp inet n - y - - smtpd
2525 inet n - y - - smtpd启动 Postfix
systemctl start postfix
systemctl enable postfix使用
以 Waline 为例,此时发件填写的 SMTP 就不再是 Lark 的信息了,而是中继服务器的信息 SMTP_HOST 与 SMTP_PORT,用户名与密码也不需要配置,同时再添加上 SENDER_EMAIL 和 SENDER_NAME 即可。
提示
由于 Postfix 用的是自签证书,还需要设置一下 NODE_TLS_REJECT_UNAUTHORIZED
SMTP_HOST: x.x.x.x
SMTP_PORT: 2525
SENDER_EMAIL: noreply@domain.com
SENDER_NAME: 只抄博客
# 忽略自签名证书检查
NODE_TLS_REJECT_UNAUTHORIZED: 0








