![有没有办法根据发件人所在的 Active Directory 组来限制发件人在 Postfix 中的访问?](https://linux22.com/image/787661/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E6%A0%B9%E6%8D%AE%E5%8F%91%E4%BB%B6%E4%BA%BA%E6%89%80%E5%9C%A8%E7%9A%84%20Active%20Directory%20%E7%BB%84%E6%9D%A5%E9%99%90%E5%88%B6%E5%8F%91%E4%BB%B6%E4%BA%BA%E5%9C%A8%20Postfix%20%E4%B8%AD%E7%9A%84%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我有一个 Postfix 服务器设置,它使用 dovecot 针对 AD 进行身份验证。
是否有一个选项可以配置它,以便 A 组中的一个用户可以以@a.local 域的身份发送邮件,而 B 组的用户则可以以@b.local 域的身份发送邮件?
答案1
Postfix 有smtpd_sender_login_maps
和reject_sender_login_mismatch
为此,尽管它的工作方式相反:提供信封发件人邮件地址(邮件客户端在MAIL FROM:
协议命令中发送),它会向映射请求所有有权使用此邮件地址的 SASL 登录列表。如果经过身份验证的用户名恰好在此列表中,则检查通过,否则将返回错误。
这与身份验证方法和库无关;唯一将其与身份验证联系起来的是用户名。这是授权。
您需要设计您的smtpd_sender_login_maps
以便:
- 查询 LDAP(广告)
- 查询的动态部分
%s
实际上将被替换为发件人电子邮件地址,或者,在您的情况下,您可以假设它是域部分(@领域实际上) - 查询应该返回SMTP SASL 用户名允许使用该邮件地址发送邮件的用户。为了构建这样的列表,查询可能会检查 AD 组的成员身份。
submission
然后,如果您在 Postfix 中使用专用服务来接收来自您的用户的邮件,请在该服务配置中设置 smtpd_sender_restrictions=reject_sender_login_mismatch。在最近的 Postfix 版本中,master.cf
通常有smtpd_sender_restrictions=$mua_sender_restrictions
提交服务,因此您需要在文件中设置main.cf
:
mua_sender_restrictions = reject_sender_login_mismatch
smtpd_sender_login_maps = ldap:/etc/postfix/ldap-sender-login-maps.cf
其中/etc/postfix/ldap-sender-login-maps.cf
包含 AD 中 Postfix 的查询和身份验证参数以执行此查询。
此 LDAP 查询可能难以实现。如果这对您来说太难,请考虑以下方法:
- 编写一个脚本(可能是 PowerShell 或任何你能使用的工具),可以将 AD 同步到 Postfix 可访问的某个表,该表将包含所需的映射信息。这可以使用任何类型的表:文件、MySQL/MariaDB 等。
- 定期运行此脚本和/或当您知道 AD 中的数据已发生更改时运行此脚本
- 改用 smtpd_sender_logn_maps 中的该表
在提出其他问题之前,请先阅读所有链接的 Postfix 手册页两遍。我从未使用 AD 实现过这一点,我只使用基于 MySQL 的映射来实现,而且效果非常令人满意。