使用 Postfix 强制对每个用户发送的 SMTP 进行加密

使用 Postfix 强制对每个用户发送的 SMTP 进行加密

我正在尝试配置 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

对于进一步的阅读我建议线。

相关内容