开发者生态
morning
SPF 记录语法:机制、限定符、修饰符和宏
2026-08-04
1 阅读
约7分钟阅读
meysamazad
字号:
SPF 记录语法:机制、限定符、修饰符和宏 SPF 记录语法遵循一种形状:以 v=spf1 开头的单个 DNS TXT 记录,后跟空格分隔的术语(带有可选限定符的机制,然后是修饰符)从左到右计算,直到第一个匹配项。这是完整的记录: v=spf1 ip4:192.0.2.0/24 include:_spf.example.com -all 这一行授权 /24 网络和第三方服务器,然后其他所有操作都失败。管理它的每条规则都存在于 RFC 7208(2014 年 4 月发布的 SPF 标准)中。此页面是完整的参考:每个机制、每个限定符、两个修饰符、完整的宏表、评估顺序、DNS 查找限制和记录放置规则 - 每个规则都有定义它的 RFC 7208 部分。如果您首先需要了解协议基础知识——为什么 SPF 存在以及它如何与 DKIM 和 DMARC 配合——请从我们的 SPF 指南开始。如果您建立并维护记录,请将其添加为书签。 SPF 记录语法概览 SPF 记录是单个 TXT 记录的 RDATA 中的一串文本,其语法恰好由三部分组成:版本标记、机制(每个部分都有一个可选限定符)和修饰符。版本标记必须恰好是 v=spf1 — 以 v=spf10 开头的记录将被丢弃,而不是部分匹配(第 4.5 节)。每个 SPF 记录都由相同的三部分组成:版本标记、带有可选限定符的机制和修饰符。语法简述,来自§3和§4.6.1: SPF记录语法中的三种部分Terms之间用空格分隔。机制名称不区分大小写,不包含 = 、 : 或 / 的术语是机制(第 4.6.1 节)。任何地方的一个语法错误都会使整个记录无效:check_host()——接收者的评估例程,正如 RFC 所命名的——首先验证 SPF 语法,如果有任何格式错误,则立即返回 PermError,而不评估单个术语(第 4.6 节)。这就是为什么一个杂散字符可能会导致域发送的每条消息的身份验证失败。 SPF 机制 存在八种机制,每种机制要么与连接 IP 匹配,要么不匹配。 RFC 7208 §5 将它们分为基本框架机制( all 、 include )和指定发送者机制( a 、 mx 、 ptr 、 ip4 、 ip6 、 Exists )。在完整表格之前:大多数现实世界记录仅使用 include 、 ip4 、 ip6 和 all — 此引用的其余部分存在,以便您可以阅读其他人的记录,而不是因为您自己需要它们。具有语法、匹配条件和 DNS 查找成本的所有八种 SPF 机制 您可以使用 SPF 语法检查器逐项解析任何已发布的记录(附有每种机制的成本和 RFC 引用)。 all all 总是匹配,这就是为什么它属于最后作为显式默认值(第 5.1 节)。它后面的所有内容都是死文本:“必须忽略所有列出的机制”,并且只要所有内容出现在记录中的任何位置(§5.1),任何重定向=修饰符都会被忽略。没有尾随 all 或 redirect= 的记录默认为中性(第 4.7 节)。 include include:domain 递归地评估引用域的 SPF 记录,并且仅当评估返回 Pass 时才匹配(第 5.2 节)。它不是拼接。 RFC 本身承认该名称“选择不当”:包含的记录内的 a -all 不会使您的外部记录失败 - 内部的 Fail、Softfail 或 Neutral 只是意味着“此处不匹配,继续”(第 5.2 节)。更好的思维模型: if-match 。一个值得注意的结果是:如果包含的域根本没有发布 SPF 记录,则包含会返回 PermError(第 5.2 节)。当客户端 IP 是目标域的 A 或 AAAA 地址之一时,a 和 mx a 匹配;当 mx 是域的 MX 主机之一的地址时,它匹配(第 5.3 节、第 5.4 节)。当没有给出参数时,两者都默认为当前域,并且都接受双 CIDR 后缀 - a/24 仅比较前 24 位,a:example.com/24//64 分别设置 IPv4 和 IPv6 前缀(第 5.3 节)。请注意成本不对称性:mx 是针对 10 次查找限制的一项,但评估它会触发一个 MX 查询以及每个 MX 主机的地址查询,在 PermError 之前上限为 10 个地址记录(第 4.6.4 节)。 ip4 和 ip6 ip4: 和 ip6: 使用冒号测试客户端 IP 是否属于文字网络 - ip4:192.0.2.0/24 ,而不是 ip4= (§5.6)。省略的 CIDR 长度默认为 /32 和 /128 ,即精确地址匹配,并且不允许像 192.0.2 这样的截断地址(第 5.6 节)。这些是唯一 DNS 成本为零的指定发送者机制,这使得它们成为所有记录中最便宜的条款。存在exists:domain构造一个域名,查询它的A记录,并匹配是否有任何A记录返回——无论其值如何,并且即使在IPv6连接上也始终是A查询(第5.7节)。一次查找,任意逻辑。与宏 (§7) 相结合,它支持动态授权:在您控制的区域中发布每个 IP 主机名,记录会准确授权这些 IP,而无需列出它们。这是 Salesforce 当前记录背后的模式,如下面的示例所示。 ptr(不要使用)RFC 7208 自己的 §5.5 标题实际上是
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