Skip to content

Postfix 搭建 SMTP 中继,避免 Lark 域名邮箱 SMTP 发件暴露源站 IP

前言

许多站长在回复评论时,通过 SMTP 发送通知邮件容易忽略一个安全隐患,部分邮局会在邮件头中记录源站的 IP。比如我正在用的 Lark 邮箱,也就是国际版的飞书,查看一下邮件原文

显示邮件原文
显示邮件原文

可以在 Received: from 中直接看到源站的 IP 地址。

Received: from
Received: from

解决思路

最简单的方法自然是换个“专业点”邮局,这样 Received 里直接就没有源站的 IP 了,缺点是有点吃经济。至于免费邮局,目前能够完全免费使用的恐怕只有开头提到的 Lark 了。

想要避免这个问题也不难,可以找一台吃灰的服务器(无需 25 端口),在上面用 Postfix 搭建 SMTP 中继,中继的同时把邮件头中的源站 IP 丢弃,这样邮件头中的 IP 就会变成这台中继服务器,避免源站的 IP 暴漏。

Postfix

安装

以 Debian 为例,可以直接通过 apt 安装 Postfix

sh
apt install postfix libsasl2-modules postfix-pcre -y

在弹出的配置界面中,选择第二项 “Internet Site”,接下来的 “System mail name” 可以保持默认主机名

Internet Site
Internet Site

配置账号密码

让 Postfix 将 Lark 的 SMTP 服务器作为 relayhost,在 /etc/postfix/sasl_passwd 中配置 Lark 的账号密码

/etc/postfix/sasl_passwd
txt
[smtp.larksuite.com]:587 your_lark_email@domain.com:your_smtp_password

生成哈希数据库并修改权限

sh
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客户端特征等都移除掉

/etc/postfix/header_checks
txt
/^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,在文件的最后添加上以下内容

/etc/postfix/main.cf
sh
# 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

/etc/postfix/master.cf
sh
smtp      inet  n       -       y       -       -       smtpd
2525      inet  n       -       y       -       -       smtpd

启动 Postfix

sh
systemctl start postfix
systemctl enable postfix

使用

以 Waline 为例,此时发件填写的 SMTP 就不再是 Lark 的信息了,而是中继服务器的信息 SMTP_HOSTSMTP_PORT,用户名与密码也不需要配置,同时再添加上 SENDER_EMAILSENDER_NAME 即可。

提示

由于 Postfix 用的是自签证书,还需要设置一下 NODE_TLS_REJECT_UNAUTHORIZED

yaml
SMTP_HOST: x.x.x.x
SMTP_PORT: 2525
SENDER_EMAIL: noreply@domain.com
SENDER_NAME: 只抄博客

# 忽略自签名证书检查
NODE_TLS_REJECT_UNAUTHORIZED: 0

Last updated:

经典款
RackNerd

RackNerd

新手入门首选

洛杉矶 DC3 机房 | 3T 大流量

1C / 1GB / 20GB SSD / 3TB 流量

$21.99/年
欧洲优化
V.PS

V.PS

可选荷兰 / 德国

欧洲三网优化 | 电信 GIA + 联通 9929 + 移动 CMIN2

2C / 1GB / 20GB NVMe / 1TB 流量

€6.95/月
关注微信公众号
优化线路
Evoxt

Evoxt

最便宜的亚太优化线路

马来西亚 电信 GIA / 联通 9929
优惠码:AFF2377-DEV

1C / 512MB / 5GB SSD / 150GB 流量

$3.32/月
优化线路
搬瓦工

搬瓦工

15 个机房自由切换

洛杉矶 DC6 机房
电信 / 联通 GIA + 移动 CMIN2

2C / 2GB / 40GB SSD / 2.5TB 流量

$49.99/季