我得到了一个有效的 postfix/dovecot 配置,并运行以下收件人拒绝规则:
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject
这会按预期工作(授权经过身份验证的用户或来自 mynetworks 的用户,拒绝其他用户)。但是,如果来自 mynetworks 的用户身份验证失败,则不会拒绝他。
有没有这样的规则拒绝无效的 sasl_auth? 仅当用户输入了无效的身份验证时才会拒绝用户,但允许未输入身份验证的用户访问。
否则,除了限制规则之外还有其他方法来实现这种行为(SASL 选项、自定义策略)吗?
答案1
由于您只明确允许 SASL 身份验证的用户,如果用户未经身份验证,则检查下一个限制 - 即恰好匹配的 mynetworks。
因此,完全由于您的规则排序,未经身份验证的客户端被允许来自您信任的网络。
相反,请考虑像这样设置:
smtpd_client_restrictions = permit_sasl_authenticated, reject
smtpd_recipient_restrictions = permit_mynetworks, reject
请注意,当您将其应用到外部端口 25 smtpd 侦听器时,这将导致您永远无法收到互联网邮件。
答案2
我认为这个想法可能是运行您的 MTA,在端口 25 上接收来自其他对等点(其他邮件服务器)的邮件。您在端口 587 上运行另一个 smtpd 进程来接收来自经过身份验证的用户的邮件。
这样你就可以制定如下标准规则:
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
在你的 main.cf 中
另一方面,您可以在 master.cf 中按以下方式配置端口 587:
submission inet n - - - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
更新
回复评论。这有两个作用。
首先,如果它在端口 25 上接收连接,它将只接受来自 mynetworks 的连接,它永远不会接受除了可以本地传送的邮件之外的邮件。
其次,如果它在端口 587 上接收连接,它将只接受来自经过身份验证的客户端的邮件。