OpenDKIMの検証動作設定

概要

OpenDKIMのインストール、基本設定はさまざまなサイトで紹介されていて比較的簡単に実装が可能です。
今回はOpenDKIM実装時のDKIM検証動作の設定を検証してみます。

環境

OSCentOS Linux 7
SPFopendkim-2.11.0

DKIM検証動作

設定項目

OpenDKIMでは署名の検証結果に対する動作を下記設定で指定できます。
OpenDKIMのデフォルトのコンフィグファイルでは下記指定は記載がないので、何も変更しなければデフォルトで動作します。
コンフィグに追記することで動作を変更することが可能です。

パラメータ デフォルト値 説明
On-Default - 他のOn-の設定に先立って実行される動作
On-BadSignature accept 署名の検証に失敗した場合に取られるアクション
On-DNSError tempfail DNSエラー発生時に取られるアクション
On-InternalError tempfail 内部エラー発生時に取られるアクション
On-KeyNotFound accept DNS上に公開鍵が見つからない場合に取られるアクション
On-NoSignature accept 受信したメールにDKIM署名が無い場合に取られるアクション
On-Security tempfail セキュリティ上の問題を含むメールを受信した場合に取られるアクション
On-SignatureError reject メール送信時の署名に失敗した場合に取られるアクション

★印の項目について実際に動作を確認しました。

  • On-Default

On-Defaultは他のOn-設定が明示的に設定されていない場合の動作を指定します。
On-Defaultを指定しない場合には署名の無いメールはデフォルトでOn-NoSignature (accept)の為受信しますが、On-Defaultを「reject」にして他は設定せず、デフォルトの状態で署名なしメールを受信した場合には、メールとログに「no signature data」と表示され、メールは拒否されます。

Jul 14 14:58:02 mail01 opendkim[6096]: 1CAC41010D90: no signature data
Jul 14 14:58:02 mail01 postfix/cleanup[6083]: 1CAC41010D90: milter-reject: END-OF-MESSAGE from example.co.jp[XXX.XXX.XXX.XXX]: 5.7.0 no DKIM signature data; from=<root@example.co.jp> to=<test@example.com> proto=ESMTP helo=<mail.example.co.jp>

On-Defaultに「reject」を指定したまま、「On-NoSignature accept」を明示的に指定した場合には、「no signature data」のログが出力されますが、正常に受信されます。

Jul 14 15:03:07 mail01 opendkim[6129]: C64881010D90: no signature data
Jul 14 15:03:07 mail01 postfix/local[6140]: C64881010D90: to=<test@example.com>, relay=local, delay=0.06, delays=0.05/0/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)

  • On-BadSignature

メールが改竄されている、DNSサーバに登録されている公開鍵が間違っている時等の動作を指定します。
On-BadSignaturが「accept」の場合に署名が不正なメールを受信した時、メールログに「bad signature data」と表示されますが「accept」なので受信されます。

Jul 13 12:35:02 mail01 opendkim[5393]: 49CD91010D90: bad signature data

しかし、受信したメールヘッダにはDKIMの検証結果として「dkim=fail」と追記されます。failの理由も「reason="signature verification failed"」として追記されています。

Authentication-Results: mail01.example.com;
        dkim=fail reason="signature verification failed" (2048-bit key) header.d=example.co.jp

メールクライアント等でDKIMの検証結果「dkim=fail」を読み取り、迷惑メールフォルダ等に振り分けされます。

On-BadSignatureを「reject」にした場合、メールログに「5.7.0 bad DKIM signature data」と表示され、拒否されます。

Jul 13 12:39:59 mail01 opendkim[4377]: 1D65C1010D7F: bad signature data
Jul 13 12:39:59 mail01 postfix/cleanup[4387]: 1D65C1010D7F: milter-reject: END-OF-MESSAGE from example.co.jp[XXX.XXX.XXX.XXX]: 5.7.0 bad DKIM signature data; from=<root@example.co.jp> to=<test@example.com> proto=ESMTP helo=<mail.example.co.jp>

  • On-KeyNotFound

受信したメールに署名がついているのにDNSに公開鍵が登録されていない(セレクタが間違っている)場合等の動作を指定します。
On-KeyNotFound が「accept」の場合メールログに「record not found」と表示されますが「accept」なので受信されます。

Jul 13 12:54:53 mail01 opendkim[4465]: 1F3FB1010D90: key retrieval failed (s=examdkim2020, d=example.co.jp): 'examdkim2020._domainkey.example.co.jp' record not found

受信したメールヘッダにはDKIMの検証結果として「dkim=fail」と追記されます。理由も「reason="key not found in DNS"」と追記されています。

Authentication-Results: mail01.example.com;
        dkim=fail reason="key not found in DNS" (0-bit key) header.d=example.co.jp header.i=@example.co.jp header.b="GAlSi5AS"

On-KeyNotFoundが「reject」の場合、メールログに「record not found」と表示され、拒否されます。

Jul 14 12:12:20 mail01 opendkim[5874]: E11F51010D90: key retrieval failed (s=examdkim2020, d=example.co.jp): 'examdkim2020._domainkey.example.co.jp' record not found
Jul 14 12:12:21 mail01 postfix/cleanup[5951]: E11F51010D90: milter-reject: END-OF-MESSAGE from example.co.jp[XXX.XXX.XXX.XXX]: 5.7.0 DKIM key retrieval failed; from=< root@example.co.jp> to=< test@example.com> proto=ESMTP helo=< mail.example.co.jp>

  • On-NoSignature

受信したメールにDKIM署名がついていない場合の動作を指定します。
デフォルトではacceptですのでDKIM署名がついていなくても受信します。

Jul 14 15:02:27 mail01 opendkim[6129]: 476B91010D90: no signature data
Jul 14 15:02:27 mail01 postfix/local[6140]: 476B91010D90: to=<test@example.com>, relay=local, delay=0.21, delays=0.2/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)

受信したメールのヘッダには、そもそもDKIMの署名がないのでDKIM検証情報は付加されません。

On-NoSignatureを「reject」にした場合にはメールログに「no signature data」と表示され、メールは拒否されます。

Jul 14 14:58:02 mail01 opendkim[6096]: 1CAC41010D90: no signature data
Jul 14 14:58:02 mail01 postfix/cleanup[6083]: 1CAC41010D90: milter-reject: END-OF-MESSAGE from example.co.jp[XXX.XXX.XXX.XXX]: 5.7.0 no DKIM signature data; from=<root@example.co.jp> to=<test@example.com> proto=ESMTP helo=<mail.example.co.jp>

DKIM認証は送信者のなりすましやメールの改ざんを検知できるようにするものです。
しかし、メーリングリスト等ではメールヘッダを書き換えて転送する為、時々DKIM認証で問題が発生します。
基本的には検証に失敗しても拒否や破棄はせず、デフォルト設定のように不正なメールでもacceptとしてメールクライアント等で迷惑メール扱いする、署名以外の要因のエラーはtempfailとしてMTAの再送期間中に問題が解決されるのを期待するのがメールロストを防ぐという意味で安全かと思われます。

以上で「OpenDKIMの検証動作設定」は終了です。
スルーしている設定はお察しください。

技術情報

商標について

関連サービス

OSS導入支援

お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]

お問い合わせ