とーますメモ

Ruby on Rails / Goなどの学習メモ

【Postfix】DKIM設定時に、header_checksでFromを触っていると失敗(Fail)する

タイトルの件、そのまま。

自分の場合、
mailutilsのメールコマンドで、メール送信時に
Fromヘッダーを付けなくても、デフォルトの送信者名を付与するため
header_checks内でFromを以下のように変更していた。

/^From: {{ postfix_admin_mail_from }} (.*?)/ REPLACE From: {{ postfix_admin_mail_from }} ({{ postfix_admin_name }})

これが原因で、DKIM認証が失敗していた。


以下のページをより引用
Postfix opendkim and missing From header | Skull's blog

The presence of a “From” or “Sender” header within the email is mandatory for DKIM, otherwise the mail can’t be signed

つまりDKIMが電子署名作成するには、Fromヘッダが必要だが
DKIMの処理の流れが、以下なので

1. 送信者が送信メールのヘッダ+本文でハッシュ作成
2. ハッシュ + 秘密鍵で電子署名作成
3. 電子署名をDKIM-Signatureヘッダとして添付
4. メール送信
5. 受信者が受信メールのヘッダ+本文でハッシュ作成
6. DKIM-Signatureヘッダの電子署名から公開鍵でハッシュを復号
7. 受信者が作成したハッシュと比較する

Postfix + OpenDKIMで送信元ドメイン認証を実装するメモより引用

恐らく、header_checksがFromを書き換えるのは
2の後の「電子署名作成後」に、行われるためDKIMが失敗するものと勝手に納得した。
(※個人的見解なので、詳しい方がいらっしゃればコメントお願いします)

要は、header_checks自体を使用するのは構わないが
DKIM認証を使用する場合、Fromヘッダーを変更するのは辞めたほうがよいということ。

素直に、Fromヘッダーはメール送信時に設定すればよいという結論。

以下、mailutilsでのFromヘッダ付加例)

$ echo Dkim Test | mail -s "Test" -aFrom:'Admin <hoge@example.com>' to@example.com


[他参考]
DomainKeys Identified Mail (DKIM) and Postfix Header Checks | Gaia Environmental Sciences