OpenDKIM 邮件过滤服务器未对中继邮件进行签名

OpenDKIM 邮件过滤服务器未对中继邮件进行签名

我使用 OpenDKIM 在我的 Postfix 服务器上签名邮件。当使用 SMTPS 从其原始域(假设example.com)发送时,它按预期工作。但是,来自 LAN 上的 SMTP 客户端的邮件未被签名。所述客户端没有来自同一来源域(例如client1.lan),但被转换为smtp_generic_maps同一来源(具体而言[email protected])。理想情况下,我想签名该外发邮件。

在 /etc/postfix/main.cf 中我有:

smtpd_milters = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/var/run/opendkim/opendkim.sock

在 /etc/opendkim.conf 中我有:

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts

在 /etc/opendkim/TrustedHosts 中我有:

::1
127.0.0.1
localhost
ip6-localhost
ip6-loopback
mail
10.0.0.0/24
*.lan

答案1

在 Postfix 中确保/etc/postfix/main.conf包含:

milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} {auth_type}

这将确保来自经过身份验证的用户的邮件将由 OpenDKIM 签名。根据文档:

除非邮件符合签名标准,否则邮件将被验证,签名标准包括:(1) From: 地址上的域(如果存在)必须由 -d 命令行开关或域配置文件设置列出,以及 (2)(a)连接到 MTA 的客户端必须经过身份验证,或 (b) 连接到 MTA 的客户端必须在 InternalHosts 配置文件设置所引用的文件中列出(或在该选项的默认列表中),或 (c) 客户端必须连接到 MTAs 配置文件设置所命名的守护进程端口,或 (d) MTA 必须设置一个或多个与 MacroList 配置文件设置所设定的条件相匹配的宏。

对于上面的 (a),测试是 MTA 宏“{auth_type}”是否已设置且包含任何非空值。这意味着 MTA 必须在报头结束 (EOH) 阶段之前或期间将该宏的值传递给过滤器,以便测试其值。

答案2

如果要将它们中继并签名到其他域(基于标From:头),那么您必须使用SigningTableopendkim 上的配置映射这些其他域,您甚至可以通过匹配它们来分配不同的密钥和选择器KeyTable- 两者都指向不同的映射文件。

我遇到了类似的问题,但我可以通过查看邮件头来调试它 - 在那里你会找到中继服务器正在使用的确切主机名和 IP 地址,例如:

Received: from client1.lan (client1.localdomain [10.0.0.2]) by example.com 
          (Postfix) with ESMTPS id 71B8D10C1A68 for <[email protected]>;
          Sun, 12 Feb 2017 13:19:33 +0000 (UTC)

然后,您可以检查中继服务器是否正在使用内部网络、它正在使用哪个主机名以及它打算从哪个域发送电子邮件。

答案3

遇到了同样的问题:从远程主机发送的邮件没有得到签名。

解决方案很简单:只需将远程发送者的 IP 添加到/etc/opendkim/TrustedHosts

相关内容