我有一个 Web 服务器,它通过 Postfix 3.3.0 发送 Web 表单类型的电子邮件。无入站。无额外内容。
接收邮件服务器运行的是相同的 Postfix(但使用 amavis-new/spamassassin + dovecot/etc)。它们都位于同一个域中,但子域不同(“www.”和“mail.”)。
当测试电子邮件从 Web 服务器发送到邮件服务器(使用 postfix sendmail 命令)时,除了 HELO/EHLO 上的评分外,一切都很完美。我一直收到FORGED_SPF_HELO
。我以前从未遇到过这种情况,而且几乎没有文档可以找到。不过,这似乎是不言而喻的,它没有通过 HELO 上的 SPF 查找。
原始 DNS 只是将“www.”作为 CNAME 添加到顶点 A 记录。
顶点 SPF 包括“a”记录:"v=spf1 a mx ~all"
日志中的 HELO 内容如下:
helo=www.example.net, Tests:[ALL_TRUSTED=-1,FORGED_SPF_HELO=1,MISSING_HEADERS=1.207,MISSING_SUBJECT=1.767]
我调整了“www.”记录,使其成为 A 记录,并为其单独添加了 SPF TXT 记录。
现在我得到:helo=www.example.net, Tests: [ALL_TRUSTED=-1,FORGED_SPF_HELO=1,MISSING_HEADERS=1.207,MISSING_SUBJECT=1.767,SPF_HELO_PASS=-0.001]
伪造并通过?
主要问题:
有人能解释为什么 SPF 中首先a
不允许 CNAME“www.”通过吗?其次,有人能解释一下如何同时出现“伪造”和“通过”吗?
答案1
该规则FORGED_SPF_HELO
来自 Spamassassin 更新。通过 grep 您的配置文件夹(/var/lib/spamassassin
至少在 Debianoids 上),您将看到以下定义:
meta FORGED_SPF_HELO __HELO_NOT_RDNS && SPF_HELO_PASS && !SPF_PASS
header __HELO_NOT_RDNS X-Spam-Relays-External =~ /^[^\]]+ rdns=(\S+) helo=(?!\1)\S/
header SPF_PASS eval:check_for_spf_pass()
header SPF_HELO_PASS eval:check_for_spf_helo_pass()
您不符合规则__HELO_NOT_RDNS
(主机的反向 DNS 查找www.example.net
不是www.example.net
)并且您没有SPF_PASS
(主机无权代表您的域发送电子邮件)。
由于您肯定不想将其添加www.example.net
到官方邮件服务器的列表中,请将其配置为使用以下形式的发件人发送电子邮件[email protected]
。