你的企业邮箱域名,正在被攻击者免费使用。这不是危言耸听,只要你的域名没有配置或者配错了SPF和DKIM记录,任何人都可以伪造以你公司域名为发件人的邮件。收件人看到的发件人就是你的真实域名,邮件内容、附件、链接看起来都来自你,财务可能因此向伪造的账户汇款,客户可能点击钓鱼链接导致数据泄露。问题的根源不在邮件内容本身,而在于你的域名没有告诉全世界:谁才有资格用我的名义发信。
SPF:给域名配一张“授权发件人名单”SPF全称Sender Policy Framework,本质上是一条TXT类型的DNS记录,挂在你的域名下。它的作用很简单:向收件服务器声明,哪些IP地址或服务器有权使用你这个域名发送邮件。当收件方收到一封声称来自你域名的邮件时,它会查询你域名的SPF记录,核对发件服务器的IP是否在名单里。如果在,验证通过;如果不在,就根据你设定的策略处理——通常是标记为垃圾邮件或直接拒收。
SPF记录的核心语法并不复杂,但细节决定成败。一条标准的SPF记录长这样:
v=spf1 ip4:192.0.2.0/24 include:spf.protection.example.com -all
逐个拆解:v=spf1是版本标识,必须写在最前面。ip4:192.0.2.0/24表示授权这个IPv4网段内的所有地址发信。include:spf.protection.example.com表示引入另一个域名的SPF记录,这在你使用第三方邮件服务商时非常关键,比如你用了阿里云邮箱、腾讯企业邮、网易企业邮,就需要把服务商提供的SPF域名include进来。最后-all是策略声明,意思是“除了上面列出的来源,其他一律拒绝”。
策略部分有三种写法,很多人在这里栽跟头。~all代表软拒绝,遇到未授权的发件服务器,收件方通常会把邮件标记为可疑但不直接丢弃。-all代表硬拒绝,明确告知收件方这封邮件就是伪造的,直接拒收。+all则是一个危险的配置,表示允许任何服务器用你的域名发信,等于门户大开,绝对不能用。还有一个问号开头的?all,表示中性策略,不表态,实际上起不到任何保护作用。对于生产环境,建议使用-all,态度明确,保护效果最好。
配置SPF时最容易踩的坑有四个。第一,SPF记录只能有一条,如果你添加了多条TXT记录,收件方可能随机选取一条,导致验证混乱。正确做法是把所有授权来源合并到一条记录里。第二,include嵌套层级不能超过10层,这是DNS查询的硬限制,超出后验证会失败。第三,SPF记录有255字符的长度限制,如果你的授权来源太多,需要拆分成多条记录并通过include串联,但要注意嵌套层级。第四,别忘了把公司内部所有会发信的出口IP都加进去,包括本地邮件服务器、CRM系统、营销邮件平台、工单系统、监控告警服务等。漏掉任何一个,那部分发出的正常邮件就可能被拒收。
SPF还有一个先天局限需要认清:它只验证信封发件人,也就是SMTP会话中MAIL FROM命令里的域名,而不是用户邮件客户端里看到的From地址。攻击者可以伪造邮件头部的From字段,让收件人看到你的域名,同时使用一个不同的信封发件人域名来通过SPF验证。这就是为什么单靠SPF不够,必须配合DKIM和DMARC。
DKIM:给每一封邮件盖上数字公章DKIM全称DomainKeys Identified Mail,它的工作方式与SPF完全不同。SPF是验证发件服务器的身份,DKIM则是验证邮件内容本身的完整性和来源真实性。简单理解,DKIM就是在邮件发送时,用你域名对应的私钥对邮件内容进行数字签名,然后把签名结果放在邮件头里。收件方收到后,从你的域名DNS记录里获取公钥,用公钥验证签名是否匹配。如果签名有效,说明这封邮件确实来自拥有私钥的发送方,而且内容在传输过程中没有被篡改过。
DKIM的配置比SPF多一步,需要在邮件服务器上生成密钥对,然后把公钥发布到DNS。具体流程是这样的:首先在你的邮件服务器或邮件服务商后台生成DKIM密钥对,系统会给你一个选择器名称,通常是类似“default”或“202501”这样的字符串,以及一段公钥内容。然后你需要在域名下添加一条TXT记录,主机名格式为“选择器._domainkey.你的域名”,记录值就是公钥内容。举个例子,如果你的域名是example.com,选择器是default,那么DNS记录的主机名就是default._domainkey.example.com,记录值类似:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...
这里面的v=DKIM1是版本标识,k=rsa表示密钥算法,p=后面跟着的就是公钥内容。配置完成后,你的邮件服务器发出的每一封邮件都会在邮件头里附带一个DKIM-Signature字段,里面包含了签名信息、选择器名称、签名算法、签名域列表等。收件方根据选择器和域名找到公钥,完成验证。
DKIM配置中有几个关键细节需要特别注意。密钥长度方面,建议使用2048位RSA密钥。1024位密钥虽然兼容性更好,但已经被证明可以被暴力破解,安全性不足。部分老旧邮件系统可能不支持2048位,但当前主流邮件服务商都已兼容,安全优先的原则下应该选择2048位。签名域列表决定了DKIM签名覆盖哪些邮件头字段,至少应该包含From、To、Subject、Date这些核心字段。如果签名时包含了From字段,那么攻击者篡改From地址的行为就会被DKIM检测到,这正好弥补了SPF不验证From字段的缺陷。
密钥轮换是很多人忽略的安全实践。DKIM私钥一旦泄露,攻击者就可以伪造签名。建议每季度或每半年轮换一次密钥,具体做法是生成新的密钥对,在DNS上同时发布新旧两条记录,用不同的选择器区分,等旧密钥的邮件全部投递完毕后,再删除旧记录。邮件服务商通常提供了密钥轮换的便捷操作,不要等到出事才想起换锁。
还有一个容易被忽视的点是DKIM的签名粒度。你可以选择只签名邮件正文,也可以签名邮件头和正文。建议选择签名邮件头和正文,这样邮件头部的任何篡改都会导致验证失败。另外,如果邮件经过转发,中间服务器可能会修改邮件头或添加额外内容,这可能导致DKIM签名失效。这不是DKIM的问题,而是邮件转发机制本身的特点,需要通过ARC等扩展协议来解决,但这属于进阶话题,对大多数企业来说,先确保DKIM正确配置就已经解决了90%的伪造问题。
SPF加DKIM还不够,DMARC是最终裁决者SPF和DKIM各自独立工作,但收件方需要一个统一的判断标准:当SPF和DKIM的结果不一致时,到底听谁的?DMARC就是来解决这个问题的。它做三件事:第一,定义SPF和DKIM的验证结果如何对齐,也就是要求SPF验证的域名和DKIM签名的域名必须与邮件头部的From域名一致。第二,告诉收件方,当验证失败时应该怎么处理这封邮件。第三,让收件方定期向你发送报告,告诉你谁在用你的域名发信,验证通过率如何,有没有人在尝试伪造。
DMARC同样是一条DNS的TXT记录,主机名固定为_dmarc.你的域名。一条典型的DMARC记录如下:
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; ruf=mailto:forensic@example.com; pct=100; aspf=r; adkim=r;
逐项解释:v=DMARC1是版本标识。p=reject是核心策略,表示验证失败的邮件直接拒收。策略有三种取值:none表示仅监控不处理,quarantine表示隔离到垃圾邮件箱,reject表示直接拒绝。建议的部署路径是先从none开始,观察一段时间确认正常邮件不受影响,再逐步升级到quarantine,最终达到reject。rua是聚合报告接收地址,收件方会每天发送一份XML格式的汇总报告,告诉你验证通过和失败的数量统计。ruf是取证报告接收地址,会包含失败邮件的详细信息,但出于隐私考虑,很多邮件服务商不发送取证报告。pct是策略应用比例,设为100表示对100%的邮件应用策略。aspf和adkim分别定义SPF和DKIM的对齐模式,r表示宽松模式,s表示严格模式。宽松模式下,只要SPF验证的域名是From域名的子域名就算对齐;严格模式下,必须完全一致才算对齐。建议初期使用宽松模式,稳定后切换到严格模式。
DMARC报告是安全运营的宝贵数据源。每天收到的聚合报告是XML格式,人工阅读不现实,需要借助解析工具。市面上有免费和付费的DMARC报告分析服务,可以把XML转换成可视化的图表,让你一目了然地看到哪些IP在用你的域名发信、通过率是多少、哪些来源是未授权的。这些数据不仅能发现伪造攻击,还能帮你梳理公司到底有多少个系统在发送邮件,很多企业直到看DMARC报告才发现市场部悄悄用了某个第三方邮件群发平台,而IT部门完全不知情。
完整部署后的验证与监控三条记录配置完毕不代表万事大吉,必须进行验证。验证方法很简单:使用你的域名向一个外部邮箱发送测试邮件,比如Gmail、Outlook、QQ邮箱等,然后查看邮件原文,检查SPF、DKIM、DMARC的验证结果。Gmail里点击“显示原始邮件”,会看到PASS或FAIL的标识。如果三项都显示PASS,说明配置正确。如果某项显示FAIL,就要根据错误信息排查。
常见的排查方向:SPF失败通常是因为漏掉了某个发信来源,检查是否所有发信IP和第三方服务商的include都已添加,注意SPF记录的255字符限制和10层嵌套限制。DKIM失败可能是DNS记录中的公钥格式有误,复制公钥时注意不要引入多余的空格或换行,选择器名称必须与邮件服务器配置完全一致。DMARC失败往往是因为SPF和DKIM的对齐条件不满足,检查From域名、SPF验证域名、DKIM签名域名三者是否一致。
配置完成后,持续监控同样重要。定期查看DMARC报告,关注验证通过率的变化趋势。如果通过率突然下降,可能是某个发信系统的配置发生了变化,或者有新的伪造攻击出现。同时,公司内部任何新增的邮件发送需求,都应该走审批流程,确保新系统上线前就把SPF和DKIM配置到位,而不是等正常邮件被拒收了才紧急处理。
SPF、DKIM、DMARC这三项配置,投入的时间成本最多半小时,但带来的防护效果是持续的、自动的、零运维的。你的域名是你企业数字身份的核心资产,保护好它不被冒用,是邮件安全的第一道防线,也是最有效的一道防线。现在就登录你的DNS管理后台,检查这三条记录是否存在、配置是否正确。如果你的域名还没有这些记录,你就是在为攻击者敞开大门。
