在日常打击垃圾邮件的斗争中,有好几次我都想严格执行来自野外互联网连接的客户端的 DNS 要求。
详细地说,我会添加拒绝未知的反向客户端主机名设置在我的smtpd_客户端限制部分,例如:
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
无论如何,我注意到,当达到这种限制时,Postfix 行为非常“软”,因为默认值为unknown_client_reject_code
450。因此,邀请客户端继续重试。
在调查 550 响应时,我看到了以下声明,在 Postfix 官方文档中:
我绝对不是了解整体的专家RFC 5321,但作为一个足够年长的人,应该知道RFC 821,我真的不明白为什么 550 响应而不是 450 会在最大 SMTP 级别影响我的 Postfix 实例(破坏 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
答案1
我先从两个实际的答案开始
第一个也是最明显的答案是,如果出现临时 DNS 错误,临时退回将允许发件人的邮件服务器重试,直到 DNS 错误修复。在这种情况下,永久退回将阻止真正的正常邮件到达您。
第二个答案是,大量垃圾邮件是通过僵尸网络发送的,这些僵尸网络没有任何形式的实际功能程序来发送邮件。它们只会发送一次垃圾邮件,并且不会尝试重新发送任何邮件,无论该邮件是暂时错误还是永久错误。因此,通过使用临时错误,您可以永久阻止大部分垃圾邮件,但您仍然允许普通用户再次尝试。(顺便说一句,这就是为什么灰名单仍然有效并且仍然能捕获垃圾邮件的原因。很多垃圾邮件。
除了这些之外,还有一个与理论和 RFC 更相关的答案
RFC 在第 4.2.1 节中指出:
判断一个回复是否属于 4yz 或 5yz 类别(见下文)的经验法则是,如果回复在命令形式或发送者或接收者的属性没有任何改变的情况下重复并且能够成功,则该回复属于 4yz(即,命令以相同的方式重复,而接收者没有提出新的实现)。
如果反向查找失败,只要 DNS 错误得到修复,消息本身就有可能被接受,而无需进行任何更改。因此,这应该是暂时的错误。
如果消息是不是垃圾邮件,发送邮件服务器的系统管理员可能会注意到错误消息并修复 DNS 问题,这样就可以传递邮件,而无需用户干预和重新发送邮件。除非发送电子邮件的用户也负责邮件服务器和/或其 DNS 条目,否则即使他们直接收到永久退回的邮件,他们也无法对此采取任何措施 - 不同于地址拼写错误的情况。
当然,您仍然有权以任何理由拒绝任何电子邮件。