如何编写含恒真条件的Postfix LDAP过滤器实现全体邮件列表?
LDAP恒真过滤器与Postfix all@邮件列表配置方案
一、LDAP恒真过滤器的可行性
可以编写恒真的LDAP过滤器,有两种常用且可靠的实现方式:
(objectClass=*):所有LDAP条目都必须包含objectClass属性,因此该表达式对任何条目都为真,兼容性最强。('somestr'='somestr'):理论上也能生效,但部分LDAP服务器可能对非属性的字符串匹配有限制,不如前者通用。
二、Postfix all@domain.ltd邮件列表的正确配置
你当前配置存在两个核心问题:
- 拼写错误:
objectClass=PostfixailAccount应为objectClass=PostfixMailAccount - 逻辑错误:当前配置要求某个属性等于
all@domain.ltd才返回结果,而我们需要的是当收件人为all@domain.ltd时,返回所有活跃账号。
正确的过滤器配置
将.cf文件中的query_filter修改为:
query_filter = (&(objectClass=PostfixMailAccount)(PostfixaccountActive=TRUE)(|(mail=%s)(%s=all@domain.ltd)))
逻辑说明
- 当收件人是普通用户(如
user@domain.ltd)时,(mail=%s)会匹配对应用户条目,仅返回该用户。 - 当收件人是
all@domain.ltd时,(%s=all@domain.ltd)条件成立,整个|逻辑为真,所有满足objectClass=PostfixMailAccount且PostfixaccountActive=TRUE的条目都会被返回,实现全员邮件列表的需求。
验证建议
- 确认LDAP服务器中
PostfixaccountActive属性的取值为TRUE(部分服务器可能要求小写true,需根据实际配置调整) - 用
ldapsearch工具测试过滤器有效性,示例命令:ldapsearch -x -b "dc=domain,dc=ltd" "(&(objectClass=PostfixMailAccount)(PostfixaccountActive=TRUE)(mail=all@domain.ltd))" mail
内容的提问来源于stack exchange,提问作者krege
相关产品推荐
相关产品推荐

