有没有办法根据发件人所在的 Active Directory 组来限制发件人在 Postfix 中的访问?

有没有办法根据发件人所在的 Active Directory 组来限制发件人在 Postfix 中的访问?

我有一个 Postfix 服务器设置,它使用 dovecot 针对 AD 进行身份验证。

是否有一个选项可以配置它,以便 A 组中的一个用户可以以@a.local 域的身份发送邮件,而 B 组的用户则可以以@b.local 域的身份发送邮件?

答案1

Postfix 有smtpd_sender_login_mapsreject_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 的映射来实现,而且效果非常令人满意。

相关内容