如何将 Exim 信封域设置为发件人域

如何将 Exim 信封域设置为发件人域

我已经在 Exim 上设置了 DKIM,域名设置如下:

DKIM_DOMAIN = ${sender_address_domain}

但是,域始终设置为同一个域(我的主域),这会导致在为其他域(我托管多个网站)发送电子邮件时,由于对齐而导致 DMARC 验证失败。

通过阅读文档,我认为 sender_address_domain 是信封地址,而不是发件人字段。我如何更改信封地址以使其与给定电子邮件的发件人字段匹配(我认为这也会使 SPF 对齐正确)?

此外,为了安全起见,是否可以有一个允许域的白名单,这样 Exim 就会拒绝发送发件人字段中包含其他域的电子邮件?

答案1

将重写规则添加到 Exim4 配置中:

*@+local_domains "${local_part}@${domain}" F

该规则重写 Envelope-from 标头以匹配 From 标头,从而使 DMARC 对齐正常工作。建议将其附加到部分末尾,以避免与当前规则冲突。

您可以在文件或文件的/etc/exim4/conf.d/rewrite/10_from_rewrite部分(对于 Debian)中找到此配置。这取决于您的配置类型——称为rewrite/31_exim4-config_rewriting/etc/exim4/exim4.conf.template单一整体或拆分 Exim4 配置文件可能需要运行命令update-exim4.conf

重新配置后使用重新启动 Exim systemctl restart Exim4


规则解释:

  • *=适用*@+local_domains于所有“local_parts”,例如用户。
  • +local_domains= 适用于 Exim4 服务器提供服务的所有域(在dc_other_hostnamesdc_readhost变量中定义),而不适用于其他域(重定向尝试等)。
  • ${local_part}@${domain}从发件人字段编写符合 RFC2822 的电子邮件地址。变量的描述见exim4 文档 – 字符串扩展。您可以只使用“$header_from:”,但地址格式应为“John Doe <[电子邮件保护]>”将会失败并且会因为“John Doe”部分而被记录到 paniclog。
  • F= 重写操作的目标字段是 Envelope-from。参见exim4 文档 – 地址重写

答案2

添加重写规则:

*       "${address:$header_from:}" F

从标题${address:$header_from:}中提取地址FromF意味着重写 Envelope-from 字段

在 Debian 中,可以通过创建诸如 的文件来添加此项/etc/exim4/conf.d/rewrite/10_from_rewrite。此规则重写发件人字段以匹配发件人标头,从而使 DMARC 对齐正常工作。


对于白名单,我们可以添加系统过滤器。首先创建过滤器文件(例如/etc/exim4/exim.filter):

# Exim filter

if not foranyaddress "domain1.com, domain2.com" ($thisaddress is "${domain:$header_from:}")
then fail "${domain:$header_from:} not permitted to send email" endif

然后在配置的主要部分的某处添加system_filter = /etc/exim4/exim.filter

我还没有找到在这个过滤器中使用 domainlist/local_domains 的任何方法。

相关内容