Oamc

SPF / DKIM / DMARC 配置

本页目录

场景

自己发的邮件总进对方垃圾箱,或者收到的伪造邮件显示成自己域名发的。

前置条件

  • 能改 DNS 记录
  • 知道发信服务器的出口 IP
  • 有邮件服务器(Postfix / Exchange)的管理权限

配置

SPF(哪些 IP 有权以这个域名发信)

example.com.  TXT  "v=spf1 mx ip4:203.0.113.10 include:_spf.example.net -all"

-all 是硬失败,有绕行需求的先写 ~all 观察。

DKIM(签名,证明没被篡改)

Postfix + OpenDKIM:

dnf install -y opendkim opendkim-tools
mkdir -p /etc/opendkim/keys/example.com
cd /etc/opendkim/keys/example.com
opendkim-genkey -s mail -d example.com

cat >>/etc/opendkim.conf <<'EOF'
Domain example.com
Selector mail
KeyFile /etc/opendkim/keys/example.com/mail.private
Socket inet:8891@localhost
EOF

systemctl enable --now opendkim

把 mail.txt 里的内容作为 TXT 记录发布:

mail._domainkey.example.com  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBg..."

DMARC(告诉对方怎么处理伪造邮件)

_dmarc.example.com  TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; pct=100"

p=none 只观察,quarantine 进垃圾箱,reject 直接拒收。

验证

dig +short TXT example.com
dig +short TXT mail._domainkey.example.com
dig +short TXT _dmarc.example.com

# 用 check-auth 验证签名
sendmail -t <<'EOF'
To: test@example.com
Subject: dkim test

test
EOF

或者把邮件发到 check-auth@verifier.port25.com,回信里有 SPF/DKIM/DMARC 结果。

回滚

删掉对应的 TXT 记录即可,邮件仍能发,只是验证不过。

坑

  • SPF 只能有一条记录,写两条等于没有。
  • DNS 里 TXT 记录超过 255 字符要拆段,别手工截断。
  • DKIM 私钥权限要 600,属主是 opendkim。
  • 改了 DKIM selector 忘了同步 DNS。
  • DMARC 一上来就 p=reject,自己的转发邮件全被拒。
  • 邮件列表/转发会破坏 SPF,要靠 DKIM 补救。