web-dev-qa-db-ja.com

Exim4はDKIM署名を追加しません

私の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}}
7
aigffmss

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の場合、メッセージに署名できないとメッセージがキューに再登録されます。失敗の原因を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

次のことを確認してください。

5
BillThor

これは私にとってはうまくいきます:

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開発者はそれを修正する必要があります。

3
aigffmss

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レコードなどを追加することでした。

1
jllodra