![为什么 postfix 配置建议始终将 check_policy_service 放在 rejection_unauth_destination 之后?](https://linux22.com/image/765718/%E4%B8%BA%E4%BB%80%E4%B9%88%20postfix%20%E9%85%8D%E7%BD%AE%E5%BB%BA%E8%AE%AE%E5%A7%8B%E7%BB%88%E5%B0%86%20check_policy_service%20%E6%94%BE%E5%9C%A8%20rejection_unauth_destination%20%E4%B9%8B%E5%90%8E%EF%BC%9F.png)
Postfix 手册建议这样做:
请确保在reject_unauth_destination之后指定check_sender_access和check_policy_service,否则您的系统可能成为开放的邮件中继。
我有创建我自己的policy_service仅响应 DUNNO 或 DEFER_IF_PERMIT 的请求。仅这两个。默认操作是 DUNNO
我的 smtpd_recipient_restrictions 结束如下
..., check_policy_service { inet:127.0.0.1:19706, default_action=DUNNO },
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
我的理解是,如果我的 policy_service 以某种方式响应 ACCEPT 或类似内容,则所有后续检查(包括 rejection_unauth_destination)都将被跳过并接受邮件,从而允许我的服务器将邮件从随机源转发到随机地址。但 DUNNO 和 DEFER* 始终确保进行以下检查。
我是否对自己的想法过于自信了?
(我必须将 check_policy_service 放在 permit_sasl_authenticated 之前,因为我的 policy_service 必须扫描入站和传出邮件。我真的不记得为什么我必须将 rejection_unauth_destination 放在 permit_sasl_authenticated 之后)。
答案1
是的,这是推荐这种顺序的主要原因 - 如果只有不太常见的开放中继风险的限制类先于最终reject_unauth_destination
或reject
语句,那么对这些规则进行排序的错误就不太可能导致接受,从而跳过后面的检查,而这些检查应该会导致拒绝。
此外,咨询(相对昂贵的)外部过滤器通常只是浪费资源,因为这些邮件无论如何都会因为更明显的原因而被拒绝(例如,你通常会运行垃圾邮件过滤器后跳过那些您肯定不会转发的邮件)。
是的,在明确配置不接受的 default_action 并确保您的过滤器永远不会接受邮件后,先订购策略服务reject_unauth_destination
可能是一种安全的配置。请注意可能导致 ACCEPT 结果的其他位置,例如您用于实现策略服务的任何库的边缘情况或异常行为。
然而,根据您的策略服务的功能(它是否仅监管经过身份验证的用户?它是否仅对未经身份验证的邮件实施限制?),您可能能够通过以下方法之一继续遵守建议:
- 拆分您的限制:对未经身份验证的互联网邮件(通过端口 25 接收)和经过身份验证的 MUA 提交(通过端口 465 接收,也可能通过 587 接收)应用一组完全不同的限制
- 利用其他限制类(收件人、发件人、中继、客户端等)。例如,您的策略服务仅查看在连接请求阶段已有的信息,从中调用它可能更合适,并且
smtpd_client_restrictions
永远不会在同一个限制类中,这样它们的顺序就会产生不同的(尽管仍然不一定无害的)后果check_policy_service
reject_unauth_destination