0Pricing
Security+ Academy · 课时

电子邮件身份验证:SPF、DKIM 与 DMARC

实施并验证发件人策略框架、DomainKeys Identified Mail 和 DMARC 政策,防止域名欺骗和网络钓鱼。

电子邮件身份验证:SPF、DKIM 与 DMARC 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。

电子邮件欺骗问题

核心 SMTP 协议(设计于 20 世纪 70 年代)没有内置的发件人身份验证机制。任何邮件服务器都可以声称代表任意 Domain 发送电子邮件,这种技术称为电子邮件欺骗。攻击者利用这一点发送钓鱼邮件,使其看起来像是来自合法组织(您的银行、您的 CEO 或熟悉的供应商)。为解决这一问题,人们制定了三种基于 DNS 的电子邮件身份验证标准:SPF、DKIM 和 DMARC。每种标准针对欺骗问题的不同方面,结合部署时效果最佳。

发件人策略框架(SPF)

SPF 是一条 DNS TXT 记录,用于指定哪些邮件服务器被 Authorize 代表某个 Domain 发送电子邮件。当接收邮件服务器收到一封声称来自 example.com 的邮件时,它会查询 example.com 的 SPF 记录,并验证发送服务器的 IP 地址是否列在其中。如果该 IP 未获授权,邮件可能会被标记为垃圾邮件或被拒收。SPF 检查的是信封 From 地址(SMTP MAIL FROM 命令),而不是用户可见的显示 From 标头。

# SPF DNS TXT record for example.com
# Authorize Google Workspace + SendGrid + company IP
example.com.  TXT  'v=spf1 include:_spf.google.com include:sendgrid.net ip4:203.0.113.10 -all'

# Mechanism meanings:
# include:  authorize another domain's SPF record
# ip4:      authorize specific IPv4 address/range
# ip6:      authorize specific IPv6 address
# -all      FAIL (reject) mail from non-listed sources
# ~all      SOFTFAIL (accept but mark as spam)
# ?all      NEUTRAL (no policy stated)

SPF 的局限性

SPF 有两个重要局限。第一,转发会破坏 SPF:电子邮件被转发时,转发服务器的 IP 不在原始 Domain 的 SPF 记录中,导致合法的转发邮件 SPF 验证失败。第二,SPF 只验证信封 From(用户不可见),不验证电子邮件客户端中可见的 From 标头。攻击者仍可伪造可见的 From 标头,同时使用能够通过 SPF 验证的信封 From,这就是 SPF 单独使用仍不够的原因。DKIM 和 DMARC 可以弥补这些不足。

DomainKeys Identified Mail(DKIM)

DKIM 会为发出的电子邮件添加加密签名。发送邮件服务器使用私钥为特定的电子邮件标头和邮件正文签名,并添加 DKIM-Signature 标头。公钥以 DNS TXT 记录的形式发布在选择器子域名下。接收服务器获取公钥并验证签名,从而确认邮件在传输过程中未被篡改,并且来自能够访问该私钥的服务器。与 SPF 不同,DKIM 签名会随邮件标头一起传递,因此能够在转发过程中保留。

# DKIM DNS TXT record (selector: 'google')
google._domainkey.example.com.  TXT \
  'v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GN...'

# DKIM-Signature header in email:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com;
  s=google; h=from:to:subject:date;
  bh=<body_hash>; b=<signature>

# Verification:
# 1. Extract 'b=' (signature)
# 2. Fetch public key at google._domainkey.example.com
# 3. Verify signature over 'h=' headers + body hash

DKIM 选择器与密钥轮换

DKIM 使用选择器,允许一个 Domain 同时使用多个公钥,这对于运行多个邮件服务(Google Workspace + 营销平台)或在不中断服务的情况下进行密钥轮换非常有用。选择器名称包含在 DKIM-Signature 标头中,因此接收服务器知道应查询哪条 DNS 记录。组织应每年轮换一次 DKIM 密钥,或在怀疑密钥遭到入侵时立即轮换。密钥长度:建议至少使用 2048 位 RSA 密钥;1024 位密钥已被弃用,并且可以通过现代计算能力破解。

DMARC:基于 Domain 的邮件身份验证

DMARC(基于 Domain 的邮件身份验证、报告和一致性)建立在 SPF 和 DKIM 之上,并增加了:对齐检查(可见 From 标头中的 Domain 必须与通过 SPF 或 DKIM 身份验证的 Domain 对齐),以及一项用于告知接收服务器如何处理验证失败邮件的策略。DMARC 策略包括 none(仅监控)、quarantine(投递到垃圾邮件文件夹)和 reject(不予投递)。DMARC 还支持汇总报告(RUA)和取证报告(RUF),这些报告会发送回 Domain 所有者,帮助其了解哪些人正在代表该 Domain 发送邮件。

# DMARC DNS TXT record
_dmarc.example.com.  TXT \
  'v=DMARC1; p=reject; sp=reject; \
   pct=100; \
   rua=mailto:dmarc-reports@example.com; \
   ruf=mailto:forensic@example.com; \
   adkim=s; aspf=s'

# p=reject   : reject failing messages (strongest)
# pct=100    : apply to 100% of messages
# adkim=s    : strict DKIM alignment
# aspf=s     : strict SPF alignment
# rua=       : aggregate report destination

DMARC 对齐

Alignment 是 DMARC 能够有效防范标头欺骗的关键。对于 SPF 对齐,SMTP Envelope From 中的域必须与可见 From 标头中的域匹配。对于 DKIM 对齐,签名域(DKIM-Signature 中的 d=)必须与 From 标头中的域匹配。在严格模式下,域必须完全匹配。在宽松模式下,允许使用子域。如果 SPF 或 DKIM 中的任一项通过且正确完成对齐,电子邮件就能通过 DMARC——不需要两者都通过。这种组合弥补了仅使用 SPF 时留下的可见标头欺骗漏洞。

