Postfix で DKIM の署名に対応する
先ほどは、メールサーバを DKIM の検証に対応させたが、引き続き DKIM の署名を行うようにしてみた。
今回は送信するメールについて、署名を行うので、まずは DNS サーバの設定から行う必要があった。
※ DNS サーバの設定は省略。
※以下では、例として example.com を用いる。
今回は送信するメールについて、署名を行うので、まずは 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
※本当は、master.cf の方で設定すべきなのだろうと思う。
non_smtpd_milters = inet:127.0.0.1:60001
milter_default_action = accept - サービスの再起動
/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)