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

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

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

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

  • 前提

    OS: Debian GNU/Linux 7 wheezy
    MTA: Postfix 2.9.6

    今回は dkim-filter から opendkim への置き換えと言うことで、あらかじめ秘密鍵や公開鍵は作成してあるものとします。
    また、公開鍵の内容はすでに DNS サーバに設定されているものとします。

  • OpenDKIM をインストール
    # apt-get install opendkim opendkim-tools
    # /etc/init.d/opendkim stop
  • DKIM 用秘密鍵と公開鍵の準備

    既に作成している前提なので、適当なディレクトリに、DKIM 用の秘密鍵と公開鍵をコピーします。
    今回は /etc/opendkim ディレクトリを作成してそこに以下のように設置しました。

    ・example.com ドメイン
    秘密鍵: test01
    公開鍵: test01.txt
    ※セレクタは test01

    ・example.net ドメイン
    秘密鍵: test02
    公開鍵: test02.txt
    ※セレクタは test02

    ※上記の秘密鍵は「opendkim」ユーザのみが読み書き可能とします。
    ※公開鍵はここでは使用しませんが、一応コピーしておきます。

    # mkdir /etc/opendkim
    # cp test01 /etc/opendkim
    # cp test01.txt /etc/opendkim
    # cp test02 /etc/opendkim
    # cp test02.txt /etc/opendkim
    # chmod 600 /etc/opendkim/test01 /etc/opendkim/test02
    # chown -R opendkim:opendkim /etc/opendkim

    念のため、DKIM 署名するドメインについて、DNS の該当ドメインのゾーンファイルで以下のような設定がされていることを確認します。(以下は example.com の場合)

    _policy._domainkey	IN	TXT	"o=~"
    test01._domainkey	IN	TXT	"v=DKIM1; g=*; k=rsa; p=公開鍵"
  • /etc/opendkim.conf ファイルを編集

    検証・署名など、諸設定を行います。

    Syslog				yes
    UMask				002
    OversignHeaders		From
    AutoRestart			yes
    AutoRestartRate		10/1h
    Background			yes
    SignatureAlgorithm	rsa-sha256
    Canonicalization	relaxed/simple
    Mode				sv
    SubDomains			no
    KeyTable			refile:/etc/opendkim/KeyTable
    SigningTable		refile:/etc/opendkim/SigningTable
    ExternalIgnoreList	refile:/etc/opendkim/TrustedHosts
    InternalHosts		refile:/etc/opendkim/TrustedHosts
  • /etc/opendkim/KeyTable ファイルを作成

    「セレクタ名._domainkey.ドメイン名 ドメイン名:セレクタ名:秘密鍵ファイル名」で記述します。

    test01._domainkey.example.com example.com:test01:/etc/opendkim/test01
    test02._domainkey.example.net example.net:test02:/etc/opendkim/test02
  • /etc/opendkim/SigningTable ファイルを作成

    「合致するメールアドレス セレクタ名._domainkey.ドメイン名」で記述します。

    *@example.com test01._domainkey.example.com
    *@example.net test02._domainkey.example.net
  • /etc/opendkim/TrustedHosts ファイルを作成

    とりあえず localhost を指定しておきます。

    127.0.0.1
    ::1
  • /etc/default/opendkim ファイルを編集

    以下を追加します。
    ※ローカルホスト 60001 ポートで接続する例。
    ※ Debian の場合、Postfix が chroot で動作しており、そのままではソケットで通信できない為。

    SOCKET="inet:60001@localhost"
  • /etc/postfix/main.cf ファイルを編集

    Postfix が OpenDKIM と連携出来るように設定します。

    smtpd_milters = inet:127.0.0.1:60001
    non_smtpd_milters = inet:127.0.0.1:60001
    milter_default_action = accept
  • サービスの起動・再起動

    OpenDKIM サービスの起動、Postfix の再起動を行います。

    # /etc/init.d/dkim-filter start
    # /etc/init.d/postfix restart
  • 確認

    GMail 等、DKIM 署名をしてくれるメールサーバから、今回設定したメールサーバへメールを投げてみて「Authentication-Results:」で「dkim=pass」となっているか確認します。

    今回設定したサーバから、DKIM 検証を行ってくれるメールサーバにメールを投げてみて、同様に受信側サーバで DKIM が Pass していることを確認します。

    ちなみに後者は、今回設定したサーバから「sa-testあっとまーくsendmail.net」に空メールを投げると、ちゃんと対応が完了しているか、メールで返送されてきたりします。

opendkim.conf と dkim-filter.conf のパラメータが非常に似ているので、比較的設定しやすかった印象です

・参考にさせていただいたページ
CentOS5.5 Postfix で DKIM ( OpenDKIM ) に対応する | clicktx::Tech::Memo
Postfix + dkim-milterからOpenDKIMに移行する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です