在上一篇中,我们成功配置了 Postfix 与 Dovecot 的核心交互。但截至目前,我们的服务器主要还是通过 25 端口在服务器之间传输邮件。
想要使用 Outlook、Thunderbird 或手机邮件 APP 发送邮件,我们需要开启标准的客户端提交端口:587 (Submission) 和 465 (SMTPS),并强制启用 TLS 加密,确保密码和邮件内容在传输过程中不被窃听。
1. 配置 Postfix 开启加密端口
Postfix 的多端口监听是由 /etc/postfix/master.cf 控制的。我们需要取消部分注释,开启专门给客户端用的“提交服务”。
编辑 /etc/postfix/master.cf,找到 submission 和 smtps 区域,修改如下(注意每行前面的空格缩进,格式非常重要):
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
# 启用 587 端口 (Submission) - 推荐用于 STARTTLS
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_reject_unlisted_recipient=no
# 兼容性选项 (可选)
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
# 启用 465 端口 (SMTPS) - 推荐用于 SSL/TLS (Outlook/手机常用)
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING修改完成后,重启 Postfix:
systemctl restart postfix2. 开放防火墙
客户端连接需要通过防火墙,我们需要放行对应的服务或端口。
# 放行 SMTP Submission (587) 和 SMTPS (465)
firewall-cmd --permanent --add-service=smtp-submission
firewall-cmd --permanent --add-service=smtps
# 如果你还需要 POP3S/IMAPS (995/993) 用于收信
firewall-cmd --permanent --add-service=imaps
firewall-cmd --permanent --add-service=pop3s
# 重载生效
firewall-cmd --reload3. 关于 Cloudflare 与 SSL 证书的特殊说明
很多站长习惯将域名托管在 Cloudflare 并开启“小黄云” (Proxy 模式) 以隐藏服务器真实 IP。这对 Web 服务很有用,但对邮件服务是致命的。
3.1 为什么不能开“小黄云”?
- 端口限制:Cloudflare 的代理模式默认只转发 HTTP/HTTPS 端口,不转发 25, 465, 587, 993 等邮件端口。客户端连接时会直接超时。
- 证书不匹配:开启代理后,客户端看到的证书是 Cloudflare 的泛域名证书,而不是你服务器上的证书,会导致客户端报错“证书无效”或“中间人攻击警告”。
3.2 正确的做法
- DNS 设置:在 Cloudflare 后台,将
mail.yourdomain.com的记录设置为 “仅 DNS (灰色云)”。这是必须的。 - 本地证书:服务器必须申请并配置真实的 Let's Encrypt 证书(我们在之前的文章中已经通过 acme.sh 完成了这一步,并配置到了
main.cf和10-ssl.conf中)。
4. 客户端连接测试
现在,我们可以使用 Thunderbird (雷鸟) 或其他客户端进行连接了。
4.1 推荐配置
收件服务器 (IMAP):
- 主机名:
mail.yourdomain.com - 端口: 993
- SSL: SSL/TLS
- 主机名:
发件服务器 (SMTP):
- 主机名:
mail.yourdomain.com - 端口: 465
- SSL: SSL/TLS
- 主机名:
- 用户名:
完整邮箱地址(如 [email protected]) - 密码: PostfixAdmin 中设置的密码
4.2 故障排查 (swaks)
如果客户端连不上,可以在服务器上用 swaks 模拟客户端进行测试,这比看客户端模糊的报错信息要准确得多。
# 安装 swaks
yum install -y swaks
# 测试 587 端口登录发送
swaks --to 收件箱@qq.com \
--from 发件人@你的域名.com \
--server 127.0.0.1 --port 587 \
--auth LOGIN --auth-user 发件人@你的域名.com \
--header "Subject: Test from Port 587" \
--body "This is a test email." 如果 swaks 能发送成功,但你本地电脑连不上,请检查本地网络是否封禁了 25/465 端口,或者检查 Cloudflare 的 DNS 是否确实改为了“灰云”。

评论已关闭