配置 SPF、DKIM、DMARC 防止电子邮件欺骗

电子邮件欺骗和网络钓鱼仍然是最常见的网络安全威胁之一。恶意行为者可以使用您的域名发送伪造电子邮件,损害您的业务声誉并欺骗您的客户。本指南逐步指导您配置 SPF、DKIM 和 DMARC 记录,以关闭这些漏洞并完全保护您的域名。

SPF、DKIM、DMARC 概述 — 谁做什么

所有三个标准都是驻留在您的域名 DNS 中的电子邮件身份验证机制。它们不相互替代 — 它们相互分层。SPF 验证谁被允许发送,DKIM 验证消息内容未被篡改,DMARC 是决定前两个失败时要做什么的政策。下表总结了每个角色、记录类型和示例值,以便您在逐步在域名 DNS 中配置它们之前获得全局图景。

标准 功能 记录类型 / 位置 示例值
SPF 列出允许为域名发送邮件的 IP 地址 / 服务器 TXT @ 根域 (@) v=spf1 include:_spf.provider.com ~all
DKIM 数字签名邮件,证明内容未在传输过程中被篡改 TXT @ selector._domainkey v=DKIM1; k=rsa; p=MIGf...
DMARC 设置 SPF/DKIM 验证失败时的策略 + 接收欺骗报告 TXT @ _dmarc v=DMARC1; p=none; rua=mailto:...

关键点是,这三个标准都是在域名的 DNS 管理中配置的 TXT 记录。如果您在 AsiaGB 通过 DirectAdmin 注册域名并管理 DNS,您可以在同一个地方自行添加和编辑所有这些记录,完全不依赖于外部服务商。

什么是 SPF 及其工作原理?

SPF (发件人策略框架) 是一个 DNS TXT 记录,用于指定哪些 IP 地址或邮件服务器被授权代表您的域名发送电子邮件。接收方服务器收到电子邮件时,会根据您的 SPF 记录检查发件人的 IP。如果该 IP 未列出,电子邮件将被标记为可疑或被拒绝。

SPF 记录结构

基本的 SPF 记录示例:

v=spf1 include:thirdpartydomain.com ip4:203.0.113.10 ~all

在 DirectAdmin 中添加 SPF

  1. 登录 DirectAdmin → DNS 管理
  2. 将类型设置为 TXT
  3. 将名称设置为 @ (根域)
  4. 将值设置为 v=spf1 include:YOUR-MAILPROVIDER.com ~all
  5. 保存并等待 1–4 小时以进行 DNS 传播

重要提示:每个域名只能有一条 SPF 记录。多条以 v=spf1 开头的 TXT 记录会完全破坏 SPF。使用多个 include: 机制将所有授权的邮件服务商合并为单条记录。

逐步配置 SPF 记录 (DNS TXT)

让我们通过在域名 DNS 管理中设置 SPF 的实际示例来演示。假设您通过 AsiaGB 邮件服务器发送邮件,同时还使用一个外部通讯服务。目标是将所有合法的发送源合并到单条 SPF 记录中。

  1. 打开 DirectAdmin → 为域名打开 DNS 管理。
  2. 首先检查是否已存在以 v=spf1 开头的 TXT 记录 — 如果有,请编辑现有记录而不是创建第二条。
  3. 创建/编辑 TXT 记录:名称 = @、类型 = TXT。
  4. 输入值,列出所有真实的发送源,如主邮件服务器加上外部服务商:
@   TXT   "v=spf1 a mx include:_spf.asiagb-mail.com include:servers.mailprovider.net ~all"

保存后,等待大约 1–4 小时进行 DNS 传播,然后使用 dig TXT yourdomain.com 或在线工具验证发布的值与您设置的值一致。注意 10 个 DNS 查询限制:SPF 限制触发 DNS 查询的 include: / a / mx 机制总数不超过 10。超过此限制会产生 PermError 并完全破坏 SPF — 如果使用多个服务商,请删除不必要的 include。

强制实施前先测试:不要直接跳到 -all(硬失败)。如果遗漏任何源,合法邮件将被拒绝。从 ~all 开始,收集 1–2 周的 DMARC 报告,然后收紧为 -all。

什么是 DKIM?它是如何工作的?

DKIM(DomainKeys Identified Mail,域名密钥识别邮件)是一套电子邮件数字签名系统。发件邮件服务器会在每封邮件的标头中附加一个加密签名,收件服务器随后通过您 DNS 中发布的公钥来验证该签名。若签名匹配,即可确认邮件在传输过程中未被篡改。

DKIM 记录结构

DKIM 记录以 selector._domainkey.yourdomain.com 格式添加到子域名:

mail._domainkey.yourdomain.com TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqG..."

获取您的 DKIM 密钥

如果您在 AsiaGB 托管邮件,DKIM 密钥将自动生成,可在 DirectAdmin → 邮件 → DomainKeys 中查看。若使用 Google Workspace 或 Microsoft 365 等第三方服务,请从相应的管理控制台获取 DKIM 密钥,然后将其添加到您域名的 DNS 中。

配置 DKIM(在 DirectAdmin 中启用 + TXT 记录)

DKIM 与 SPF 的不同之处在于它需要密钥对(私钥保存在邮件服务器上,公钥发布到 DNS)。在 AsiaGB,DirectAdmin 会自动为您生成密钥对,您只需启用它并将公钥发布到 DNS 即可。

  1. 打开 DirectAdmin → 邮件管理器 → DKIM 密钥(部分主题界面位于 邮件账户 → DomainKeys)。
  2. 为该域名启用 DKIM——系统将创建私钥,并以 TXT 记录形式显示公钥及选择器(通常为 x 或 default)。
  3. 复制所提供的 TXT 值。如果 DNS 由同一服务器管理,DirectAdmin 通常会自动添加该记录——请在 DNS 管理中确认此记录已存在:
