Postfix > 2.10 按什么顺序评估以下指令?
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_relay_restrictions
smtpd_recipient_restrictions
我阅读了Postfix SMTP 中继和访问控制(ACCESS README)和Postfix 配置参数以及 中的注释main.cf
,但恕我直言,这些建议并不绝对清晰,甚至是矛盾的。
mydestination
注意:当我谈到“本地地址”时,我指的是 Postfix 是最终目的地的任何收件人地址,即其域部分在、virtual_alias_domains
或中列出的地址virtual_mailbox_domains
。其他都是非本地地址,Postfix 必须将邮件转发到另一个 MTA。
问题 1:是否始终按指定顺序针对任何类型的客户端(MUA 和其他 SMTP 服务器)和任何目标地址评估前两个指令?我想是这样。
问题 2: a) 始终评估还是smtpd_relay_restrictions
b) 仅针对非本地邮件域评估?
问题 3: a smtpd_recipient_restrictions
) 始终评估还是 b) 仅评估本地地址?
文档中的一些引用
的文档smtpd_recipient_restrictions
说明了 Postfix SMTP 服务器在 smtpd_relay_restrictions 之后在客户端 RCPT TO 命令上下文中应用的可选限制。这表明smtpd_relay_restrictions
始终要对其进行评估,包括。本地地址。但该指令的名称暗示它仅考虑转发/中继的非本地地址。
smtpd_recipient_restrictions
从 Postfix 2.10开始,文档说明,中继权限规则最好使用 来实现smtpd_relay_restrictions
,这样,允许的垃圾邮件阻止策略smtpd_recipient_restrictions
将不再导致允许的邮件中继策略。这表明,smtpd_recipient_restrictions
仅考虑本地地址,但跳过非本地地址。
smtpd_relay_resrictions
但是,默认值中有一条注释main.cf
,指出最后没有放置默认操作(允许或拒绝),因为对于外部邮件服务器,此列表与 合并smtpd_recipient_restrictions
,因此早期的reject
操作会过早中止。这表明smtpd_recipient_restrictions
始终会对其进行评估。
这些名称大多对应于 SMTP 会话阶段。主要参考文档是SMTPD ACCESS README。
首先是客户端连接,因此
smtpd_client_restrictions
进行评估。在此阶段,可用的是远程 IP 地址、其 DNS 反向和反向转发。然后它发出 HELO 或 EHLO,因此
smtpd_helo_restrictions
接下来进行评估。所提出的名称也可在此舞台上使用。接下来是
MAIL FROM
,smtpd_sender_restrictions
接下来是附加信息 — 信封发件人。接下来是
RCPT TO
使信封收件人可用。但这里有一个技巧:服务器现在决定如何转发邮件;所以smtpd_relay_restrictions
在这里评估。smtpd_recipient_restrictions
接下来进行评估。这在 中进行了解释man 5 postconf
。接下来是
smtpd_data_restrictions
和smtpd_end_of_data_restrictions
,很少使用。对于每封邮件,所有这些限制始终按此顺序进行评估,直到做出决定。这并不取决于该服务器是否是最终目的地。当做出明确的决定(允许、拒绝、推迟)时,它会停止评估,因此,例如,如果客户在 HELO 阶段被拒绝(由 中的某些内容),则不会进行评估。然而,如果,连接仍将进入 RCPT TO 阶段,但由于已经做出决定,因此不会评估限制列表;Postfix 简单地快速跳过所有内容并推迟拒绝客户端的喜悦,因为它还提供了信封发件人和收件人,因此它也记录了该信息。
smtpd_helo_restrictions
smtpd_recipient_restrictions
smtpd_delay_reject = yes
此外,每个阶段都需要米尔特。Milters在相应的限制列表之后被调用。
为了完整性:ETRN 控制路径完全不同。首先,
smtpd_client_restrictions
和smtpd_helo_restrictions
被评估,如果ETRN
使用命令(而不是MAIL FROM
这里通常使用的命令),连接将转移到该路径,仅检查smtpd_etrn_restrictions
.