| Mizushima Network Service 〜Windows/日本語/無料で始める自宅サーバー〜 |
|---|
PostfixでDomainKeys/DKIM認証を実装しよう
前準備とインストール
PostfixでDomainKeys/DKIM認証を実装するために、dkfilterとdkimproxyを導入します。
dkfilter/dkimproxyはyumで提供されていないのでソースからインストールしてやる必要があります。
依存関係などで必要なPerlモジュールを先にインストールしておきましょう。
用意するモジュールは下記の通りです。
- Crypt::OpenSSL::RSA
- Digest::SHA
- Digest::SHA1
- Error
- Mail::Address
- MIME::Base64
- Net::DNS
- Net::Server
- Test::More
yumで提供されていない物もありますので、今回はcpanを使ってPerlモジュールを用意します。
| # cpan cpan> install Crypt::OpenSSL::RSA Digest::SHA Digest::SHA1 Error Mail::Address MIME::Base64 Net::DNS Net::Server Test::More |
各フィルターを使用するdkfilterというユーザーを作成しておきます。
ユーザーの作成はこちらを参照してください。
続いてdkimproxyとdkfilter本体をダウンロードしてきてインストールします。
# wget http://jason.long.name/dkimproxy/dkimproxy-0.15.tar.gz
# wget http://jason.long.name/dkfilter/dkfilter-0.11.tar.gz |
./configure --prefix= でインストール先を選択できます。
今回はdkimproxyを/usr/local/dkimproxyに、domainkeysを/usr/local/dkfilterとしました。
inbound filterの設定
inbound filterを設定していきます。
inbound filterは外から来るメールに対し、そのメールに付加されているDomainKeys/DKIMの署名が正しいか認証するためのフィルタです。
Domainkeysの認証の結果は、メールのAuthentication-Resultsヘッダに加えられます。
DKIMの認証の結果は、メールのX-DKIM-Authentication-Resultsヘッダに加えられます。
それぞれのヘッダにpassの文字が見えれば認証に成功したことを示します。
フィルタの設定はPostfix側で行います。
/etc/postfix/master.cfを編集します。
以下を追記してください。
| smtp inet n - n - - smtpd -o smtpd_proxy_filter=127.0.0.1:10025 -o smtpd_client_connection_count_limit=10 127.0.0.1:10026 inet n - n - - smtpd
127.0.0.1:10031 inet n - n - - smtpd |
outbound filterの設定
outbound filterの設定をしていきます。
outbound filterはメールを転送する際に署名を付けるフィルターになります。
尚、今回はdkimの署名のみを付加する設定とします。
dkimとdomainkeyを同時に利用しようとすると、わたしの理解力ではどうしても後から署名を付けた方が検証に失敗してしまうからです。
では、dkimproxyのインストール先ディレクトリに秘密鍵と公開鍵を作成しましょう。
| # cd /usr/local/dkimproxy # openssl genrsa -out private.key 1024 # openssl rsa -in private.key -pubout -out public.key |
続いてDNSサーバーのtxtレコードにポリシーとセレクターを追加します。
まずはポリシーです。
_domainkey.mizushima.ne.jp. 60 IN TXT "t=y; o=~; n=http://mizushima.ne.jp/MailStructure/sender_certification/DomainKeys-DKIM/;
r=mns@mizushima.ne.jp;"
t=y テストモードを示します。
o=~ 全てのメールにDomainKeysの署名を付加することを示します。
n=http://mizushima.ne.jp/MailStructure/sender_certification/DomainKeys-DKIM/ メモ欄です。記入は任意です。
r=mns@mizushima.ne.jp 何かあった時の連絡先です。ここも任意です。
続いてセレクターです。
selector1._domainkey.mizushima.ne.jp. 300 IN TXT "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQ〜以下略"
ここでselector1というのはセレクターと呼ばれる物で、outbound filterを起動する時に同じセレクターを指定します。
k=rsaが鍵の種類です、現在はrsaしか利用できません。
t=yはテストモードを示します。
p=MIGfMA0GCSqGSIb3DQ〜が先ほど作成した公開鍵/usr/local/dkimproxy/pulic.keyの中身です。
うちの例を参考にしてください。
| $TTL 86400 @ IN SOA mizushima.ne.jp. root.mizushima.ne.jp. ( 2006092301 3600 900 604800 86400 ) IN NS mizushima.ne.jp. IN MX 10 mizushima.ne.jp. @ IN A 121.1.228.232 _domainkey.mizushima.ne.jp. 60 IN TXT "t=y; o=~; n=http://mizushima.ne.jp/MailStructure/sender_certification/DomainKeys-DKIM/; r=mns@mizushima.ne.jp;" selector1._domainkey.mizushima.ne.jp. 300 IN TXT "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQ〜以下略" |
編集が完了したらBINDを再起動させます。
| # /etc/rc.d/init.d/named restart |
今の設定が正しいか確認します。
ポリシーの確認はhttp://domainkeys.sourceforge.net/policycheck.htmlでできます。

