Postfix 的各类 restriction 列表(如 smtpd_*_restrictions)按什么顺序求值?

1 Postfix 的各类 restriction 列表(如 smtpd_*_restrictions)按什么顺序求值?
列表清单

Postfix 的 SMTP 服务端按会话阶段组织限制列表:smtpd_client_restrictions、smtpd_helo_restrictions、smtpd_sender_restrictions、smtpd_recipient_restrictions、smtpd_data_restrictions、smtpd_end_of_data_restrictions。

求值顺序

这些列表按 SMTP 会话阶段依次触发——client(连入)→ helo/ehlo → sender(MAIL FROM)→ recipient(RCPT TO,此处通常做大部分拒绝)→ data → end-of-data。每个列表内的规则按书写顺序求值,命中 OK/REJECT/DEFER 等终止动作即停止;若列表内没有终止结果,则继续到下一阶段。

配置建议

Postfix 默认把很多检查放在 smtpd_recipient_restrictions,但从 2.x 起推荐把通用拒绝(如拒绝未知客户端、黑名单)分散到对应阶段列表并显式列出。授权类规则(permit_mynetworks / permit_sasl_authenticated)应放在拒绝规则之前。可用 warn_if_reject 先看日志、不真正拒绝以便调参。

参考:Postfix 官方文档 SMTPD_ACCESS_README(smtpd_*_restrictions 求值顺序)