Postfix SASL 转发站
1. 引言
这份指南被设计来补充基本的 postfix 指南。它是针对 CentOS 7 和 8 而写成。CentOS 6 的设置会有所不同。
2. SASL 是什么,我需要它吗?
SASL(简单鉴定和安全层)提供一个以名称及口令来验证让用户的机制。最负盛名的 SASL 方案要算是 Cyrus SASL 提供的库。
假若你的 ISP 封锁 25 号端口的连接并要求你在发电邮时进行验证,你必须设置 SASL。
3. 还有 SSL/TLS 呢?
可见 SASL 能够提供一个机制,通过用户名称及口令来验证那些想利用邮件服务器来发放邮件的远程用户。然而,我们面对的一个问题就是这些机制都以纯文本在互联网上传送用户名称及口令(SASL 可支持如 DIGEST-MD5 等加密的验证方法,但它们并未必获电邮客户端软件广泛支持)。这构成一个安全性危机,因为任何人都有可能拦截这些信息并盗取登录数据,所以我们须要将连接加密。SSL(安全套接层)及较新的 TLS(传输层安全)提供一个机制将两台主机之间的通讯加密,在这个例子中就是我们的邮件服务器及远程客户端。SSL 由第 3.1 版开始被 IETF 换名为 TLS。
4. 研究你的 ISP
你必须参详你的 ISP 文档并找出进行验证 SMTP 用的服务器和端口。在此样例中,我们选用虚构的 ISP "example.com",它的 SMTP 服务器位于 smtp.example.com 的 587 号端口。
5. 在 postfix 内设置 SASL
第一步是创建一个含有你的 ISP 凭证的文件。
$ echo "smtp.example.com:587 我的帐号@example.com:我的口令" | sudo tee /etc/postfix/relay_creds $ sudo postmap /etc/postfix/relay_creds $ sudo chmod go-rwx /etc/postfix/relay_creds*
第二步是将新的设置加进 postfix 的 main.cf 档内。
$ sudo tee -a /etc/postfix/main.cf <<EoT # 为转发站加入 SASL 的支持 # 转发所有邮件用的主机 relayhost = [smtp.example.com]:587 # 启用 SASL 验证 smtp_sasl_auth_enable = yes # 在哪里找 sasl_passwd smtp_sasl_password_maps = hash:/etc/postfix/relay_creds # 占用允许匿名验证的方法 smtp_sasl_security_options = noanonymous # 启用 STARTTLS 加密 smtp_use_tls = yes EoT $ sudo systemctl restart postfix.service
请参阅 Postfix 网站 有关上述设置选项的详情。
6. 寄件测试
SASL 已被设置,而邮件将会通过转发站发放。请检查 /var/log/maillog 内是否出现错误。假如你需要更新凭证,请执行 "postmap /etc/postfix/relay_creds" 及 "service postfix reload"。
如果你发现有关电邮被不知名用户寄出的错误,你或许须要以你的 ISP 户口的电邮地址寄出所有电邮。在这个样例中,请改用你的 ISP 所提供的电邮地址。
$ echo '/.*/ MyUserName@example.com' | sudo tee -a /etc/postfix/sender_canonical $ sudo postmap /etc/postfix/sender_canonical $ echo 'sender_canonical_maps = regexp:/etc/postfix/sender_canonical' | sudo tee -a /etc/postfix/main.cf $ sudo systemctl restart postfix.service
Translation of revision 9