我有一个 SMTP 服务器。DKIM 已设置并运行,SPF 也已设置。
SMTP 主机是smtp.domain.com
在 DNS 上,我有一个smtp
指向 IPv4 的 A 记录和一个smtp
指向 IPv6 的 AAAA 记录。
关于 MX 记录,我有一个带有目标的 IMAP 服务器 MX 记录mail
。我还有一个带有目标的 MX 记录smtp
SPF 和 DKIM 运行一切正常
后来有一天,我觉得带有目标的 MX 记录smtp
没有必要,所以我删除了它。但后来我的 SPF 身份验证停止工作了
MX 对于 SMTP 来说真的是必要的吗,或者我做错了什么?
smtp IN A 192.0.2.2
smtp IN AAAA 2001:DB8::2
@ IN TXT "v=spf1 a mx -all"
@ IN MX 10 mail
@ IN MX 11 smtp <--- If this record is deleted SPF auth fails
答案1
您的 SPF 记录指定了两种机制,邮件的源 IP 必须至少与其中一种匹配:
- 要么是
A
域的记录(在本例中是顶点,因为您在之后没有指定任何内容a
),和/或 - 其中一条
MX
记录必须解析为源 IP。
假设mail
和smtp
解析到不同的IP地址,删除的MX
记录意味着smtp
它不再满足该mx
机制。
答案2
SPF 没有继承,这对于您的设置来说意味着两件不同的事情。
首先,SPF 记录允许或拒绝 IP 地址和 CIDR 子网,因此除ip4
和ip6
机制(和all
)之外的所有内容实际上都是对其他 DNS 记录的引用。
该
a
机制(RFC 7208, 5.3) 不带:<domain>
and/or/<prefix-length>
指的是目标的 IP 地址(A
和AAAA
记录)。该
mx
机制(RFC 7208, 5.4) 不带:<domain>
and/or/<prefix-length>
指的是记录的 IP 地址MX
,例如MX 11 smtp.example.com.
=>A 192.0.2.2
&AAAA 2001:DB8::2
。
对于两者,example.com
都是example.com
,不是*.example.com
。这种继承也是不可能的,因为它需要无限数量的额外 DNS 查询。应尽可能避免使用ip4
/ip6
机制以外的任何机制,以最大限度地减少 DNS 负载,因此也存在 10 次查询的硬性 DNS 查找限制,超过此限制后 SPF 实现必须返回permerror
(RFC 7208,4.6.4)。
TL;DR: 将所有a
和mx
机制直接替换为相应的ip4
和ip6
例如
example.com. IN TXT "v=spf1 +ip4:192.0.2.2 +ip6:2001:DB8::2 -all"
此外,没有从example.com
到 的继承sub.example.com
。这意味着 的 SPF 记录example.com
不保护具有A
记录的子域。因此,对于每个A
记录,您都需要一个额外的 SPF 记录,否则有人可能会将其用作[email protected]
信封发件人。
如果您想使用主机名本身作为信封发件人:
smtp.example.com. IN TXT "v=spf1 +ip4:192.0.2.2 +ip6:2001:DB8::2 -all"
或者如果你不需要它:
smtp.example.com. IN TXT "v=spf1 -all"
为了更好地举例,让我们扩展您的配置,并删除不必要的MX
记录,假设smtp.example.com
专用于出站邮件。这里,A
域顶点也指向 Web 服务器:
mail IN A 192.0.2.1
mail IN AAAA 2001:DB8::1
smtp IN A 192.0.2.2
smtp IN AAAA 2001:DB8::2
www IN A 192.0.2.3
www IN AAAA 2001:DB8::3
@ IN A 192.0.2.3
@ IN AAAA 2001:DB8::3
@ IN MX 10 mail.example.com.
让我们添加 SPF 记录,其中每个主机都可以以example.com
自己的身份发送邮件:
@ IN TXT "v=spf1 +ip4:192.0.2.0/30 +ip6:2001:DB8::0/126 -all"
mail IN TXT "v=spf1 +ip4:192.0.2.1 +ip6:2001:DB8::1 -all"
smtp IN TXT "v=spf1 +ip4:192.0.2.2 +ip6:2001:DB8::2 -all"
www IN TXT "v=spf1 +ip4:192.0.2.3 +ip6:2001:DB8::3 -all"