SPF、DKIM和DMARC是邮件身份验证体系中的三大支柱,它们分别从发件人IP授权、邮件签名验证和接收方处理策略三个层面,帮助邮件系统确认一封邮件是否真的来自声称的域名。没有这些记录,攻击者很容易伪造发件人地址,导致品牌受损、用户被骗,甚至被列入垃圾邮件黑名单。下面详细拆解三类记录的配置方法和注意事项。

SPF记录配置详解
SPF(Sender Policy Framework)基于发件人IP地址的授权机制,告诉收件方哪些IP或主机被允许使用该域名发送邮件。它的本质是一条TXT记录,放置在域名的根区域。当收件服务器收到来自该域名的一封邮件时,会查询发件人域名的SPF记录,检查发件服务器IP是否在授权列表中。如果不在,则可能拒绝或标记为垃圾邮件。
SPF记录的语法以版本号开头,后面跟着一个或多个机制(mechanism),每个机制可以带前缀加号、减号、问号或波浪号,分别表示通过、拒绝、中性或软拒绝。常用的机制包括ip4、ip6、include、a、mx和all。例如,如果公司只使用自己的Exchange服务器(IP为192.0.2.25)和一个第三方营销平台(spf.ipipp.com)发送邮件,可以配置如下记录:
v=spf1 ip4:192.0.2.25 include:spf.ipipp.com -all
这条记录表示:允许IP 192.0.2.25发送邮件,允许包含在spf.ipipp.com的SPF记录中的服务器发送邮件,其他所有来源一律拒绝(-all)。使用-all是严格模式,如果对第三方发件来源不清楚,可以先使用~all(软拒绝),观察一段时间后再改为-all。需要特别说明的是,每个域名只能有一条SPF记录,多余的记录会被收件方忽略或导致验证失败。另外,SPF记录中的DNS查询次数不能超过10次,否则会返回永久错误,因此要避免过多的include嵌套。
配置完成后,可以使用命令nslookup -type=txt yourdomain.com或dig txt yourdomain.com查看SPF记录是否正确。常见错误包括:记录值前多了空格、缺少v=spf1、或者同时存在多条SPF记录。
DKIM记录配置详解
DKIM(DomainKeys Identified Mail)通过非对称加密对邮件进行签名,保证邮件内容在传输过程中未被篡改,并且发件域名确实对该邮件负责。发送方使用私钥对邮件头和正文的一部分进行签名,然后将公钥发布在DNS的TXT记录中。接收方从DNS获取公钥,验证签名是否有效。DKIM记录必须放在一个特定的子域名下,格式为选择器._domainkey.你的域名,其中选择器是发送方自定义的标识,例如default、google或selector1。
生成密钥对通常由邮件服务提供商或自建邮件服务器完成。以常见的OpenDKIM为例,可以使用opendkim-genkey命令生成私钥和公钥。公钥内容需要以TXT记录的形式发布到DNS,私钥则保存在邮件服务器上。一条典型的DKIM记录如下:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...
记录中的v=DKIM1表示版本号,k=rsa表示密钥类型,p=后面是Base64编码的公钥。注意公钥内容可能很长,超过255字符时需要拆分成多个字符串片段,每个片段用双引号包裹,但在DNS管理后台直接粘贴整段内容一般也能自动处理。选择器的命名应当有意义,例如mail、newsletter,同一个域名可以配置多个不同选择器的DKIM记录,分别对应不同的发信系统。
DKIM配置中最常见的错误是公钥与私钥不匹配、选择器拼写错误、DNS记录中的公钥被截断或包含多余的换行符。验证时可以使用dig txt selector._domainkey.yourdomain.com查询记录,并通过专用DKIM测试工具检查签名。另外要注意,DKIM不能单独解决域名伪造问题,它必须与SPF和DMARC结合才能充分发挥作用。
DMARC记录配置详解
DMARC(Domain-based Message Authentication, Reporting and Conformance)建立在SPF和DKIM之上,告诉收件方当认证失败时应该如何处理邮件,并向域名所有者发送汇总报告。DMARC记录同样是一条TXT记录,放置在_dmarc.你的域名子域下。它解决了SPF和DKIM单独使用时的一个空白:即使验证失败,收件方也往往不知道如何处理,而DMARC给出了明确的策略。
一条基本的DMARC记录如下:
v=DMARC1; p=quarantine; rua=mailto:dmarc@ipipp.com; ruf=mailto:dmarc-forensic@ipipp.com; fo=1; aspf=r; adkim=s
其中p是核心策略,可选值为none、quarantine和reject。none表示只监控不处理,quarantine表示将失败邮件放入垃圾箱,reject表示直接拒绝。建议初次部署时先使用p=none,收集一段时间报告,确认所有合法邮件都能通过验证后再升级为quarantine或reject。rua用于接收汇总报告,ruf用于接收取证报告,fo=1表示任何认证失败都生成取证报告。aspf=r表示SPF对齐模式为宽松,adkim=s表示DKIM对齐模式为严格。对齐模式决定SPF和DKIM验证时的域名匹配程度,严格模式更安全。
DMARC配置完成后,所有支持DMARC的收件方都会定期发送XML格式的报告到rua指定的邮箱,这些报告会列出哪些IP在发送该域名邮件、认证结果如何。通过分析报告可以及时发现未授权的发件源,并逐步收紧策略。需要注意,如果rua和ruf的邮箱地址使用了第三方域名,可能需要在对应域名的SPF记录中包含报告服务提供商的IP,否则报告邮件可能被拒收。
配置后的验证与排错
完成三类记录的添加后,一定要进行完整验证。除了使用dig或nslookup查询记录外,还可以使用邮件服务商提供的在线检测工具,例如Gmail的“检查邮件认证”功能、Microsoft 365的消息追踪,或者第三方SPF/DKIM/DMARC检测网站。这些工具会模拟收件方查询记录并给出详细的认证结果。
最简单的命令行验证方式如下:
dig txt yourdomain.com dig txt default._domainkey.yourdomain.com dig txt _dmarc.yourdomain.com
如果查询结果中找不到记录,首先检查记录是否添加到了正确的DNS主机提供商,以及记录类型是否正确为TXT。常见错误包括:记录名称写成了完整域名(例如_dmarc.yourdomain.com.yourdomain.com)、在DNS管理后台选择了错误的区域、或记录了多余的引号和空格。对于SPF记录,还要检查是否存在多条SPF记录,因为多条记录会被视为验证失败。
SPF、DKIM和DMARC是一套需要协同配合的体系。SPF负责授权IP,DKIM负责内容签名,DMARC负责统一策略和报告。单独配置其中任何一项都能带来一定改善,但只有三者齐全且策略正确时,才能最大限度防止域名被伪造,同时保证正常邮件不被误判。建议每季度查看一次DMARC报告,及时调整SPF和DKIM记录,以适应发信渠道的变化。