Postfix で DKIM の署名に対応する

先ほどは、メールサーバを DKIM の検証に対応させたが、引き続き DKIM の署名を行うようにしてみた。

今回は送信するメールについて、署名を行うので、まずは DNS サーバの設定から行う必要があった。
※ DNS サーバの設定は省略。
※以下では、例として example.com を用いる。

  • 前提
    OS : Debian GNU/Linux 5.0 lenny
    MTA : Postfix 2.5.5
    すでに DKIM の検証に対応していること。
    メールユーザからのメール送信は、サブミッションポートを使用していること。
    ゾーン情報を自由に変更できる DNS サーバで対象ドメインを運用していること。

  • 適当なディレクトリで、署名に必要な秘密鍵と公開鍵を作成する
    $ mkdir test
    $ chmod 700 test
    $ cd test
    $ dkim-genkey -b 1024 -d example.com -s test01
    ※ドメイン example.com 、セレクタ test01 で作成。

    $ chmod 600 test01.private
    ※ test01.private: 秘密鍵
    ※ test01.txt: 公開鍵 (この情報を DNS サーバの該当ゾーンファイルに登録する)

  • 適切なディレクトリに、秘密鍵をコピーする。
    # mkdir /etc/opt/dkim-filter
    # cp test01.private test01.txt /etc/opt/dkim-filter
    # chown -R dkim-filter:dkim-filter /etc/opt/dkim-filter
    # chmod 700 /etc/opt/dkim-filter
    ※公開鍵もコピーしているが、管理をわかりやすくするためで必須ではない。

  • 公開鍵の内容を以下の通り example.com のゾーンファイルに定義
    _policy._domainkey 600 IN TXT "t=y; o=~"
    test01._domainkey 600 IN TXT "v=DKIM1; g=*; k=rsa; p=公開鍵"

    ※ TTL は 600 秒でテスト。
    ※「_policy._domainkey」の「t=y」はテストモードであること、「o=~」は、署名されていないメールも送出される可能性があることを示す。

  • /etc/dkim-filter.conf の該当部分を以下のようにする
    Domain example.com
    KeyFile /etc/opt/dkim-filter/test01.private
    Selector test01
    Mode sv
  • /etc/postfix/main.cf
    以下を追加する。
    non_smtpd_milters = inet:127.0.0.1:60001

    ちなみに DKIM 関係の部分は以下の通り。
    smtpd_milters = inet:127.0.0.1:60001
    non_smtpd_milters = inet:127.0.0.1:60001
    milter_default_action = accept
    ※本当は、master.cf の方で設定すべきなのだろうと思う。

  • サービスの再起動
    /etc/init.d/bind9 restart
    /etc/init.d/dkim-filter restart
    /etc/init.d/postfix restart

  • 確認
    dig で設定したレコードが引けるか確認。
    GMail にメール送信して、ちゃんと DKIM が Pass しているかヘッダを確認。

  • 不明点
    今回は単一ドメインのみだったが、バーチャルドメインなどの場合は、秘密鍵と公開鍵の扱いは、各ドメインにそれぞれ 1 つずつではなく、メールサーバ単位で 1 つとなるのだろうか。
    ※ /etc/dkim-filter.conf で「Domain example.com,example.net」という風にすると、両方のドメインで署名が付いたことは確認した。

    追記
    複数ドメインへの対応は、KeyList を使うことで、別々の鍵を使えることを確認した。詳しくはこちら

  • 参考にさせて頂いたページ

■修正

  • 一部修正 (2011/12/21)
  • DNS のゾーンに登録するポリシー名が間違っていたのを修正 (2012/01/10)

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*