我有一个Unix系统,用户帐户只存在于LDAP中。 我用nscd使用libnss-ldapd来做到这一点,它工作得很好。 正常情况下,Postfix按预期发送邮件。
但是,如果LDAP服务器closures,并且用户映射没有完全caching在nscd中,用户似乎不存在(即, getent passwd username没有返回结果),因此Postfix的本地(8)硬盘将电子邮件与“未知用户“错误。 这非常糟糕 。
目前的configuration包括:
smtpd_smtpd_reject_unlisted_recipient = yes local_recipient_maps = $alias_maps, ldap:/etc/postfix/ldap-passwd.cf mailbox_transport_maps = ldap:/etc/postfix/ldap-passwd.cf
当LDAP服务不可用时,邮件通过SMTP正确进入tempfails。 但是,源自该主机的邮件(例如使用邮件(1))不会。
Apr 25 15:25:33 testmail postfix/local[5972]: warning: dict_ldap_lookup: Search error -1: Can't contact LDAP server Apr 25 15:25:33 testmail postfix/local[5972]: 29B4847DB: to=<ENVELOPE_TO_ADDRESS>, orig_to=<ENVELOPE_FROM_ADDRESS>, relay=local, delay=0.12, delays=0.01/0/0/0.11, dsn=5.1.1, status=bounced (unknown user: "ENVELOPE_TO_ADDRESS_LOCALPART")
我相当肯定地图configuration正确,因为如果LDAP服务可用,所有东西都能正常工作,包括NSS由于nslcd停止而无法看到LDAP地图的情况。 将mailbox_transport_maps设置为默认值(空)会产生相同的结果,除非没有LDAP连接错误。 如果使用代理映射(8),则没有改进。
如何让Postfix在LDAPclosures时推迟(而不是拒绝)传入邮件?
自从首次提出这个问题以来,这个问题被大量的编辑了 最初的问题是当LDAP不可用时,如何制作smtpd(8)tempfail; 事实certificate它已经这样做了。 真正的问题是在交付过程的后期。
可能相关:
原来是在后缀中的一个错误 。 作者在2.8.4,2.7.5,2.6.11和2.5.14 版本上应用了这个修补程序。
修复了Postfix版本:
…
本地(8)传递代理忽略mailbox_command_maps,mailbox_transport_maps,fallback_transport_maps中的表查找错误以及(将邮件反弹到别名时)别名所有者查找。