ドメインを入力し、Submitをクリックします。

This selector appears valid.の文字が確認できれば設定はOKです。
セレクターの確認はhttp://domainkeys.sourceforge.net/selectorcheck.htmlでできます。

セレクタ名._domainkey.mizushima.ne.jpを入力し、submitをクリックするだけでOKです。

This selector appears valid.の文字が確認できれば設定はOKです。
引き続き、再びPostfixの設定をします。
設定はinboundと同様/etc/postfix/master.cfです。
下記の内容を追記してください。
|
#ポート587=サブミッションポートに入ってきたメールに署名します #ポート465のSSL接続で入ってきたメールに署名します dksign unix - - n - 10 smtp 127.0.0.1:10028 inet n - n - 10 smtpd |
dkimproxyとdkfilterの起動スクリプトが、dkimproxy,dkfilterを解凍したディレクトリに用意されています。
これを/etc/rc.d/init.d/にコピーして、ディレクトリやホスト名を編集しておきましょう。
| # cd # mv ./dkimproxy-0.16/sample-dkim-init-script.sh /etc/rc.d/init.d/dkimproxy # mv ./dkfilter-0.11/sample-dkfilter-init-script.sh /etc/rc.d/init.d/dkfilter |
Webmin上のシステムから、起動およびシャットダウンをクリックします。
dkfilterとdkimproxyが見えますね。
やることは同じですので、ここではdkimproxyの例だけ示します。
dkimproxyをクリックしてください。
まずはインストールディレクトリです。
dkimproxyの方は、DKIMPROXYDIR=/usr/local/dkimproxy
dkfilterの方は、DKFILTERDIR=/usr/local/dkfilter
HOSTNAMEとDOMAINも使用しているのものにあわせてください。
起動時に開始しますか?を、はい、にチェックを入れます。
保存をクリックし、設定を保存します。
それからもう一度この画面に戻ってきて、今すぐ開始をクリックしてください。
最後にBINDとPostfixに編集した内容を反映させます。
| # /etc/rc.d/init.d/named restart # postfix reload |
では実際にメールを送信してみましょう。
ただしDKIMの署名はサブミッションポート587,あるいはSMTPS465で入ってきたメールのみ署名されます。
メーラーの設定を変更するのを忘れないでくださいね。
sa-test@sendmail.netにメールを送信すると自動で返事が来ます。
このとき件名と本文に何かしら、testとでも書き込んでから送信しないと認証に失敗します。
私はこれが分からず、ずいぶん長いこと苦しみました。(ずっと空メールでテストしていたのです)
DKIMの認証に成功していれば、返信されるメール本文には以下のような内容があるはずです。
Authentication System: DomainKeys Identified Mail
Authentication System: Domain Keys
Result: DKIM signature confirmed GOOD
Description: Signature verified, message arrived intact
Reporting host: sendmail.net
More information: http://mipassoc.org/dkim/
Sendmail milter: https://sourceforge.net/projects/dkim-milter/
Result: (no result present)
Reporting host:
More information: http://antispam.yahoo.com/domainkeys
Sendmail milter: https://sourceforge.net/projects/domainkeys-milter/
DomainKeys Identified Mail=DKIMにGOODの文字が見えればOKです。
Domain Keysは今回署名をつけられませんでしたので、ここはGOODの文字は見えないはずです。
以上です。
お疲れ様でした。


