DNS MX 记录和 SMTP 服务器

DNS MX 记录和 SMTP 服务器

我有一个 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。

假设mailsmtp解析到不同的IP地址,删除的MX记录意味着smtp它不再满足该mx机制。

答案2

SPF 没有继承,这对于您的设置来说意味着两件不同的事情。


首先,SPF 记录允许或拒绝 IP 地址和 CIDR 子网,因此除ip4ip6机制(和all)之外的所有内容实际上都是对其他 DNS 记录的引用。

  • a机制(RFC 7208, 5.3) 不带:<domain>and/or/<prefix-length>指的是目标的 IP 地址(AAAAA记录)。

  • 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: 将所有amx机制直接替换为相应的ip4ip6例如

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"

相关内容