什么是DMARC?
DMARC(基于域的消息身份验证、报告与一致性)是基于SPF和DKIM的电子邮件身份验证协议。它允许域所有者发布指定接收服务器应如何处理未通过身份验证的消息的政策,并提供机制来监控电子邮件身份验证。
为什么DMARC至关重要
SPF和DKIM单独有关键间隙:它们不告诉接收器如何处理失败的消息。攻击者可以发送没有SPF/DKIM的欺骗电子邮件,接收器没有指导。
DMARC通过以下方式解决这个问题:
- 定义政策:拒绝、隔离或允许失败的消息
- 要求对齐:From头必须匹配SPF/DKIM域
- 启用报告:聚合和法证报告显示身份验证结果
DMARC的工作原理
1. 发件人发布 DNS中的DMARC政策(TXT记录在_dmarc.domain.com)
2. 电子邮件被发送带有From: user@domain.com
3. 接收器检查 SPF和DKIM
4. 接收器检查对齐:From头中的身份验证域是否匹配?
5. 政策应用:基于DMARC记录(无、隔离、拒绝)
6. 发送报告:聚合报告到指定地址
DMARC对齐
DMARC要求"对齐"——From头中的域必须匹配以下任何一个:
- SPF对齐:信封发件人(MAIL FROM)域
- DKIM对齐:DKIM签名中的d=域
没有对齐,SPF/DKIM通过但DMARC失败。
DMARC记录格式
DMARC记录是_dmarc.yourdomain.com处的TXT记录:
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
DMARC标签
| 标签 | 必需 | 描述 | 示例 |
|---|---|---|---|
| v | 是 | 版本 | v=DMARC1 |
| p | 是 | 政策 | p=none/quarantine/reject |
| rua | 否 | 聚合报告URI | rua=mailto:reports@example.com |
| ruf | 否 | 法证报告URI | ruf=mailto:forensic@example.com |
| pct | 否 | 政策百分比 | pct=100 |
| sp | 否 | 子域政策 | sp=reject |
| adkim | 否 | DKIM对齐模式 | adkim=s(严格)或adkim=r(宽松) |
| aspf | 否 | SPF对齐模式 | aspf=s或aspf=r |
DMARC政策
p=none:仅监控——对失败的消息不采取任何行动v=DMARC1; p=none; rua=mailto:dmarc@example.com
p=quarantine:将失败的消息发送到垃圾/垃圾
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
p=reject:完全拒绝失败的消息
v=DMARC1; p=reject; rua=mailto:dmarc@example.com
DMARC实施路径
阶段1:监控(p=none)
开始监控以理解你的电子邮件生态:
v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com
在2-4周内分析报告以识别:
- 缺少SPF/DKIM的合法发送服务
- 未授权发件人(欺骗)
- 对齐问题
阶段2:隔离(p=quarantine)
一旦合法来源得到身份验证:
v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc-reports@example.com
使用pct=10最初仅隔离10%,逐步增加。
阶段3:拒绝(p=reject)
完全保护:
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com
DMARC报告
聚合报告(rua)
日常XML报告显示跨所有电子邮件的身份验证结果:
- 电子邮件量
- SPF、DKIM、DMARC的通过/失败率
- 发送IP地址
- 收件人组织
法证报告(ruf)
单个失败报告(由于隐私,并非所有接收器发送):
- 完整邮件头
- 身份验证失败详情
报告处理
原始DMARC报告是XML格式且难以阅读。使用服务如:
- DMARC分析器
- Dmarcian
- Valimail
- Postmark DMARC
检查DMARC
dig _dmarc.example.com TXT
curl "https://domscan.net/v1/health?domain=example.com"
# 返回hasDMARC状态
常见DMARC问题
未收到报告:确保rua地址可以接收大型电子邮件;某些提供商过滤。 合法电子邮件失败:检查所有发送服务的SPF/DKIM配置;验证对齐。 第三方服务失败:许多服务需要自定义DKIM设置以获得DMARC对齐。DMARC是电子邮件身份验证的顶峰——在SPF和DKIM工作正确后实施它。