SPF记录语法:机制、限定符、修饰符和宏
22分钟阅读 SPF记录语法:机制、限定符、修饰符和宏 SPF记录语法遵循一种形式:一个以v=spf1开头的单一DNS TXT记录,后面是空格分隔的术语——具有可选限定符的机制,然后是修饰符——从左到右进行评估,直到找到第一个匹配。以下是一个完整的记录:v=spf1 ip4:192.0.2.0/24 include:_spf.example.com -all 这条记录授权一个/24网络和一个第三方的服务器,然后拒绝所有其他。 governing它的每条规则都在RFC 7208中,SPF标准于2014年4月发布。此页面是完整的参考:每个机制、每个限定符、两个修饰符、完整的宏表、评估顺序、DNS查找限制和记录放置规则——每个都有定义它的RFC 7208部分。如果您首先想了解协议的基本概念——为什么存在SPF以及它如何与DKIM和DMARC相结合——请从我们的SPF指南开始。如果您构建和维护记录,请将此页面加入书签。 SPF记录语法概述 SPF记录是一个字符串,位于单个TXT记录的RDATA中,其语法恰好有三种部分:版本标签、机制(每种都有一个可选的限定符)和修饰符。版本标签必须完全是v=spf1——以v=spf10开头的记录会被丢弃,而不是部分匹配(§4.5)。每个SPF记录都是相同的三种部分:版本标签、具有可选限定符的机制和修饰符。语法简述,从§3和§4.6.1: 部分 形式 角色 版本 v=spf1,总在第一,精确 选择记录(§4.5) 机制 [限定符]名称[:arg][/cidr] 测试与客户端IP;可以匹配或不匹配(§4.6.2) 限定符 + - ~ ? 在机制之前 当其机制匹配时返回结果(§4.6.2) 修饰符 名称=值,最多一次 每额外信息;从不匹配(§6) SPF记录语法三种部分 术语由空格分隔。机制名称不区分大小写,且不包含=,:或/的术语为机制(§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——其余此参考存在是为了让您阅读其他人的记录,而不是因为您自己的需要。 机制语法 匹配时… 是否计入10次查找限制? RFC § all all 总是 是 §5.1 include include:domain 引用的记录返回Pass 是 §5.2 a a[:domain][/cidr] 客户端IP是该域的A/AAAA地址之一 是 §5.3 mx mx[:domain][/cidr] 客户端IP是该域的某个MX主机的地址 是(加上每个MX地址限制) §5.4 ptr ptr[:domain] 反向DNS验证到目标域 是 §5.5 ip4 ip4:network[/cidr] 客户端IP在IPv4网络内部 否 §5.6 ip6 ip6:network[/cidr] 客户端IP在IPv6网络内部 否 §5.6 exists exists:domain 构造的域有任何A记录 是 §5.7 所有八个SPF机制的语法、匹配条件和DNS查找成本 您可以逐条解析任何已发布记录——每种机制的成本和RFC引用也附在上面——使用SPF语法检查器。 all all 始终匹配,这就是为什么它作为明确的默认值放在最后的原因(§5.1)。它之后的所有内容都是死文本:“在all之后列出的机制必须被忽略”,而在记录的任何地方出现all时,任何redirect=修饰符也会被忽略(§5.1)。没有尾部all或redirect=的记录会默默地默认为Neutral(§4.7)。 include include:domain会递归评估被引用域的SPF记录,并仅在该评估返回Pass时匹配(§5.2)。这并不是拼接。RFC本身承认这个名称是“选得不好”:在包含的记录内部的-all不会使您的外部记录失败——Fail、Softfail或Neutral内部只是意味着“这里没有匹配,继续前进”(§5.2)。更好的思维模型:如果匹配。一个值得注意的后果是:如果所引用的域根本不发布SPF记录,include将返回PermError(§5.2)。 a和mx a仅在客户端IP是目标域的A或AAAA地址之一时匹配;mx则在客户端IP是该域的某个MX主机的地址时匹配(§5.3,§5.4)。两者都在未给出参数时默认于当前域,并且都接受双CIDR后缀——a/24仅比较最高的24位,a:example.com/24//64分别设置IPv4和IPv6前缀(§5.3)。 请注意成本的不对称性:mx是计入10次查找限制的一个术语,但评估它会触发每个MX主机的一个MX查询加一个地址查询,最多限制为10个。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