我正在尝试配置 postifx smtp_tls_policy_maps,以便我可以设置每个用户发出的电子邮件必须加密。
一个例子是电子邮件提供商 mailbox.org。从招聘启事中可以推断,该公司还依赖开源组件 dovecot 和 postfix。
如果“简单”的 SSL/TLS 连接对您来说不够安全,您可以在此处选择更严格的安全级别:
加密:通过 SSL/TLS 进行常规安全电子邮件加密,但禁止不安全的纯文本。 仅限丹麦:电子邮件仅发送给其 SSL 证书通过有效 DANE 记录验证的提供商。
核实:电子邮件仅发送给已手动将 SSL 证书添加到我们的数据库的提供商。
https://kb.mailbox.org/display/BMBOKBEN/Ensuring+E-Mails+are+Sent+Securely
有什么可能的解决方案?从Postfix TLS 手册不幸的是,我不明白
答案1
我自己搞定了!这是我的配置,在这种情况下是 LDAP 特定的,但可以轻松为 mysql 后端重写。
由于 Postfix SMTP 客户端参数没有“每个发件人映射”版本,因此我需要使用传输映射的“解决方法”。
/etc/postfix/main.cf
sender_dependent_default_transport_maps = ldap:/etc/postfix/ldap/transport_maps.cf
我创建了一个 forceenc 服务,其中包含强制执行 tls 的特定选项。此外,我添加了 smtp_delivery_status_filter 以用硬失败覆盖 TLS 握手失败的软失败。这样,用户就可以获得未送达的邮件退回给发件人即刻。
/etc/postfix/master.cf
forceenc unix - - y - - smtp
-o smtp_tls_loglevel=1
-o smtp_tls_security_level=encrypt
-o syslog_name=forceenc
-o smtp_delivery_status_filter=pcre:/etc/postfix/smtp_dsn_filter
在 /etc/postfix/smtp_dsn_filter 中
/^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/
5$1
/^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/
5$1
/^4.7.5(.*)/
5.7.5$1
这是我的用于传输图查找的 ldap 特定配置。
/etc/postfix/ldap/transport_maps.cf
server_host = ldaps://ldap.example.com
bind = yes
start_tls = no
version = 3
bind_dn = cn=root,dc=ldap,dc=example,dc=com
bind_pw = THE_LDAP_ROOT_PASS
search_base = ou=people,dc=ldap,dc=example,dc=com
scope = sub
# simple user select filter
query_filter = (&(mail=%s)(mailEnabled=TRUE)(objectClass=person))
# an custom schema which returns "forceenc:"
result_attribute = transportMap
debuglevel = 0
对于进一步的阅读我建议这线。