使用 Postfix per User 對傳出 SMTP 強制加密
我正在嘗試配置 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
為了進一步閱讀,我推薦這個執行緒。