我在 Debian sid 上使用 exim 4.82。我已经学习了几个关于如何配置 exim 以签署外发电子邮件的教程,但似乎有些事情没有按照应有的方式进行。
我的诊断是它$sender_address_domain
始终设置为服务器的主机名 ( /etc/hostname
),无论From:
电子邮件消息中的字段是什么。
我在 中定义了以下宏/etc/exim4/conf.d/transport/00_exim4-config_header
:
DKIM_CANON = relaxed
DKIM_DOMAIN = ${sender_address_domain}
DKIM_SELECTOR = dkim
DKIM_PRIVATE_KEY = /etc/exim4/dkim.private.key
Run Code Online (Sandbox Code Playgroud)
此当前设置对传出电子邮件进行签名,但 DKIM 签名中的域始终设置为euvps.rolisoft.net
,无论From:
字段如何。我最好的猜测是$sender_address_domain
设置为euvps.rolisoft.net
,当它应该设置为From:
字段中电子邮件地址的域时。
因此,验证失败并bad version
显示以下消息:
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=euvps.rolisoft.net; s=dkim; // <- d= should be set to whatever is in From
h=Date:Message-Id:From:Subject:To; bh=...; b=...;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of root@euvps.rolisoft.net designates 188.226.159.108 as permitted sender) smtp.mail=root@euvps.rolisoft.net;
dkim=neutral (bad version) header.i=@euvps.rolisoft.net;
dmarc=fail (p=NONE dis=NONE) header.from=seriesinfos.com
Run Code Online (Sandbox Code Playgroud)
DKIM_DOMAIN
手动设置为我要发送消息的域名解决了这个问题,并且 DKIM 签名变得有效。但是,我使用了多个域名,因此最好DKIM_DOMAIN
将 自动设置为我发送消息的任何电子邮件。
我没有像一些教程建议的那样设置自定义路由器和传输。(我曾经做过,但结果相同,所以我删除了它们。)
设置DKIM_DOMAIN
为${lookup{$sender_address}lsearch*@{/etc/exim4/dkim_senders}}
(dkim_senders
正确设置)不会对消息进行签名,但其中dkim_senders
没有euvps.rolisoft.net
,所以我猜这里$sender_address
也设置为euvps.rolisoft.net
,这就是缺少签名的原因。
我不确定如何调试$sender_address_domain
设置的内容。
尽管我仍然不确定为什么没有$sender_address
正确填充,但我找到了使用另一个变量来解决我的问题的解决方案:
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
Run Code Online (Sandbox Code Playgroud)
这会在 DKIM 签名上正确设置域名。
为了停止签署我没有密钥的域,我设置了另外两个宏:
DKIM_FILE = /etc/exim4/keys/${lc:${domain:$h_from:}}.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
Run Code Online (Sandbox Code Playgroud)
这些本质上只是寻找私钥/etc/exim4/keys/*domain*.pem
,如果不存在则不会签名。
归档时间: |
|
查看次数: |
5762 次 |
最近记录: |