目录
邮件进入垃圾箱或被直接拒收会给企业造成重大损失——无论是订单确认、付款收据还是客户沟通。正确且持久的解决方案是在域名 DNS 中正确配置 SPF、DKIM 和 DMARC。本指南将解释每个系统的工作原理,并提供可直接使用的真实 DNS 记录示例。
什么是 SPF 及其工作原理
SPF(发件人策略框架)是一种 DNS 标准,用于声明哪些 IP 地址或服务器有权以您的域名发送邮件。当接收邮件服务器收到邮件时,它会查询 From/Return-Path 标头中域名的 TXT 记录,并与实际发件 IP 进行比对。
如果发件 IP 在 SPF 记录中 → SPF 通过 | 如果不在 → SPF 失败/软失败,这会提高垃圾邮件评分。
SPF 工作流程
- 发件人从 IP
203.0.113.10发送邮件,声称来自[email protected] - 接收邮件服务器查询 DNS:
yourdomain.com TXT - 获得 SPF 记录:
v=spf1 ip4:203.0.113.0/24 ~all - 检查
203.0.113.10是否在203.0.113.0/24中 → ✅ 通过
什么是 DKIM 及其工作原理
DKIM(域名密钥识别邮件)是一种邮件数字签名系统,使用公私钥对工作——发件邮件服务器用私钥对外发邮件签名,接收方用发布在 DNS 中的公钥进行验证。
DKIM 的优势在于它还能验证邮件内容的完整性。如果邮件在传输过程中被篡改,DKIM 签名会立即失效。
邮件中附带的 DKIM 标头
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yourdomain.com;
s=mail2026; t=1725854400;
bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=;
h=From:To:Subject:Date;
b=signature_value_here...
| 字段 | 含义 |
|---|---|
d= | 签发 DKIM 的域名 |
s= | 选择器名称(用于 DNS 查询) |
bh= | 邮件正文的哈希值 |
b= | 数字签名本身 |
什么是 DMARC 及其工作原理
DMARC(基于域的邮件认证、报告和一致性)是一种策略,告诉接收邮件服务器当邮件 SPF 或 DKIM 失败时该怎么做,并将结果报告给域名所有者。
DMARC 还要求 SPF 或 DKIM 结果与 From: 标头中的域名对齐,而不仅仅是独立通过。
三种 DMARC 策略级别
| 策略 | 操作 | 适用场景 |
|---|---|---|
p=none | 不采取行动,仅报告 | 初始监控阶段 |
p=quarantine | 移入垃圾邮件/垃圾箱 | 过渡阶段 |
p=reject | 完全拒绝邮件 | 完全执行 |
SPF vs DKIM vs DMARC 对比
| 方面 | SPF | DKIM | DMARC |
|---|---|---|---|
| 验证内容 | 发件服务器 IP | 签名 + 内容 | 策略 + 对齐 |
| 防护对象 | IP 欺骗 | 邮件篡改 | 域名欺骗(From:) |
| DNS 位置 | @ 的 TXT 记录 | selector._domainkey 的 TXT 记录 | _dmarc 的 TXT 记录 |
| 邮件转发 | 可能失败 | 通常通过 | 取决于 SPF/DKIM |
| 报告功能 | 无 | 无 | 有(汇总 + 取证) |
如何配置 SPF 记录
SPF 记录是位于根域(@)的 TXT 记录,始终以 v=spf1 开头。
基本语法
v=spf1 [机制...] [all]
常用 SPF 机制
| 机制 | 含义 | 示例 |
|---|---|---|
ip4: | 允许 IPv4 / 子网 | ip4:203.0.113.10 |
ip6: | 允许 IPv6 | ip6:2001:db8::/32 |
include: | 引用其他域的 SPF | include:_spf.google.com |
mx | 允许 MX 服务器 | mx |
~all | 软失败——其他不允许(推荐) | ~all |
-all | 硬失败——拒绝所有不匹配的 | -all |
常用 SPF 记录示例
# 使用自己的邮件服务器和 Google Workspace
v=spf1 mx include:_spf.google.com ~all
# 直接指定 IP + Gmail
v=spf1 ip4:203.0.113.10 include:_spf.google.com -all
# 使用 AsiaGB 邮件服务
v=spf1 include:spf.asiagb.com ~all
v=spf1 开头的 TXT 记录,SPF 会立即失败。请将所有内容合并到一条记录中。
在 DirectAdmin 中添加 SPF
- 登录 DirectAdmin → 邮件管理 → MX 记录
- 或进入 DNS 管理 → 选择您的域名
- 添加 TXT 记录:名称 =
@或留空,值 = 您的 SPF 字符串 - 保存并等待 DNS 传播 0-48 小时
如何配置 DKIM 记录
DKIM 需要从您的邮件服务器生成密钥对。您需要:
- 在邮件服务器上生成私钥 + 公钥
- 配置邮件服务器使用私钥对外发邮件签名
- 通过 DNS TXT 记录发布公钥
DKIM DNS 记录格式
# 记录名称:
SELECTOR._domainkey.yourdomain.com
# 以选择器 "mail2026" 为例:
mail2026._domainkey.yourdomain.com
# 值:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
使用 OpenSSL 生成 DKIM 密钥
# 生成私钥(2048 位 RSA)
openssl genrsa -out dkim_private.pem 2048
# 提取 DNS 用公钥
openssl rsa -in dkim_private.pem -pubout | grep -v "PUBLIC KEY" | tr -d '\n'
如何配置 DMARC 记录
DMARC 是位于根域名 _dmarc 子域名的 TXT 记录。
DMARC 记录格式
# 记录名称:
_dmarc.yourdomain.com
# 从监控模式开始:
v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1
# 中间阶段(隔离):
v=DMARC1; p=quarantine; pct=50; rua=mailto:[email protected]
# 完全执行(拒绝):
v=DMARC1; p=reject; rua=mailto:[email protected]; adkim=s; aspf=s
DMARC 标签说明
| 标签 | 含义 | 可用值 |
|---|---|---|
p= | 主策略 | none / quarantine / reject |
pct= | 受策略影响的邮件百分比 | 0-100(默认:100) |
rua= | 汇总报告地址 | mailto:email@domain |
ruf= | 取证报告地址 | mailto:email@domain |
adkim= | DKIM 对齐模式 | r(宽松)/ s(严格) |
aspf= | SPF 对齐模式 | r(宽松)/ s(严格) |
安全的 DMARC 部署策略
- 第 1-2 周:
p=none— 接收汇总报告,了解所有邮件来源 - 第 3-4 周:
p=quarantine; pct=10— 对 10% 的邮件开始执行 - 第 2 个月:
p=quarantine; pct=100 - 第 3 个月起:
p=reject— 完全执行
测试和验证配置
配置完成后,等待 DNS 传播 24-48 小时再进行测试。
推荐测试工具
| 工具 | 测试内容 | 网址 |
|---|---|---|
| MXToolBox | SPF、DKIM、DMARC | mxtoolbox.com/SuperTool |
| mail-tester.com | 综合评分 + 垃圾邮件评分 | mail-tester.com |
| DMARC Analyzer | 汇总报告 | dmarcanalyzer.com |
| Google Admin Toolbox | Google 的 DNS 检查器 | toolbox.googleapps.com/apps/checkmx |
通过命令行验证
# 检查 SPF
dig TXT yourdomain.com +short
# 检查 DKIM(选择器:mail2026)
dig TXT mail2026._domainkey.yourdomain.com +short
# 检查 DMARC
dig TXT _dmarc.yourdomain.com +short
配置正确的标志
- 邮件标头显示:
Authentication-Results: ... spf=pass dkim=pass dmarc=pass - mail-tester.com 评分 ≥ 9/10
- MXToolBox 对 SPF、DKIM、DMARC 无报错
- DMARC 汇总报告中没有未知邮件来源
Authentication-Results 行,应该显示 spf=pass、dkim=pass、dmarc=pass
总结:上线前检查清单
- ✅ 在 @ 处设置 SPF TXT 记录,只有一条
- ✅ 在邮件服务器上启用 DKIM + 将公钥添加到 DNS
- ✅ 在 _dmarc.yourdomain.com 处添加 DMARC 记录,从 p=none 开始
- ✅ 等待 DNS 传播 24-48 小时
- ✅ 使用 mail-tester.com 和 MXToolBox 测试
- ✅ 1 周后读取 DMARC 汇总报告
- ✅ 逐步将策略从 none → quarantine → reject
需要支持 SPF/DKIM/DMARC 并配备高级垃圾邮件过滤的邮件托管服务?AsiaGB 邮件过滤从第一天起就帮您正确配置一切。