我有一个 SMTP 服务器。DKIM 已设置并正常工作,并且还设置了 SPF。
SMTP 主机是smtp.domain.com
在 DNS 上,我有一个smtp
指向 IPv4 的 A 记录和一个smtp
指向 IPv6 的 AAAA 记录。
关于 MX 记录,我有一个用于 IMAP 服务器的 MX 记录 target mail
。我也有一个带有目标的 MX 记录smtp
一切都与 SPF 和 DKIM 完美配合
然后有一天,我认为smtp
不需要带有目标的 MX 记录 - 所以我删除了它。但后来我的 SPF 身份验证停止工作
SMTP 真的需要 MX 还是我做错了什么?
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
您的 SPF 记录指定了两种机制,并且邮件的源 IP 必须至少匹配其中一种:
A
记录(在本例中为顶点,因为您在 之后没有指定任何内容a
)和/或MX
记录必须解析为源 IP。假设
mail
并smtp
解析到不同的 IP 地址,删除MX
记录smtp
意味着它不再满足mx
机制。SPF 没有继承,这对您的设置意味着两个不同的事情。
首先,SPF 记录允许或拒绝 IP 地址和 CIDR 子网,因此除了
ip4
和ip6
机制(和all
)之外的所有内容实际上都是对其他 DNS 记录的引用。没有and/or的
a
机制(RFC 7208, 5.3 )指的是目标的 IP 地址(和记录)。:<domain>
/<prefix-length>
A
AAAA
没有and/or的
mx
机制 ( RFC 7208, 5.4 )指的是记录的 IP 地址,例如=> & 。:<domain>
/<prefix-length>
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:直接用相应的and替换所有
a
andmx
ip4
ip6
机制,例如此外,没有从
example.com
to继承sub.example.com
。这意味着 SPF 记录example.com
不保护具有A
记录的子域。因此,对于每条A
记录,您都需要一个额外的 SPF 记录,否则有人可以[email protected]
用作信封发件人。如果您想将主机名本身用作信封发件人:
或者,如果您不需要它:
让我们扩展您的配置以获得更好的示例,并删除不必要的
MX
记录,假设smtp.example.com
专用于出站邮件。在这里,A
域顶点的 也指向 Web 服务器:让我们添加 SPF 记录,每个主机都可以在其中发送邮件
example.com
: