Postfix
Postfix 使用 LDAP 將域拆分為單獨的郵件儲存
我正在研究一種新的郵件設置,以使用 Cyrus-IMAP、Postfix 和 Perdition IMAP 代理伺服器替換我們組織中的 Exchange。我在處理基於包含使用者的三個字母部門(例如 FIN、PAY 等)的 LDAP 屬性(extensionAttribute15)向不同郵件儲存發送電子郵件時遇到問題。我們目前執行 Active Directory,我正在嘗試確定將部門映射到特定郵件儲存的最佳方法,因為他們不想為每個使用者設置郵件主機屬性。我目前正在使用主機文件將三個字母部門映射到郵件儲存,因為他們不想查詢 DNS 超出需要,儘管我不認為這是一個可行的長期解決方案。
有兩台 Cyrus 後端伺服器和一台前端 Perdition/Postfix 伺服器。我讓 IMAP 代理正常工作,並使用上面提到的主機文件根據使用者部門從正確的郵件儲存中提取,但我無法讓 Postfix 正常工作。
Postfix ldap_table 文件在 result_format 選項下提到將郵件主機地址返回為“smtp :
$$ %s $$可以作為傳輸表的基礎,但是當我嘗試這樣做時,代理伺服器上的 postfix 郵件日誌中出現錯誤:
postfix/qmgr[1593]: warning: connect to transport private/ldap: No such file or directory
下面發布的配置文件的相關部分:
#/etc/postfix/main.cf myhostname = perdition.test.domain.com mydomain = test.domain.com mydestination = $myhostname, localhost mynetworks_style = subnet virtual_transport = ldap:/etc/postfix/ldap-virtual-transport.cf virtual_mailbox_domains = email.test.domain.com virtual_mailbox_maps = ldap:/etc/postfix/ldap-aliases.cf alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases #/etc/postfix/ldap-virtual-transport.cf version = 3 server_host = ldap.domain.com search_base = <email user search base> bind_dn = <bind user dn> bind_pw = <bind user pw> query_filter = (sAMAccountName=%u) result_attribute = extensionAttribute15 result_format = smtp:[%s] #/etc/postfix/ldap-aliases.cf version = 3 server_host = ldap.domain.com search_base = <email user search base> bind_dn = <bind user dn> bind_pw = <bind user pw> query_filter = (sAMAccountName=%u) result_attribute = mail result_format = %s #/etc/postfix/master.cf smtp inet n - n - - smtpd -o smtp_dns_support_level=disabled submission inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject #628 inet n - n - - qmqpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - n 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp # When relaying mail as backup MX, disable fallback_relay to avoid MX loops relay unix - - n - - smtp -o smtp_fallback_relay= # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache #/etc/hosts 172.29.99.43 store01 store01.test.domain.com FIN 172.29.99.41 store02 store02.test.domain.com PAY
我正在成功使用相同的配置(大部分)。它看起來很像您的,因此應該進行一些調整。我會稍微改變 result_format :
result_format = smtp:%s
您可以查詢此查找表以查看是否獲得了預期的結果:
postmap -q user@test.domain.com ldap:/etc/postfix/ldap-virtual-transport.cf
無論如何,我認為您的錯誤是使用 virtual_transport 作為查找表,而事實並非如此。相反,您應該使用 transport_maps:
transport_maps = ldap:/etc/postfix/ldap-virtual-transport.cf