OpenDMARC
OpenDMARC 是域级消息认证、报告和一致性 (DMARC) 规范的一个开源实现。
DMARC 是一个邮件传输策略,已被一些常见的邮件服务提供商支持。它依赖于 Sender Policy Framework 和 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
,其中示例主机在端口 9999 监听,可选客户端为 10.0.0.4(默认为 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=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” 表示严格:意味着“strict”。来自 From: 的域应与 DKIM/SPF 标识符匹配。
- “r” 表示宽松:意味着“relaxed”。来自 From: 和 DKIM/SPF 的组织域应匹配。
其中后者允许 “From” 标头中的子域,而前者不允许。
域策略 (p) 和子域策略 (sp) 可以是以下之一
- “none”(用于监视模式)
- “quarantine”
- “reject”
详细报告选项是
- “0”:如果所有底层身份验证机制(SPF 和 DKIM)都未能产生 DMARC 通过结果,则生成报告
- “1”:如果任何机制(SPF 或 DKIM)失败,则生成报告
- “d”:如果 DKIM 签名验证失败,则生成报告
- “s”:如果 SPF 失败。
外部链接
- DMARC 检查器
- IETF RFC 7489
- dmarc_report — 用于从电子邮件 XML 报告中生成干净的 DMARC 报告的命令行工具。