目录
什么是DMARC及其重要性
DMARC 是 Domain-based Message Authentication, Reporting & Conformance(基于域名的消息认证、报告和一致性)的缩写,是一种国际电子邮件认证标准,允许域名所有者指定当声称来自其域名的邮件未通过认证检查时应如何处理。
电子邮件欺骗(Email Spoofing)是指攻击者伪造发件人地址(From标头),使其看起来来自可信域名(如 [email protected]),即使他们没有该域名的使用权限。DMARC为收件方邮件服务器提供了一种检测和拒绝此类伪造邮件的机制。
SPF、DKIM与DMARC的协作关系
要理解DMARC,首先需要了解SPF和DKIM的基础知识:
| 标准 | 功能 | DNS记录 | 验证内容 |
|---|---|---|---|
| SPF | 列出授权发送邮件的IP地址 | TXT (v=spf1...) | 邮件服务器IP地址 |
| DKIM | 为邮件添加数字签名 | TXT (selector._domainkey) | 数字签名有效性 |
| DMARC | 定义策略并接收报告 | TXT (_dmarc) | 对齐 + 策略执行 |
DMARC不替代SPF或DKIM,而是在两者基础上构建。DMARC检查对齐性——From标头中的域名是否与通过SPF或DKIM认证的域名一致。
DMARC DNS记录结构
DMARC记录是在域名的 _dmarc 子域名创建的TXT记录,例如:
_dmarc.yourcompany.com TXT "v=DMARC1; p=none; rua=mailto:[email protected]; fo=1"
各标签说明:
| 标签 | 含义 | 示例值 |
|---|---|---|
v | 版本(必填) | DMARC1 |
p | 根域名策略(必填) | none / quarantine / reject |
sp | 子域名策略 | none / quarantine / reject |
rua | 接收汇总报告的地址 | mailto:[email protected] |
ruf | 接收取证报告的地址 | mailto:[email protected] |
pct | 应用策略的邮件百分比 | 100(默认) |
adkim | DKIM对齐模式 | r(宽松)/ s(严格) |
aspf | SPF对齐模式 | r(宽松)/ s(严格) |
fo | 失败报告选项 | 0 / 1 / d / s |
策略级别:none、quarantine、reject
p= 值是DMARC的核心,共有3个级别:
1 p=none — 监控模式
认证失败的邮件仍正常投递,但您会收到报告。适合初学者或测试阶段——先收集数据再提高执行力度。
2 p=quarantine — 隔离模式
认证失败的邮件进入垃圾邮件文件夹而非收件箱。适合对SPF/DKIM配置有70-80%把握时使用。
3 p=reject — 完全拒绝
认证失败的邮件被完全拒绝,发件人收到退信通知。适合100%确认所有合法邮件都通过认证后使用。
分步配置DMARC
1 验证SPF记录已存在
dig TXT yourdomain.com | grep spf
预期结果:"v=spf1 include:mail.yourdomain.com ~all"
2 验证DKIM记录已存在
dig TXT default._domainkey.yourdomain.com
AsiaGB主机用户(DirectAdmin):开通邮件托管后DKIM会自动配置。
3 创建DMARC记录
在域名DNS管理器中创建TXT记录:
| 字段 | 值 |
|---|---|
| 类型 | TXT |
| 主机/名称 | _dmarc |
| 值 | v=DMARC1; p=none; rua=mailto:[email protected] |
| TTL | 3600 |
4 等待DNS传播(24-48小时)
创建记录后,DNS全球传播通常需要1-24小时。
5 查看报告并逐步提升策略
收集2-4周报告后,分析是否有合法邮件失败,然后逐步升级至quarantine → reject。
理解DMARC报告
DMARC生成两种类型的报告:
| 类型 | 标签 | 频率 | 内容 |
|---|---|---|---|
| 汇总报告 | rua= | 每日 | SPF/DKIM通过/失败的统计摘要 |
| 取证报告 | ruf= | 每次失败 | 单封失败邮件的副本(部分服务商不发送) |
报告以XML格式发送,建议使用以下工具解析:
- MXToolbox DMARC Analyzer — 免费,操作简便
- dmarcanalyzer.com — 提供免费套餐
- Postmark DMARC — 小型域名免费
子域名的DMARC配置
使用 sp= 标签为子域名设置不同策略:
"v=DMARC1; p=reject; sp=quarantine; rua=mailto:[email protected]"
此示例中,根域名使用reject而所有子域名使用quarantine——适合部分子域名尚未配置DKIM的情况。
常见错误及解决方法
| 错误 | 原因 | 解决方法 |
|---|---|---|
| 设置DMARC后垃圾邮件仍能发送 | 使用p=none(仅监控模式) | 切换至p=quarantine或p=reject |
| 合法邮件被拒绝 | SPF/DKIM未覆盖所有邮件服务 | 检查汇总报告并添加缺失的SPF include |
| 未收到DMARC报告 | rua=地址无效或邮箱已满 | 验证目标邮箱和DNS语法 |
| DMARC记录无效 | 空格或语法错误 | 使用MXToolbox DMARC检查器 |
| SPF通过但对齐失败 | Mail From域名≠From标头域名 | 使用aspf=r(宽松模式)或修正Mail From地址 |
验证DMARC配置
dig TXT _dmarc.yourdomain.com
# 预期输出:
_dmarc.yourdomain.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
或使用在线工具:
- mxtoolbox.com/dmarc — 检查和分析DMARC记录
- mail-tester.com — 发送测试邮件并查看DMARC结果
- Google Postmaster Tools — 查看域名在Gmail中的信誉