我正在研究一种新的邮件设置,以使用 Cyrus-IMAP、Postfix 和 Perdition IMAP 代理服务器替换我们组织中的 Exchange。我在根据包含用户三个字母的部门(例如 FIN、PAY 等)的 LDAP 属性(extensionAttribute15)向不同的邮件存储发送电子邮件时遇到了问题。我们目前运行的是 Active Directory,我正在尝试确定将部门映射到特定邮件存储的最佳方法,因为他们不想为每个用户设置邮件主机属性。我目前正在使用 hosts 文件将三个字母的部门映射到邮件存储,因为他们不想查询 DNS,尽管我觉得这不是一个可行的长期解决方案。
有两个 Cyrus 后端服务器和一个前端 Perdition/Postfix 服务器。我的 IMAP 代理工作正常,并且使用上述 hosts 文件根据用户的部门从正确的邮件存储中提取邮件,但我无法让 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
答案1
我成功使用了相同的配置(大部分情况下)。它看起来和你的很像,所以只需稍加调整就可以了。我会稍微改变 result_format:
result_format = smtp:%s
您可以查询此查找表以查看是否获得了预期的结果:
postmap -q [email protected] ldap:/etc/postfix/ldap-virtual-transport.cf
无论如何,我认为你的错误是使用 virtual_transport 作为查找表,但事实并非如此。相反,你应该使用 transport_maps:
transport_maps = ldap:/etc/postfix/ldap-virtual-transport.cf