DNS与SPF详解
一、DNS基础
1. DNS
DNS(Domain Name System,域名系统)是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不需要记住能够被机器直接读取的IP数串。
2. DNS记录类型
记录类型 | 作用 |
A记录 | 将域名指向一个IPv4地址,用于指定主机名(或域名)对应的IP地址记录。 |
AAAA记录 | 将域名指向一个IPv6地址,功能与A记录类似,但用于IPv6地址的解析。 |
CNAME记录 | 别名记录,允许将多个名字映射到同一台计算机,通常用于同时提供www和非www的服务。 |
MX记录 | 邮件交换记录,用于指定域名的邮件服务器地址,优先级数字越小表示优先级越高。 |
NS记录 | 名称服务器记录,指明该域名由哪些DNS服务器负责解析,用于构建域名的授权链。 |
TXT记录 | 文本记录,可用来存储任意文本信息,常用于SPF、DKIM等邮件验证机制以及域名相关的说明信息等。 |
二、SPF详解
1. SPF概念
SPF(Sender Policy Framework,发件人策略框架)是一种电子邮件验证机制,主要用于防止发件人地址被伪造,减少垃圾邮件,它通过在DNS中添加TXT记录,声明哪些IP地址或主机被授权代表该域名发送电子邮件。
2. SPF工作原理
邮件接收:当邮件服务器收到一封邮件时,会查看SMTP命令中的MAIL FROM的发件人地址。
DNS查询:邮件服务器随后在DNS中查询该发件人地址所在域名的SPF记录。
规则匹配:SPF记录以特定的语法列出了一组规则,定义了哪些IP地址或网络范围(以及其他可能的机制如MX记录等)是被授权发送带有该域名发件人地址的邮件的。
结果处理:如果实际发送邮件的IP地址与SPF记录中允许的地址匹配,则邮件被认为是经过验证的;否则,邮件可能会被拒绝、退回,或者根据邮件服务器的配置进行其他处理(比如标记为垃圾邮件)。
3. SPF记录格式与语法
格式:[FQDN] IN TXT [发信方SPF规则],example.com. IN TXT "v=spf1 ip4:192.0.2.0/24 include:_spf.example.com all"。
语法元素
v=spf1:表示这是版本1的SPF记录。
ip4/ip6:指定IPv4或IPv6地址或地址段,如ip4:192.0.2.0/24表示允许该IP段内的地址发送邮件。
a/mx:a表示允许相应域名的A记录(或AAAA记录)中包含的IP地址;mx表示任何该域名的MX记录指向的服务器都可以发送邮件。
include:引入另一个域名下的SPF记录,例如include:_spf.google.com表示包含Google Workspace的SPF记录。
all:总是匹配,用来作为一个缺省的结果,如 all表示如果前面的机制没有匹配,则测试失败;~all表示软失败;+all表示允许所有(不推荐)。
4. SPF限制
大小写:SPF记录不能包含大写字母。
记录数量:每个域名不能关联多条SPF记录。
结尾要求:记录必须以all部分结束,或包含一个redirect:部分(表示该SPF记录由另一个域名托管)。
5. SPF示例及解读
SPF记录 | 解读 |
v=spf1 ip4:192.0.2.0/24 all | 只允许在192.0.2.0 192.0.2.255范围内的IP地址发送该域名的邮件,其他地址发送的邮件将被拒绝。 |
v=spf1 mx ~all | 允许当前域名的MX记录对应的IP地址发送邮件,未匹配的情况标记为软失败(仍会被接受,但可能被标记为垃圾邮件)。 |
v=spf1 include:_spf.google.com all | 采用和Google Workspace完全一样的SPF记录,不允许其他IP地址发送邮件并应被拒绝。 |
6. SPF测试工具
可以使用一些在线工具来测试SPF记录,如[https://mxtoolbox.com/SuperTool.aspx?action=spf](https://mxtoolbox.com/SuperTool.aspx?action=spf)。
三、相关问题与解答
1. 问题:SPF记录中的“include”机制有什么作用?使用时需要注意什么?
解答:“include”机制用于引入其他域名的SPF记录,这样可以避免重复编写相同的规则,同时也方便管理,如果一个公司使用了第三方的邮件服务(如Google Workspace),就可以通过“include:_spf.google.com”来包含Google的SPF记录,从而允许Google的服务器发送该公司的邮件,使用时需要注意,被包含的域名必须有有效的SPF记录,并且要确保不会形成循环引用(即A域名包含B域名的SPF记录,而B域名又包含A域名的SPF记录等情况)。
2. 问题:为什么SPF记录要以“all”如果没有“all”会怎样?
解答:“all”在SPF记录中是一个默认的匹配项,用于处理前面机制没有匹配到的情况,如果没有“all”,当前面的机制都没有匹配到发送邮件的IP地址时,SPF验证就无法得出明确的结果,可能会导致邮件服务器无法正确处理邮件,或者出现不一致的验证结果,以“all”结尾可以确保无论前面的机制是否匹配,都有一个明确的处理方式,如“all”表示拒绝未匹配的邮件,“~all”表示标记为软失败等。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/195069.html