OpenDMARC

来自 ArchWiki

OpenDMARC 是域级消息认证、报告和一致性 (DMARC) 规范的一个开源实现。

DMARC 是一个邮件传输策略,已被一些常见的邮件服务提供商支持。它依赖于 Sender Policy FrameworkDKIM。DMARC 为外发邮件提供策略,并检查传入邮件是否符合该策略。该策略通过 DNS TXT 记录发布。详情请参阅 #DMARC 记录 章节。验证在一个守护进程中完成。更多信息请参阅 RFC:7489

安装

安装 opendmarc 软件包。

配置

主要配置文件是 /etc/opendmarc/opendmarc.conf

更改以下选项

/etc/opendmarc/opendmarc.conf
Socket                  unix:/run/opendmarc/opendmarc.sock

添加套接字目录,并使其可供 SMTP 服务器运行的用户访问(可能是 postfixmail

# 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
注意: 要在不同的机器上运行 DMARC 验证器,请将 Socket 字段更改为 inet:9999@10.0.0.4,其中示例主机在端口 9999 监听,可选客户端为 10.0.0.4(默认为 0.0.0.0)。

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 失败。

外部链接

https://github.com/gene-git/dmarc_report || dmarc_reportAUR