关于Postfix结合Active Directory按用户组限制发件人权限与发件域名的配置咨询
关于Postfix结合Active Directory按用户组限制发件人权限与发件域名的配置咨询
当然可以实现这个需求!我来一步步给你讲怎么配置,前提是你的Postfix已经和Dovecot+AD认证正常工作哈:
第一步:让Dovecot获取用户的AD组信息
Postfix需要知道用户属于哪个AD组,所以得先让Dovecot在认证时把用户的组信息传递给Postfix:
- 打开Dovecot的LDAP认证配置文件(一般是
/etc/dovecot/conf.d/auth-ldap.conf.ext),添加用户属性映射,把AD的memberOf属性(用户所属组的DN)传递给Postfix:
user_attrs = =userGroups=%{ldap:memberOf}
如果你想更精准,也可以直接过滤出目标组的标记,但直接传递memberOf会更灵活。
2. 确保/etc/dovecot/conf.d/10-auth.conf里的auth_username_format = %n配置正确,这样用户名格式能和Postfix兼容。
第二步:配置Postfix按组限制发件域名
接下来在Postfix里定义不同组的发件规则:
- 编辑
/etc/postfix/main.cf,添加限制类和检查规则:
# 定义两个组的专属限制规则 smtpd_restriction_classes = group_a_restrictions, group_b_restrictions # Group A用户只能使用@a.local发件 group_a_restrictions = check_sender_access hash:/etc/postfix/group_a_senders, reject_sender_login_mismatch, permit # Group B用户只能使用@b.local发件 group_b_restrictions = check_sender_access hash:/etc/postfix/group_b_senders, reject_sender_login_mismatch, permit # 在发件人限制中加入组检查逻辑 smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, # 替换成你AD中Group A的完整DN check_sasl_attr userGroups=cn=GroupA,ou=Groups,dc=yourdomain,dc=local group_a_restrictions, # 替换成你AD中Group B的完整DN check_sasl_attr userGroups=cn=GroupB,ou=Groups,dc=yourdomain,dc=local group_b_restrictions, reject_unauth_destination
- 创建发件域名限制文件:
- 新建
/etc/postfix/group_a_senders,内容如下:@a.local OK * REJECT 你仅被允许使用@a.local域名发件 - 新建
/etc/postfix/group_b_senders,内容如下:@b.local OK * REJECT 你仅被允许使用@b.local域名发件
- 新建
- 生成Postfix需要的哈希表:
postmap /etc/postfix/group_a_senders postmap /etc/postfix/group_b_senders
第三步:重启服务并验证
最后重启Postfix和Dovecot使配置生效:
systemctl restart postfix dovecot
现在你可以用Group A的用户尝试发@b.local的邮件,应该会收到拒绝提示;Group B的用户发@a.local同理也会被拦截,只有使用对应组的域名才能正常发件。
注意事项
- 一定要替换配置里的组DN为你AD中实际的GroupA、GroupB的完整DN,不然匹配会失败。
- 如果用户同时属于多个组,你可能需要调整规则优先级,避免冲突。
- 可以用
postconf -n检查Postfix配置是否正确加载,dovecot -n验证Dovecot的LDAP属性映射是否生效。
备注:内容来源于stack exchange,提问作者Laskus
相关产品推荐
相关产品推荐

