aig*_*mss 7 email debian exim dkim
花了 2 天时间试图告诉 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
Run Code Online (Sandbox Code Playgroud)
已创建文件
00_local_macros
Run Code Online (Sandbox Code Playgroud)
在
/etc/exim4/conf.d/main/
Run Code Online (Sandbox Code Playgroud)
具有以下内容:
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}}
Run Code Online (Sandbox Code Playgroud)
已发布文本 DNS 记录:
20160604._domainkey.example.com
Run Code Online (Sandbox Code Playgroud)
带有公钥的内容:
k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRpHpC2q1ycmaqdnYlf5WI5g7ZyiXybd6EFdOqk35Sl7ZNfSeZelbyxqgLN+BzHpbp4Z4JDtKLSgBwugCePhl2xVDtQvO9XfqwQLMO5PAOONCLTwoGYrViwf5ki2zIqS2uN5MpuRTKW/IiK3CtRId+w5gjdACAvkwZWBstKEDrQQIDAQAB
# update-exim4.conf
# service exim4 restart
Run Code Online (Sandbox Code Playgroud)
甚至重新启动了服务器。
所有电子邮件仍然在没有 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
Run Code Online (Sandbox Code Playgroud)
到某些论坛中建议的文件 /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
Run Code Online (Sandbox Code Playgroud)
更新
几乎所有的教程都是错误的。对于单文件 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
Run Code Online (Sandbox Code Playgroud)
多个域仍然不起作用。尝试了多种配置,但仍然没有成功。以下所有三个都不起作用:
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}}
Run Code Online (Sandbox Code Playgroud)
验证您是否正在使用remote_smtp
传输。这应该T=
在/var/log/exim4/mainlog
包含=>
. 由于未使用此传输,因此无法在本地发送的电子邮件上检查 DKIM。使用验证服务来检查您的邮件是否已签名,例如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
Run Code Online (Sandbox Code Playgroud)
验证您的私钥的权限。使用 Exim 运行时,它必须是可读的,用于 Debian 和 Ubuntu 安装的 Debian-exim。如果您的传输是 to dkim_strict
,则如果它无法对消息进行签名,它将重新排队消息。它会将失败原因记录到mainlog
和paniclog
。在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
Run Code Online (Sandbox Code Playgroud)
一旦您使用静态密钥进行签名。你可以试试这些改变
DKIM_PRIVATE_KEY = CONFDIR/${sender_address_domain}.private.201604
DKIM_SELECTOR = 20160604
DKIM_STRICT = false # optional - pass if no key available
Run Code Online (Sandbox Code Playgroud)
您可能需要查看:
归档时间: |
|
查看次数: |
5380 次 |
最近记录: |