Postfix で DKIM 検証・署名に対応する (Debian 7)

Postfix と OpenDKIM を使用してのメールサーバ DKIM 対応について、Wheezy の場合の設定方法備忘録です。(とりあえず動くレベルです)

Squeeze までは、postfix + dkim-filter という構成で、DKIM への検証・署名に対応出来たのですが、Wheezy では dkim-filter パッケージが無くなっていました。

代替として opendkim パッケージを利用して設定が出来ましたのでそのメモです。

続きを読む

メールゲートウェイで DKIM 署名を追加する

Postfix で他のメールサーバからメールリレーをさせて、外に配送しているような場合、デフォルトではリレーしているサーバ (例えばメールのゲートウェイ) では DKIM の署名が付きません。

このリレーしているサーバで一括で署名を付ける場合は、下記のようにします。

※なお、本設定はゲートウェイとなるサーバ上で「Postfix で DKIM の署名に対応する」まで設定が出来ていることを前提としています。(別に検証には対応しなくとも良いので、「Mode s」でよい)

  • /etc/opt/dkim-filter/internal.list
    127.0.0.1
    aaa.bbb.ccc.ddd
    [xxxx:yyyy:zzzz::1]

    リレー元メールサーバのリストを列挙します。1 行目は自サーバ用、2 行目は IPv4 での指定例、3 行目は IPv6 での指定例です。

  • /etc/dkim-filter.conf
    InternalHosts		/etc/opt/dkim-filter/internal.list
    RemoveOldSignatures	yes

    ※念のため RemoveOldSignatures しておいた方が幸せになれるかも。

  • dkim-filter の再起動
    # /etc/init.d/dkim-filter restart

以上です。

Postfix で DKIM の署名に対応する (複数ドメインの場合)

前回はメールサーバを 単一ドメインについて DKIM の署名に対応させたが、1 つのメールサーバで複数のドメインを運用する際に、それぞれのドメインで別の署名を使うように設定を行った。

※以下では、例として example.com と example.net を用いる。

  • 前提
    OS : Debian GNU/Linux 5.0 lenny
    MTA : Postfix 2.5.5
    すでに DKIM の検証DKIM の署名に対応していること。
    それぞれ秘密鍵は準備しているものとする。

  • 適切なディレクトリに秘密鍵をセレクタ名でコピーする
    今回は、example.com では test01 というセレクタを使い、example.net では test02 というセレクタを使う。

    # cp -a test01.private test01
    # cp -a test02.private test02

    ※必ず、ファイル名をセレクタ名と一致させる。
    ※これらのファイルは、dkim-filter ユーザのみアクセス可能とする。

  • 適切なディレクトリに鍵リストを作成する
    今回は、/etc/opt/dkim-filter/key.list として以下を作成

    *@example.com:example.com:/etc/opt/dkim-filter/test01
    *@example.net:example.net:/etc/opt/dkim-filter/test02
  • /etc/dkim-filter.conf の該当部分を以下のようにする

    #Domain			example.com
    #KeyFile		/etc/opt/dkim-filter/test01.private
    #Selector		test01
    KeyList			/etc/opt/dkim-filter/key.list

    ※ Domain / KeyFile / Selector をコメント化する。
    ※鍵リストファイルを KeyList で指定する。

  • サービスの再起動

    # /etc/init.d/dkim-filter restart
  • 確認
    それぞれのドメインで正しく署名されているか確認する。

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

※一部修正 (2011/12/21)

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)

Postfix で DKIM の検証に対応する

VPS 上で動作しているメールサーバについて、DKIM の検証を行うようにしてみた。
今回は受信するメールについてのみチェックするだけなので、思っていたより簡単だった。

  • 前提
    OS : Debian GNU/Linux 6.0 squeeze (おそらく 5.0 lenny でも同様に設定可能)
    MTA : Postfix 2.7.1
  • dkim-filter をインストール
    # apt-get install dkim-filter
    # /etc/init.d/dkim-filter stop
  • Postfix と連携できるようにする
    • /etc/default/dkim-filter
      以下を追加する。
      ※ローカルホスト 60001 ポートで接続する例。
      ※ Debian の場合、Postfix が chroot で動作しているため、そのままではソケットで通信できない。
      SOCKET="inet:60001@localhost"
    • /etc/dkim-filter.conf
      検証のみおよびそのほかの諸設定。
      AutoRestart		yes
      AutoRestartRate	10/1h
      Background		yes
      Mode			v
    • /etc/postfix/main.cf
      以下を追加する。
      smtpd_milters = inet:127.0.0.1:60001
      milter_default_action = accept 
  • サービスの起動など
    # /etc/init.d/dkim-filter start
    # /etc/init.d/postfix restart
  • 確認
    GMail から設定したメールサーバへメールを投げてみて「Authentication-Results:」で Pass しているか見てみる。
  • 追記
    DKIM の署名にも対応させてみた。

※公開同時は、lenny に合わせて記載していたが、sqeeze リリース向けに内容を修正。(2011/12/21)