| name | implementing-dmarc-dkim-spf-email-security |
| description | SPF、DKIM 和 DMARC 是邮件认证的三大支柱,共同防止域名伪造、验证消息完整性并定义处理未认证邮件的策略。正确实施可显著减少冒充组织域名的钓鱼攻击。 |
| domain | cybersecurity |
| subdomain | phishing-defense |
| tags | ["phishing","email-security","social-engineering","dmarc","awareness","dkim","spf","dns"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
实施 DMARC、DKIM 和 SPF 邮件安全
概述
SPF、DKIM 和 DMARC 是邮件认证的三大支柱。三者共同防止域名伪造、验证消息完整性并定义处理未认证邮件的策略。正确实施可显著减少冒充组织域名的钓鱼攻击。
前置条件
- 域名的 DNS 管理访问权限
- 邮件服务器/MTA 配置访问权限(Postfix、Exchange、Google Workspace、Microsoft 365)
- 对 DNS TXT 记录的基本了解
- Python 3.8+ 用于验证脚本
核心概念
SPF(发件人策略框架)
发布 DNS TXT 记录,列出被授权代表您的域名发送邮件的 IP 地址和邮件服务器。接收服务器根据此列表检查信封发件人的 IP。
DKIM(域名密钥识别邮件)
使用私钥向外发邮件添加加密签名。相应的公钥在 DNS 中发布。接收方验证签名以确保消息在传输过程中未被篡改。
DMARC(基于域名的消息认证、报告和一致性)
基于 SPF 和 DKIM 构建,为认证失败的消息指定策略(none/quarantine/reject),并提供监控伪造尝试的报告机制。
实施步骤
步骤一:审计当前状态
dig TXT example.com | grep spf
dig TXT selector1._domainkey.example.com
dig TXT _dmarc.example.com
步骤二:实施 SPF
# example.com 的 DNS TXT 记录
v=spf1 ip4:203.0.113.0/24 include:_spf.google.com include:spf.protection.outlook.com -all
关键 SPF 机制:
ip4: / ip6: — 授权特定 IP 范围
include: — 包含另一个域的 SPF 记录
a — 授权域名的 A 记录 IP
mx — 授权域名的 MX 记录 IP
-all — 硬拒绝其他所有(推荐)
~all — 软拒绝(监控阶段)
步骤三:实施 DKIM
openssl genrsa -out dkim_private.pem 2048
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem
grep -v "PUBLIC KEY" dkim_public.pem | tr -d '\n'
selector1._domainkey.example.com 的 DNS TXT 记录:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhki...
步骤四:实施 DMARC
# _dmarc.example.com 的 DNS TXT 记录
# 阶段 1(监控):
v=DMARC1; p=none; rua=mailto:dmarc-aggregate@example.com; ruf=mailto:dmarc-forensic@example.com; pct=100
# 阶段 2(隔离):
v=DMARC1; p=quarantine; rua=mailto:dmarc-aggregate@example.com; pct=25
# 阶段 3(拒绝):
v=DMARC1; p=reject; rua=mailto:dmarc-aggregate@example.com; pct=100
步骤五:监控和分析 DMARC 报告
使用 scripts/process.py 解析 DMARC 聚合 XML 报告,识别认证失败、未授权发件人和伪造尝试。
工具与资源
验证
- SPF 记录在 mxtoolbox.com 上通过验证
- DKIM 签名在测试邮件上得到验证
- DMARC 记录格式正确且已启用报告
- 测试邮件在收件人的 Authentication-Results 标头中通过所有三项检查