在针对垃圾邮件的每日战斗中,有几次我曾试图强制执行来自连接互联网的客户端的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
无论如何,我注意到当遇到这样的限制时,postfix行为相当“软”,因为unknown_client_reject_code的默认值是450.因此,客户端被邀请继续重试。
在调查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
第一个也是最明显的答案是,在出现临时DNS错误的情况下,临时反弹将允许发件人的邮件服务器再次尝试,直到DNS错误得到解决。 在这种情况下,永久性反弹将阻止实际的邮件邮件到达您。
第二个答案是,大量的垃圾邮件是通过僵尸networking发送的,没有任何forms的实际function程序来发送邮件。 他们将只喷一次垃圾,不会重新发送任何消息,无论这个消息是否有暂时的或永久的错误。 所以通过使用一个临时的错误,你可以阻止很大一部分垃圾邮件,但是你仍然可以让火腿再次尝试。 (顺便说一句,这就是为什么灰名单仍然有效,仍然捕获大量的垃圾邮件。)
RFC在4.2.1节中说过。 那:
确定答复是否适合4yz或5yz类别(见下文)的经验法则是,如果重复而不改变命令forms或发送者或接收者的属性(即,命令重复一致,接收器不提供新的实现)。
在反向查找失败的情况下,只要DNS错误是固定的,就可以在消息本身没有任何改变的情况下接受消息。 所以这应该是一个暂时的错误。
在邮件不是垃圾邮件的情况下,发送邮件服务器sysadmin可能会注意到错误信息,并解决DNS问题,以便邮件可以在用户不必介入和重新发送邮件的情况下发送。 除非发送电子邮件的用户也负责邮件服务器和/或其DNS项目,即使他们直接得到永久性反弹,他们也不能对此做任何事情 – 不像例如拼写错误的情况地址。
当然,你总是有权拒绝任何电子邮件。