邮件认证详解:SPF、DKIM 和 DMARC 配置指南

SPF DKIM DMARC 邮件认证 送达率
披露:Email Wiki 上的部分链接为 VPS 服务商(如 Vultr)的联盟链接。通过这些链接购买,我们可能获得佣金,但不会对您产生额外费用。这有助于我们保持网站免费。所有教程均独立撰写,我们仅推荐我们认为适合自建邮件服务器的可靠服务。

如果你在运营自建邮件服务器,要想让邮件稳定送达,就必须实现三项认证标准:SPFDKIMDMARC。缺少这些配置,你的合法邮件将会进入垃圾箱,甚至直接被拒绝。本文逐一讲解每项标准并提供详细配置步骤。

为什么需要邮件认证

电子邮件协议设计之初没有身份认证机制,使得伪造发件人地址极为容易。以下三种基于 DNS 的标准解决了这一问题:

标准作用
SPF声明哪些服务器有权以你的域名发送邮件
DKIM对外发邮件进行密码学签名,证明邮件未被篡改
DMARC将 SPF 和 DKIM 结合,告知收件方认证失败时如何处理

三者均为 DNS TXT 记录——SPF 和 DMARC 无需安装额外软件,DKIM 需要一个小型守护进程(opendkim)。

第一部分:SPF(发件人策略框架)

SPF 是在你的域名上设置的 DNS TXT 记录,列出所有被授权以该域名发送邮件的 IP 地址。

创建记录:

服务器 IP 为 203.0.113.10,域名为 example.com

example.com.  IN  TXT  "v=spf1 ip4:203.0.113.10 ~all"

各字段说明:

  • v=spf1 — SPF 版本
  • ip4:203.0.113.10 — 授权此 IPv4 地址发送邮件
  • ~all — 其他来源软失败(确认稳定后改为 -all 硬失败)

如果你使用了第三方中继服务(如 Amazon SES 或 SendGrid):

"v=spf1 ip4:203.0.113.10 include:amazonses.com ~all"

验证:

dig TXT example.com +short

第二部分:DKIM(域名密钥识别邮件)

DKIM 为外发邮件添加密码学签名。公钥发布在 DNS,私钥由邮件服务器用于签名。

安装 OpenDKIM

sudo apt update
sudo apt install opendkim opendkim-tools -y

生成密钥对

sudo mkdir -p /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -s mail -D /etc/opendkim/keys/example.com/
sudo chown -R opendkim:opendkim /etc/opendkim/keys/

生成两个文件:

  • mail.private — 私钥(严禁泄露)
  • mail.txt — 需要发布的 DNS 记录

发布 DNS 记录

查看生成的记录:

cat /etc/opendkim/keys/example.com/mail.txt

输出类似:

mail._domainkey  IN  TXT  ( "v=DKIM1; k=rsa; "
    "p=MIIBIjANBgkq..." )

在 DNS 中创建 TXT 记录:

  • 名称mail._domainkey.example.com
  • :粘贴完整的 p=... 内容(去掉括号)

配置 OpenDKIM

编辑 /etc/opendkim.conf

Mode                  sv
Canonicalization      relaxed/simple
Domain                example.com
Selector              mail
KeyFile               /etc/opendkim/keys/example.com/mail.private
Socket                inet:8891@localhost

创建 /etc/opendkim/TrustedHosts

127.0.0.1
localhost
example.com

与 Postfix 集成

/etc/postfix/main.cf 中添加:

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

重启服务:

sudo systemctl restart opendkim
sudo systemctl reload postfix

验证 DKIM

发送一封测试邮件到 check-auth@verifier.port25.com,你会收到包含 DKIM 验证结果的自动回复。

第三部分:DMARC

DMARC 将 SPF 和 DKIM 结合起来,告知邮件服务商在认证失败时如何处理邮件。

创建记录_dmarc.example.com):

_dmarc.example.com.  IN  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

策略选项(p=):

  • none — 仅监控,不采取行动(从这里开始)
  • quarantine — 将失败邮件投入垃圾箱
  • reject — 直接拒绝失败邮件

建议先设为 p=none,通过聚合报告(rua)分析 2–4 周的数据,再逐步升级到 quarantinereject

严格策略示例(验证完毕后使用):

"v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@example.com; aspf=s; adkim=s"

一键验证

# 检查 SPF
nslookup -type=TXT example.com

# 检查 DKIM
nslookup -type=TXT mail._domainkey.example.com

# 检查 DMARC
nslookup -type=TXT _dmarc.example.com

也可以使用在线工具 MXToolbox 进行综合检测。

配置汇总

步骤记录位置
SPFexample.com TXT "v=spf1 ..."域名 DNS
DKIMmail._domainkey.example.com TXT "v=DKIM1; ..."域名 DNS
DMARC_dmarc.example.com TXT "v=DMARC1; p=none; ..."域名 DNS

三项全部配置完成后,你的邮件将能通过 Gmail、Outlook、Yahoo 等主流邮件服务商的认证检查。

准备好部署你的邮件服务器了吗?

你需要一台 IP 信誉干净的可靠 VPS。立即使用 Vultr——独立 IP、NVMe SSD、全球数据中心,最低 $6/月。