后缀分割域使用LDAP分隔邮件存储

我正在调查一个新的邮件设置,以使用Cyrus-IMAP,Postfix和Perdition IMAP代理服务器来replace我们组织中的Exchange。 我正在处理根据LDAP属性(extensionAttribute15)(包含用户的三个字母部门(例如FIN,PAY等))将电子邮件发送到不同的邮件存储的问题。 我们目前运行Active Directory,并试图决定将部门映射到特定邮件存储的最佳方式,因为他们不想为每个用户设置邮件主机属性。 我目前使用主机文件将三个字母部门映射到一个邮件存储,因为他们不想查询DNS超过需要,但我不觉得这是一个可行的长期解决scheme。

有两个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 

configuration文件的相关部分贴出如下:

 #/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 - nn - - local virtual unix - nn - - 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 

我正在成功使用相同的configuration(大部分)。 它看起来很像你的,所以它应该与一些调整。 我会稍微改变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