web-dev-qa-db-ja.com

EximはDKIM署名を正しく行いたくない

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

この現在の設定では送信メールに署名しますが、DKIM署名のドメインは、euvps.rolisoft.netフィールドに関係なく、常にFrom:に設定されます。 $sender_address_domaineuvps.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 [email protected] designates 188.226.159.108 as permitted sender) [email protected];
       dkim=neutral (bad version) [email protected];
       dmarc=fail (p=NONE dis=NONE) header.from=seriesinfos.com

DKIM_DOMAINをメッセージを送信するドメイン名に手動で設定すると、これが解決し、DKIM署名が有効になります。ただし、私は複数のドメイン名を使用しているので、DKIM_DOMAINを、メッセージの送信元の電子メールに自動的に設定するのが最適です。

いくつかのチュートリアルで示唆されているように、カスタムルーターとトランスポートを設定していません。 (ある時点で実行しましたが、同じ結果が得られたため、削除しました。)

DKIM_DOMAIN${lookup{$sender_address}lsearch*@{/etc/exim4/dkim_senders}}に設定すると(dkim_sendersが正しく設定されている場合)、メッセージに署名されないだけですが、dkim_sendersにはeuvps.rolisoft.netが含まれていないため、ここでは$sender_addresseuvps.rolisoft.netに設定されていると思います。これが署名の欠如です。

$sender_address_domainが何に設定されているかをデバッグする方法が正確にわかりません。

6
RoliSoft

なぜ$sender_addressが正しく入力されないのかはまだわかりませんが、別の変数を使用して問題の回避策を見つけました:

DKIM_DOMAIN = ${lc:${domain:$h_from:}}

これにより、DKIM署名にドメイン名が正しく設定されます。

キーのないドメインへの署名を停止するために、他に2つのマクロを設定しました。

DKIM_FILE = /etc/exim4/keys/${lc:${domain:$h_from:}}.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}

これらは基本的に/etc/exim4/keys/*domain*.pemで秘密鍵を探し、それが存在しない場合は署名しません。

4
RoliSoft