Postfix reject_unknown_reverse_client_hostname:将默认的 unknown_client_reject_code (450) 替换为 550。为什么/什么时候我不应该这样做?

Dam*_*lli 9 smtp postfix spam

在与垃圾邮件的日常战斗中,有几次我很想从疯狂的 Internet 连接的客户端中严格执行 DNS 要求。

详细地说,我会在我的smtpd_client_restrictions部分中添加reject_unknown_reverse_client_hostname设置,如下所示:

smtpd_client_restrictions = 
            permit_sasl_authenticated
            check_client_access hash:/etc/postfix/access 
            check_policy_service inet:127.0.0.1:4466
            reject_unknown_reverse_client_hostname
            reject_unauth_pipelining 
Run Code Online (Sandbox Code Playgroud)

无论如何,我注意到当遇到这样的限制时,Postfix 的行为非常“软”,因为默认值为unknown_client_reject_code450。因此,客户端被邀请继续重试。

在调查 550 响应时,我在Postfix 官方文档中遇到了以下声明:

在此处输入图片说明

我绝对不是整个RFC 5321的专家,但作为一个足够了解RFC 821 的人,我真的不明白为什么,550 响应而不是 450 会影响我的 Postfix 实例在最大 SMTP 级别(破坏 RFC 合规性),特别是考虑到在出现临时错误的情况下,无论显式设置如何,Postfix 都会坚持使用 450。

那么,有人可以帮助我了解这种替换有什么问题吗?


PS:与此同时,我以“宽松”的限制结束:

smtpd_client_restrictions = 
            permit_sasl_authenticated
            check_client_access hash:/etc/postfix/access 
            check_policy_service inet:127.0.0.1:4466
            warn_if_reject reject_unknown_reverse_client_hostname
            reject_non_fqdn_helo_hostname
            reject_unauth_pipelining 
            reject_invalid_helo_hostname 
Run Code Online (Sandbox Code Playgroud)

Jen*_*y D 12

我将从两个实用的答案开始

  1. 第一个也是最明显的答案是,在出现临时 DNS 错误的情况下,临时退回将允许发件人的邮件服务器再次尝试,直到 DNS 错误得到修复。在这种情况下,永久退回将阻止实际的火腿邮件到达您的手中。

  2. 第二个答案是,大量垃圾邮件是通过僵尸网络箱发送的,这些僵尸网络箱没有任何形式的实际功能程序来发送邮件。他们只会喷一次他们的垃圾,并且不会尝试重新发送任何消息,无论所述消息是否出现临时或永久错误。因此,通过使用临时错误,您可以永久阻止大部分垃圾邮件,但您仍然允许火腿重试。(顺便说一下,这就是为什么灰名单仍然有效并且仍然捕获大量垃圾邮件的原因。)

除了这些,还有一个更符合理论和RFC的答案

RFC 在第 4.2.1 节中说。那:

确定回复是否适合 4yz 或 5yz 类别(见下文)的经验法则是,如果在不改变命令形式或发送者或接收者的属性(即,命令重复相同并且接收器不会提出新的实现)。

在反向查找失败的情况下,只要修复了 DNS 错误,在消息本身没有任何变化的情况下,消息就可以被接受。因此,这应该是一个暂时的错误。

在邮件不是垃圾邮件的情况下,发送邮件服务器系统管理员可能会注意到错误消息并修复 DNS 问题,以便可以传递邮件而无需用户干预和重新发送邮件。除非发送电子邮件的用户还负责邮件服务器和/或其 DNS 条目,即使他们确实直接获得了永久退回,他们也将无法对其进行任何操作 - 与例如拼写错误的情况不同地址。

当然,您始终有权以任何理由拒绝任何电子邮件。

  • @DamianoVerzulli 当映射失败并出现错误时,而不是当 DNS 配置错误以返回错误名称时,它将适用,并且随后得到修复。无论如何,我已经扩展了与 RFC 相关的问题。 (2认同)