# DMARC alignment example
Envelope From: attacker@legit.com  <- SPF may PASS for legit.com
From header  : spoofed@example.com <- VISIBLE to user

# Without DMARC: SPF passes (envelope from legit.com)
# User sees spoofed@example.com and trusts it

# With DMARC on example.com:
# SPF alignment check: legit.com != example.com -> FAIL
# DKIM: attacker has no private key for example.com -> FAIL
# DMARC result: FAIL -> message rejected per policy

分阶段部署 DMARC

Organization 应逐步部署 DMARC,以免影响合法电子邮件的正常发送。Stage 1:为所有邮件流部署 SPF 和 DKIM。Stage 2:发布包含 RUA 报告功能的 p=none DMARC 记录。在 2 至 4 周内分析报告(工具:DMARC Analyzer、dmarcian),找出所有合法的发送来源。Stage 3:切换到 p=quarantine; pct=10,然后逐步将 pct 提高到 100%。Stage 4:确认所有合法邮件流都能通过后,切换到 p=reject。在发现所有邮件流之前仓促切换到拒绝模式,会导致合法电子邮件被拒收。

# DMARC rollout stages
Stage 1: p=none; pct=100  (monitoring only)
Stage 2: p=quarantine; pct=10  (10% to spam)
Stage 3: p=quarantine; pct=100 (all to spam)
Stage 4: p=reject; pct=100     (block at MTA)

# Monitor RUA reports between each stage
# Look for legitimate sources failing alignment
# Common gotchas:
# - Marketing platforms sending as your domain
# - IT ticketing systems
# - Automated notification services
# - Third-party CRM tools

BIMI:消息识别品牌标志

BIMI 是一种建立在 DMARC 之上的新兴标准。当某个域的 DMARC policy 设置为 quarantine 或 reject 时,电子邮件客户端(Gmail、Apple Mail)可以在收件箱中发件人姓名旁显示该品牌经过验证的标志。BIMI 要求从获批准的签发机构获取验证标志证书(VMC),以确认商标所有权。虽然 BIMI 尚未出现在 Security+ 考试中,但它代表了电子邮件身份验证的发展方向:让经过验证的发件人与欺骗发件人一眼就能通过视觉效果区分开来。

SPF、DKIM 与 DMARC 协同工作

这三项标准共同构成完整的电子邮件身份验证系统。SPF 验证发送 Server 是否获得域所有者授权。DKIM 验证消息完整性,并确认发送 Organization 持有私钥。DMARC 将两者与可见 From 标头关联起来,对验证失败的情况执行 policy,并提供报告。没有任何单独一项标准足够完善:仅使用 SPF 无法防止可见标头欺骗;仅使用 DKIM 不会强制拒绝验证失败的消息;如果没有 SPF 或 DKIM,仅使用 DMARC 也没有可供检查的对象。必须同时部署三者,才能全面防范域欺骗。

# Email authentication check order
1. Receiving MTA receives message
2. SPF check: is sending IP authorized? (envelope From)
3. DKIM check: is signature valid? (using public key DNS)
4. DMARC check:
   a. Did SPF pass with alignment? OR
   b. Did DKIM pass with alignment?
   -> If YES: PASS (deliver normally)
   -> If NO: apply DMARC policy (none/quarantine/reject)
5. Reporting: send aggregate data to rua= address

外部电子邮件横幅

防范网络钓鱼和 BEC 的一种实用纵深防御措施,是为每封来自 Organization 外部的消息添加外部电子邮件警告横幅。此横幅通常由 SEG 插入,用于提醒员工该邮件来自外部发件人,即使显示名称看起来像某位同事或高管。横幅对于标记 BEC 攻击尤其有效,因为攻击者可能使用相似域或伪造显示名称。横幅应具有明显的视觉特征(彩色标头或页脚),并包含报告可疑消息的说明。

# Example external email banner (SEG inserts this)
# --- EXTERNAL EMAIL ---
# This message was sent from outside the organization.
# Do not click links or open attachments unless
# you expected this email and trust the sender.
# Report suspicious email: phishing@company.com
# ----------------------

# Proofpoint SEG: add disclaimer via content filter
# Match: Header 'X-MS-Exchange-Organization-SCL' absent
# Action: Prepend HTML banner to message body

快速检查

测试您对本课 CompTIA Security+(SY0-701)概念的理解。

课程回顾

在本课中,您学到了:SPF 使用 DNS TXT 记录授权发送 IP,但只检查 Envelope From,不检查可见标头;DKIM 添加加密签名,用于验证消息完整性,并且能够在转发后保持有效;DMARC 通过对齐检查和可执行的 policy(none/quarantine/reject)将 SPF 与 DKIM 关联到可见 From 标头,并提供报告。接下来,我们将学习安全电子邮件网关和反垃圾邮件控制措施。

常见问题解答

「电子邮件身份验证:SPF、DKIM 与 DMARC」课时是免费的吗?

是的 — 「电子邮件身份验证:SPF、DKIM 与 DMARC」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。

「电子邮件身份验证:SPF、DKIM 与 DMARC」这节课中我会学到什么?

实施并验证发件人策略框架、DomainKeys Identified Mail 和 DMARC 政策,防止域名欺骗和网络钓鱼。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Security+ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「电子邮件身份验证:SPF、DKIM 与 DMARC」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Security+ Academy 课中编写并运行代码吗?

能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 电子邮件身份验证:SPF、DKIM 与 DMARC
  2. 安全电子邮件网关与反垃圾邮件控制
  3. Web 内容过滤与 DNS 黑洞
  4. SSL/TLS 检查与浏览器中间人攻击
← 返回 Security+ Academy