私のDebian8サーバーにDKIM署名を追加するようにEximに指示するために2日間費やしました。失敗。多くのハウツー、フォーラムを読んだことがありますが、私のサーバーで実行可能な解決策はありません。
キーを生成しました:
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ファイルに存在する必要があります。できます!ただし、この構成は1つのドメインのみです。
DKIM_Canon = relaxed
DKIM_DOMAIN = example.com
DKIM_PRIVATE_KEY = /etc/exim4/dkim/example.com-private.pem
DKIM_SELECTOR = 20160604
#DKIM_STRICT = true
複数のドメインはまだ機能しません。複数の構成を試しましたが、まだ成功しませんでした。以下の3つはすべて機能しません。
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}}
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
秘密鍵の権限を確認してください。これは、EximがDebianおよびUbuntuインストール用のDebian-eximを実行するときに使用できるようにする必要があります。トランスポートの宛先が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
静的キーで署名すると、機能します。これらの変更を試すことができます
DKIM_PRIVATE_KEY = CONFDIR/${sender_address_domain}.private.201604
DKIM_SELECTOR = 20160604
DKIM_STRICT = false # optional - pass if no key available
次のことを確認してください。
これは私にとってはうまくいきます:
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.templateファイル単一ファイルのExim設定を使用する場合に配置する必要があり、多くのハウツーで述べられているように00_local_macrosまたは他のファイルに配置しないでください。
EximでDKIM署名を設定することは問題で(私は3日間を費やしました)、Exim開発者はそれを修正する必要があります。
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レコードなどを追加することでした。