有许多教程介绍如何在您最喜欢的 Linux 版本上设置 OpenDMARC,但它们都侧重于单服务器配置。我的目标是保留备份辅助 MX 服务器,但强制执行RejectFailures true
DMARCp=reject
才能真正满足要求。
这导致了一个问题:示例配置TrustedAuthservIDs HOSTNAME
包含上游 SPF 和 DKIM 源。如果将其用于列出辅助 MX 服务器,则可以使用单个伪造的标头完全绕过主 MX 上的 OpenDMARC 检查。
Authentication-Results: <HOSTNAME>;
dkim=pass (1024-bit key; unprotected) header.d=example.com [email protected];
如何在不出现此缺陷的情况下配置主 MX 和辅助 MX 之间的信任?
这是另一个的重写问题在 Security Stack Exchange 上了解服务器故障的范围。
答案1
简而言之:
- OpenDMARC 可以而且应该独立检查 SPF。
- OpenDKIM 必须验证签名,即使它已经“验证”过。(在单个 MX 上也是如此!)
- MX 服务器之间的信任不应该依赖于标头,而应该依赖于 SMTP 连接。
如何配置?
您可以按照教程进行 (SPF、) OpenDKIM 和 OpenDMARC 的初始配置。
(此后,Postfix 已将 OpenDKIM 和 OpenDMARC 配置为 SMTP 过滤器。)
开放DMARC所有 MX 服务器的配置更改
/etc/opendmarc.conf
:使用 OpenDMARC milter 进行连接阶段拒绝(默认为
false
):RejectFailures true
不要信任来自 pypolicyd-spf 或其他替代产品的外部 SPF 检查。执行自己的检查:
SPFIgnoreResults true SPFSelfValidate true
OpenDKIM即使标题已经存在,也必须进行配置才能添加标题。
/etc/opendkim.conf
:AlwaysAddARHeader yes
一旦每个 MX 都配置了 #1-#3,主 MX 上的 OpenDMARC可以信任其他 MX 服务器所做的检查;伪造的邮件应该已经被辅助 MX 拒绝。不要将它们列在 上
TrustedAuthservIDs
,因为它容易受到报头伪造的攻击。还有另一种opendmarc.conf
更适合这种情况的选项:IgnoreHosts
(细绳)指定包含主机名、IP 地址和/或 CIDR 表达式列表的文件路径,这些列表标识了过滤器将忽略其 SMTP 连接的主机。如果未指定,则默认为
127.0.0.1
仅。IgnoreHosts /etc/opendmarc-ignorehosts.conf
...并在新配置文件中列出辅助 MX 服务器的 IP 地址。