Exim4 未添加 DKIM 签名

Exim4 未添加 DKIM 签名

花了两天时间尝试告诉 Exim 在我的 Debian8 服务器上添加 DKIM 签名。没有成功。我读过很多指南和论坛,但都找不到任何可能的解决方案。

已生成密钥:

cd /etc/exim4/

openssl genrsa -out example.com-private.pem 1024 -outform PEM
openssl rsa -in example.com-private.pem -out example.com.pem -pubout -outform PEM

已创建文件

00_local_macros 

/etc/exim4/conf.d/main/ 

内容如下:

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}

已发布文本 DNS 记录:

20160604._domainkey.example.com

带有公钥的内容:

k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRpHpC2q1ycmaqdnYlf5WI5g7ZyiXybd6EFdOqk35Sl7ZNfSeZelbyxqgLN+BzHpbp4Z4JDtKLSgBwugCePhl2xVDtQvO9XfqwQLMO5PAOONCLTwoGYrViwf5ki2zIqS2uN5MpuRTKW/IiK3CtRId+w5gjdACAvkwZWBstKEDrQQIDAQAB

# update-exim4.conf
# service exim4 restart

甚至重启了服务器。

所有电子邮件仍未附带 DKIM 签名。

尝试添加以下行:

dkim_domain = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}
DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
dkim_sign_headers = true

按照某些论坛的建议,将其复制到文件 /etc/exim4/conf.d./transport/30_exim4-config_remote_smtp。没有成功。仍然没有 DKIM 签名。

exim4 -bV

Exim version 4.84_2 #2 built 13-Mar-2016 17:47:19
Copyright (c) University of Cambridge, 1995 - 2014
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2014
Berkeley DB: Berkeley DB 5.3.28: (September  9, 2013)
Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages DKIM PRDR OCSP
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch nis nis0 passwd
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
Configuration file is /var/lib/exim4/config.autogenerated

更新

几乎所有教程都是错误的。使用单文件 Exim 配置,DKIM 设置必须位于 exim4.conf.template 文件中。它有效!但只有一个域此配置:

DKIM_CANON = relaxed
DKIM_DOMAIN = example.com
DKIM_PRIVATE_KEY = /etc/exim4/dkim/example.com-private.pem
DKIM_SELECTOR = 20160604
#DKIM_STRICT = true

多个域名仍然不起作用。尝试了多种配置,但仍然没有成功。以下所有三个都不起作用:

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${sender_address_domain}
DKIM_FILE = /etc/exim4/dkim/{DKIM_DOMAIN}-private.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}


DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/dkim/${DKIM_DOMAIN}-private.pem} {/etc/exim4/dkim/${DKIM_DOMAIN}-private.pem}}

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
dkim_domain = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}

答案1

验证您正在使用传输。这应该在包含的行后面remote_smtp列出。由于未使用此传输,因此无法检查本地交付的电子邮件上的 DKIM。使用验证服务检查您的邮件是否已签名,例如T=/var/log/exim4/mainlog=>http://dkimvalidator.com

如果您正在使用remote_smtp_smarthost传输,则必须对其进行修改以包含 DKIM 签名。在具有拆分配置的 Debian/Ubuntu 计算机上,将以下内容附加到文件30_exim4-config_remote_smtp_smarthost

# DKIM setup copied from `30_exim4-config_remove_smtp`
# see: https://serverfault.com/a/782069/117087
.ifdef DKIM_DOMAIN
dkim_domain = DKIM_DOMAIN
.endif
.ifdef DKIM_SELECTOR
dkim_selector = DKIM_SELECTOR
.endif
.ifdef DKIM_PRIVATE_KEY
dkim_private_key = DKIM_PRIVATE_KEY
.endif
.ifdef DKIM_CANON
dkim_canon = DKIM_CANON
.endif
.ifdef DKIM_STRICT
dkim_strict = DKIM_STRICT
.endif
.ifdef DKIM_SIGN_HEADERS
dkim_sign_headers = DKIM_SIGN_HEADERS
.endif

验证私钥的权限。它必须可被 Exim 以 Debian-exim 为 Debian 和 Ubuntu 安装运行的用户读取。如果您的传输是dkim_strict,它将在无法签署消息时重新排队消息。它会将失败原因记录到 和mainlogpaniclog。在 中找到消息可能更容易paniclog

这些是使 DKIM 正常工作所需的设置。您似乎遗漏了一些。(我用同一个密钥为多个域签名。在尝试为不同的域使用不同的密钥之前,请先尝试使用单个密钥进行签名。)此配置应能防止传输发送未签名的电子邮件remote_smtp

DKIM_CANON = relaxed
DKIM_DOMAIN = ${sender_address_domain}
DKIM_PRIVATE_KEY = CONFDIR/dkim.private.20160604
DKIM_SELECTOR = ${extract{-1}{.}{DKIM_PRIVATE_KEY}}
DKIM_STRICT = true # optional - causes signing failures to defer (requeue)
#DKIM_SIGN_HEADERS = # Use default

使用静态密钥签名后,您可以尝试以下更改

DKIM_PRIVATE_KEY = CONFDIR/${sender_address_domain}.private.201604
DKIM_SELECTOR = 20160604
DKIM_STRICT = false # optional - pass if no key available

