OpenDKIMの検証動作設定
概要
OpenDKIMのインストール、基本設定はさまざまなサイトで紹介されていて比較的簡単に実装が可能です。
今回はOpenDKIM実装時のDKIM検証動作の設定を検証してみます。
環境
OS | CentOS Linux 7 |
SPF | opendkim-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の検証動作設定」は終了です。
スルーしている設定はお察しください。
技術情報
関連サービス
お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]
お問い合わせ