OpenDMARC
OpenDMARC 是 基于域的消息认证、报告和一致性 (DMARC) 规范的开源实现。
DMARC 是一种邮件传输策略,一些常见的邮件提供商已支持该策略。它依赖于 发件人策略框架 (SPF) 和 DKIM。DMARC 为出站邮件提供策略,并检查入站邮件是否符合该策略。策略通过 DNS TXT 记录发布。相关解释详见 #DMARC 记录。验证在后台服务进程中完成。更多信息请参阅 RFC:7489。
安装
配置
主配置文件为 /etc/opendmarc/opendmarc.conf
修改以下选项
/etc/opendmarc/opendmarc.conf
Socket unix:/run/opendmarc/opendmarc.sock
添加套接字目录,并使其可以被运行 SMTP 服务器的用户(可能是 postfix 或 mail)访问
# mkdir /run/opendmarc # chown opendmarc:postfix /run/opendmarc
为自动创建此套接字目录,请创建文件 /etc/tmpfiles.d/opendmarc.conf,内容如下
D /run/opendmarc 0750 opendmarc postfix
要以 SMTP 服务器用户的身份运行 opendmarc.service(默认是 opendmarc:mail),请创建 /etc/systemd/system/opendmarc.service.d/override.conf
[Service] Group= Group=postfix
inet:9999@10.0.0.4,其中 10.0.0.4 是一个在 9999 端口监听的可选客户端(默认是 0.0.0.0)。- 启用/启动
opendmarc.service。
Postfix 集成
将以下行添加到 main.cf
/etc/postfix/main.cf
non_smtpd_milters = unix:/run/opendkim/opendkim.sock, unix:/run/opendmarc/opendmarc.sock smtpd_milters = unix:/run/opendkim/opendkim.sock, unix:/run/opendmarc/opendmarc.sock
确保 DMARC milter 在 DKIM milter 之后声明。
DMARC 记录
要为某个域启用 DMARC,请在其 DNS 区域中添加新的 TXT 记录。以下是一个 DMARC 策略的示例,它会逐步处理。
首次测试,无害,因为(子)策略为 "none",但开始接收聚合报告和失败报告(SPF 和 DKIM)
_dmarc.example.com TXT v=DMARC1; rua=mailto:postmaster@example.com; ruf=mailto:forensic@example.com; adkim=s; fo=1
在分析了这些报告一段时间后,启用该策略,例如,用于 10% 的电子邮件流量。
_dmarc.example.com TXT v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com; ruf=mailto:forensic@example.com; adkim=s; fo=1; pct=10
然后逐渐提高百分比,最终将策略设置为 100% 启用,并且只发送失败报告
_dmarc.example.com TXT v=DMARC1; p=quarantine; ruf=mailto:forensic@example.com; adkim=s; fo=1
DMARC 选项详解
除非是 "v",否则所有字段都是可选的,但 "v" 是推荐的。
| 标签名称 | 目的 | 示例 |
|---|---|---|
| v | 协议版本 | v=DMARC1 |
| p | 组织域策略(默认 "none") | p=quarantine |
| sp | 子域策略("p" 字段的默认值) | sp=reject |
| rua | 聚合报告的报告 URI | rua=mailto:postmaster@example.com |
| ruf | 详细报告的报告 URI | ruf=mailto:forensic@example.com |
| adkim | DKIM 的对齐模式(默认 "r") | adkim=s |
| aspf | SPF 的对齐模式(默认 "r") | aspf=r |
| ri | 聚合报告的报告间隔(默认 "86400" ; 经常被忽略为默认值) | ri=86400 |
| fo | 详细报告选项(默认 "0") | fo=1 |
| rf | 报告格式。(默认 "afrf") | rf=afrf |
| pct | 受过滤影响的消息百分比(默认 100) | pct=20 |
DKIM 和 SPF 的对齐模式可以是
- "s" 表示严格:表示“严格”。来自 From: 的域应与 DKIM/SPF 标识符匹配。
- "r" 表示放松:表示“放松”。来自 From: 的组织域和 DKIM/SPF 应匹配。
后者允许“From”头中存在子域,而前者则不允许。
域策略 (p) 和子域策略 (sp) 可以是
- "none" (用于监控模式)
- "quarantine" (隔离)
- "reject" (拒绝)
详细报告选项是
- "0" 在所有底层认证机制(SPF 和 DKIM)未能产生 DMARC 通过结果时生成报告
- "1" 在任何机制(SPF 或 DKIM)失败时生成报告
- "d" 在 DKIM 签名验证失败时生成报告
- "s" SPF 失败时。
外部链接
- DMARC Inspector
- IETF RFC 7489
- dmarc_report — 用于从电子邮件 XML 报告生成干净 DMARC 报告的命令行工具。