您可能想查看:

答案2

这对我有用:

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/dkim/${dkim_domain}-private.pem} {/etc/exim4/dkim/${dkim_domain}-private.pem}}

这些设置必须放在exim4.conf.模板文件如果你使用单文件 Exim 配置而不是像许多操作指南中所说的那样在 00_local_macros 或其他文件中。

在 Exim 中设置 DKIM 签名是一个问题(我花了 3 天时间),Exim 开发人员应该修复它。

答案3

Exim version 4.84_2 #2 built 25-Jul-2016 18:59:44

这对我有用,我处于完全相同的情况,exim4 没有添加 dkim 签名。

我编辑了该文件/etc/exim4/update-exim4.conf.conf,发现即使我使用拆分配置,配置文件也是错误的,所以我不得不更改此行:

dc_use_split_config='true'

然后我编辑了该10_exim4-config_transport-macros文件并在末尾添加了以下几行:

DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /etc/exim4/dkim/${lc:${domain:$h_from:}}.private.key
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
DKIM_SELECTOR = exim

前面的工作是生成私钥文件,添加TXT DNS记录等。

答案4

正如@BillThor 所建议的,设置智能主机发送方进行 DKIM 签名应该可以工作。

我终于可以看到我发送的消息的副本带有令人垂涎的DKIM-Signature带有该d=MY_DOMAIN片段的标题。

但是,我认为我的 Yahoo (smarthost) 邮箱可能仍然不满意我代表它发送邮件。我看到了 MY_DOMAIN 的公钥(因为我将其保存在 DNS TXT 记录中),但d=yahoo.ca在 mail-tester.com 收到的邮件中,

DomainKeys Identified Mail (DKIM) is a method for associating a domain name to an email message, thereby allowing a person, role, or organization to claim some responsibility for the message.

The DKIM signature of your message is:

    v=1;
    a=rsa-sha256;
    c=relaxed/relaxed;
    d=yahoo.ca;
    s=s2048;
    t=1592188362;
    bh=15pFrAvOGi+eHKJgB6psh6iIBCbvYSuhPj+wQn6C7Ss=;
    h=To:Subject:From:Date:References:From:Subject;
    
b=FJXwJU3U+W+Eo4xlupet4274ZKmQ22IaAbKZn7xAAwMICJ+2LqCgC3gSHh88u/ru06+Pty9UpLcue8t0A5INFumoQqyZ1CcPLELMNcEfY76QdH92AmFds61hY5y8alQ1vuZUmIEB9ZlYHmmlaN25gYzy6IbzJ2ccjGYqovrjPMMLBeD20U662ted2TcyVz3HoeG1aRo3zSf+FCsvgi70zw0fJVsrTQ8LOKXwzxPqtgS0scjXExEB9yJ5p8U9xwnGzED4uWvfSW9NNL5H8NsUpeAni4rU/ccYLNO8NgMcwUbDtfFP6VzwdfE+wOzm3tNQqUUNnUE5jPsL+6ysrO/wMw==

Your public key is:

"k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuoWufgbWw58MczUGbMv176RaxdZGOMkQmn8OOJ/HGoQ6dalSMWiLaj8IMcHC1cubJx2gziAPQHVPtFYayyLA4ayJUSNk10/uqfByiU8qiPCE4JSFrpxflhMIKV4bt+g1uHw7wLzguCf4YAoR6XxUKRsAoHuoF7M+v6bMZ/X1G+viWHkBl4UfgJQ6O8F1ckKKoZ5KqUkJH5pDaqbgs+F3PpyiAUQfB6EEzOA1KMPRWJGpzgPtKoukDcQuKUw9GAul7kSIyEcizqrbaUKNLGAmz0elkqRnzIsVpz6jdT1/YV5Ri6YUOQ5sN5bqNzZ8TxoQlkbVRy6eKOjUnoSSTmSAhwIDAQAB;
"

Key length: 2048bits

我怀疑这是由于我在 /etc/email-addresses 中的 exim4 中重写了本地用户的发件人地址,

LOCALUSER: [email protected]

我认为 mail-tester.com 在“您已正确验证身份”/“您的邮件已通过 DMARC 测试”下显示了有关放宽 DKIM 检查的更详细信息。细则失败显示如下。

Your DMARC record is set correctly and your message passed the DMARC test

DMARC DNS entry found for the domain _dmarc.yahoo.ca:

"v=DMARC1; p=reject; pct=100; rua=mailto:[email protected];"

Verification details:

    mail-tester.com; dkim=pass (2048-bit key; unprotected) header.d=yahoo.ca [email protected] header.b=FJXwJU3U; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=MY_DOMAIN header.i=@MY_DOMAIN header.b=X6s0Eqai; dkim-atps=neutral
    mail-tester.com; dmarc=pass header.from=yahoo.ca
    mail-tester.com; dkim=pass (2048-bit key; unprotected) header.d=yahoo.ca [email protected] header.b=FJXwJU3U; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=MY_DOMAIN header.i=@MY_DOMAIN header.b=X6s0Eqai; dkim-atps=neutral
    From Domain: yahoo.ca
    DKIM Domain: yahoo.ca

相关内容