x._domainkey   TXT   "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ..."

如果您的域名 DNS 指向其他服务商,请从 DirectAdmin 复制公钥,然后手动在该服务商处以 selector._domainkey 为名称创建 TXT 记录。若使用 Google Workspace 或 Microsoft 365,请从该服务的管理控制台获取公钥,因为私钥存储在服务商的邮件服务器上。

注意 p= 值超过 255 个字符的情况: DKIM 公钥通常超过 TXT 记录单字符串的长度限制。大多数 DNS 面板会自动处理,但若手动输入,必须将其拆分为多个带引号的字符串,例如 "v=DKIM1; k=rsa; " "p=MIGf...",否则 DKIM 验证将失败。

什么是 DMARC?它是如何工作的?

DMARC(Domain-based Message Authentication, Reporting, and Conformance,基于域名的邮件认证、报告与一致性)是一套策略,告知收件服务器如何处理未通过 SPF 或 DKIM 检查的邮件。它还会生成报告,帮助您监控谁在尝试伪造您的域名发送邮件。

DMARC 记录结构

在 _dmarc.yourdomain.com 添加 TXT 记录:

v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100

配置 DMARC 策略(none→quarantine→reject,启用 rua 报告)

DMARC 是顶层策略,告知收件服务器如何处理未通过 SPF/DKIM 验证的邮件。核心原则是逐步提升策略强度,从 none 到 quarantine,最终到 reject,确保正常邮件不会在过程中被误拦截。在 _dmarc 处创建 TXT 记录:

  1. 第一步 — 监控(p=none): 从仅监控模式开始,不影响邮件投递,但开启报告功能:
    _dmarc   TXT   "v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; adkim=r; aspf=r; pct=100"
  2. 第二步 — 隔离(p=quarantine): 当报告确认 SPF/DKIM 已覆盖所有真实发件来源后,切换至隔离模式,使未通过邮件进入垃圾邮件:
    _dmarc   TXT   "v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100"
  3. 第三步 — 拒绝(p=reject): 最严格的级别,直接拒绝伪造邮件——仅在一切运行稳定数周后使用:
    _dmarc   TXT   "v=DMARC1; p=reject; rua=mailto:[email protected]"

常用标签说明:

rua 报告以压缩 XML 文件形式发送,原始格式难以阅读。使用 DMARC 报告查看工具将其转化为图表,可清楚看出哪些来源仍未通过验证,从而在收紧策略前将其添加至 SPF/DKIM。

推荐配置顺序

按照以下顺序操作,可将配置过程中误拦截正常邮件的风险降至最低:

  1. 添加 SPF 记录 — 从 ~all(软失败)开始
  2. 添加 DKIM 记录 — 从邮件服务商获取密钥并添加到 DNS
  3. 测试 SPF + DKIM — 发送测试邮件,在邮件标头中确认两者均通过
  4. 添加 p=none 的 DMARC 记录 — 收集报告 1–2 周
  5. 查看报告并调整 SPF — 确保所有发件服务器均已包含
  6. 切换至 p=quarantine — 当确认 SPF 配置完整后
  7. 切换至 p=reject — 最终步骤,待一切稳定后执行

测试 SPF、DKIM 和 DMARC 的工具

以下免费在线工具可帮助您即时验证配置是否正确:

总结: SPF 防止未经授权的 IP 以您的域名发送邮件,DKIM 验证邮件内容的完整性,DMARC 设置执行策略并提供可见性。同时部署三者可显著提升邮件投递率,并大幅增加攻击者伪造您域名的难度。

常见问题(FAQ)

我需要同时配置 SPF、DKIM 和 DMARC 三者吗?

是的,理想情况下三者都需要,因为它们相互补充。仅有 SPF,攻击者仍可通过伪造显示名称或利用邮件转发绕过验证;DKIM 防止邮件内容被篡改;而 DMARC 负责执行策略并提供报告,让您了解谁在尝试伪造您的域名。三者并用可同时提升安全性和邮件投递率。

配置完成后多久生效?

这取决于 DNS 传播速度。TXT 记录通常在 1–4 小时内传播完成,但也受原有记录 TTL 的影响。如果 TTL 较高(例如 86400 秒 = 1 天),可能需要等到旧缓存过期。建议在测试前将 TTL 调低(例如调至 3600),然后使用 dig TXT yourdomain.com 验证新值是否已生效。

我已经有 SPF 和 DKIM,还需要 DMARC 吗?

需要。SPF 和 DKIM 只负责执行检查,不会告知收件服务器当检查失败时该如何处理。DMARC 正是负责设置策略(none/quarantine/reject)并向您发送 rua 报告,显示哪些 IP 在以您的域名发送伪造邮件。没有 DMARC,未通过 SPF/DKIM 的伪造邮件仍可能进入收件人收件箱。

我可以从一开始就设置 p=reject 吗?

不建议。直接跳至 p=reject 可能导致正常邮件被完全拒绝——例如您忘记添加到 SPF 的开票系统或新闻通讯服务。建议先使用 p=none 收集 rua 报告至少 1–2 周,找出仍未通过验证的来源并加以修复,然后再依次切换至 quarantine 和 reject。

注册域名,享受免费 DNS 管理

AsiaGB 通过 DirectAdmin 提供完整的 TXT 记录管理功能,支持 SPF、DKIM 和 DMARC 配置。注册 .com 域名,每年仅需 500 泰铢。

注册域名