为什么 postfix 配置建议始终将 check_policy_service 放在 rejection_unauth_destination 之后?

为什么 postfix 配置建议始终将 check_policy_service 放在 rejection_unauth_destination 之后?

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_destinationreject语句,那么对这些规则进行排序的错误就不太可能导致接受,从而跳过后面的检查,而这些检查应该会导致拒绝。

此外,咨询(相对昂贵的)外部过滤器通常只是浪费资源,因为这些邮件无论如何都会因为更明显的原因而被拒绝(例如,你通常会运行垃圾邮件过滤器跳过那些您肯定不会转发的邮件)。

是的,在明确配置不接受的 default_action 并确保您的过滤器永远不会接受邮件后,先订购策略服务reject_unauth_destination可能是一种安全的配置。请注意可能导致 ACCEPT 结果的其他位置,例如您用于实现策略服务的任何库的边缘情况或异常行为。

然而,根据您的策略服务的功能(它是否仅监管经过身份验证的用户?它是否仅对未经身份验证的邮件实施限制?),您可能能够通过以下方法之一继续遵守建议:

  • 拆分您的限制:对未经身份验证的互联网邮件(通过端口 25 接收)和经过身份验证的 MUA 提交(通过端口 465 接收,也可能通过 587 接收)应用一组完全不同的限制
  • 利用其他限制类(收件人、发件人、中继、客户端等)。例如,您的策略服务仅查看在连接请求阶段已有的信息,从中调用它可能更合适,并且smtpd_client_restrictions永远不会在同一个限制类中,这样它们的顺序就会产生不同的(尽管仍然不一定无害的)后果check_policy_servicereject_unauth_destination

相关内容