Ssl

使用 Postfix per User 對傳出 SMTP 強制加密

  • November 6, 2019

我正在嘗試配置 postifx smtp_tls_policy_maps 以便我可以設置每個使用者的外發電子郵件必須加密。

一個例子是電子郵件提供商mailbox.org。從工作機會可以推斷,該公司還依賴開源組件 dovecot 和 postfix。

如果“簡單”SSL/TLS 連接對您來說不夠安全,您可以在此處選擇更強大的安全級別:

encrypt:通過 SSL/TLS 進行正常安全電子郵件加密,但禁止使用不安全的明文。 dane-only:電子郵件僅發送給 SSL 證書通過有效 DANE 記錄驗證的提供商。

verify:電子郵件僅發送給已手動將 SSL 證書添加到我們數據庫中的提供商。

https://kb.mailbox.org/display/BMBOKBEN/Ensuring+E-Mails+are+Sent+Securely


什麼是可能的解決方案?不幸的是,從後綴的TLS 手冊中我無法弄清楚

自己搞定了!這是我現在的配置,在這種情況下特定於 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

為了進一步閱讀,我推薦這個執行緒。

引用自:https://serverfault.com/questions/990718