#freeze
#contents
----
[[DomainKeys についてはこちら"DomainKeysって何? 
* 1. 必要なシステム構成 [#t7e86945]

 DomainKeys の利用にあたり sendmail が 8.13.0 以上かつ LIBMILTER に対応していなくてはいけません。このあたりは [[Sendmail への Sender ID 実装:http://pocketstudio.jp/linux/?MTA%2FAntiSPAM%2FSendmail%20%A4%D8%A4%CE%20Sender%20ID%20%BC%C2%C1%F5]] をご覧下さい。

 LIBMILTER の実装が終わったら、いよいよ dk-milter のセットアップです。


* 2. dk-milter のセットアップ [#a2710719]
 さて、sendmail の MILTER 対応を確認したら、いよいよ DomainKeys の利用のため dk-milter を実装します。

 DomainKeys 機能を使うためには [[sendmail.net:http://www.sendmail.net/]] で配布されている [[dk-milter:http://www.sendmail.net/dk-milter/]] モジュールを用います。

** 2-1. dk-milter って何?? [#i26950a8]

 dk-milter は DomainKeys の機能を sendmail に実装するものです。 SourceForge で開発が進んでいます。http://sourceforge.net/projects/sid-milter/

** 3-2. dk-milter のダウンロード [#wd98efae]

 [[SourceForge:http://sourceforge.net/projects/dk-milter/]] よりダウンロードします。&br;
 ページ半ばにある【 Latest File Releases 】にある【 Download 】をクリックしてダウンロードします。

 今日現在のバージョンは 0.3.0 です。ピンク色で色が付いている箇所が最新リリースのファイルです。Download dk-milter-0.3.0.tar.gz をクリックして、ダウンロード先を選びます。ここの例では wget で取得してみます。

 $ cd /usr/local/src
 $ wget http://jaist.dl.sourceforge.net/sourceforge/dk-milter/dk-milter-0.3.0.tar.gz

** 2-3. dk-milter のセットアップ [#f0c17b28]

 既に sid-milter のセットアップをしたことがあれば、ほとんど同じようにセットアップが可能です。

 2-2 項でファイルをダウンロードしたら、アーカイブを展開します。
 $ tar xfz dk-milter-0.3.0.tar.gz
 $ cd dk-milter-0.3.0

 次に libmilter.a の場所を確認しておきます。標準では /usr/lib/libmilter.a だと思いますが、環境によって異なると思うので、find などで確認が必要です。

 $ vi dk-filter/Makefile.m4

 ファイルを開いて、24 行目の confLIBDIRS のパスを必要に応じて書き換えます。libmilter.a が /usr/lib であれば
 dnl APPENDDEF(`confLIBDIRS', `-L/usr/local/sendmail/lib')
 こちらを
 APPENDDEF(`confLIBDIRS', `-L/usr/lib')
 このように書き換えておきます。(特に必要なければ記述は不要かもしれません)

 ここで dk-milter をコンパイルします。
 $ ./Build
 # su
 # ./Build install
 正常にコンパイルされていれば /usr/bin/dk-filter にファイルがコピーされます。

 # ls -l /usr/bin/dk-filter
 -r-xr-xr-x    1 bin      bin        165059 Jun 28 18:10 /usr/bin/dk-filter

** 2-4. sendmail.mc の編集と sendmail.cf 再構築 [#l3f423cb]
 sid-milter を sendmail が参照でいるように sendmail.cf を書き換えます。

 sendmail.cf を書き換えるためには、元となる sendmail.m4 ファイルを編集します。念のため、事前に両方バックアップを取っておくと良いでしょう。
 # cp -p sendmail.cf sendmail.cf.org
 # cp -p sendmail.m4 sendmail.m4.org

 sendmail.mc ファイルを開きます。
 # vi /etc/mail/sendmail.mc
 ファイルを開いたら末尾に
 INPUT_MAIL_FILTER(`dk-filter', `S=inet:8892@localhost')
 このような記述を追加します。

 なお、dk-filter と sid-filter は共存できます。ポート番号が重複しないよう、それぞれ変えるように注意してください。

 保存後、sendmail.cf を M4 マクロを使って生成します。
 # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
 (具体的には sendmail.cf に「O InputMailFilters=sid-filter」が追加されます)

* 3. dk-milter の運用 [#c40f2609]

** 3-1. 秘密鍵の設置 [#af9ac9ce]

 dk-filter のテスト確認は sid-filter より行程が増えます。

 DomainKeys の設定がまだでしたら、gentxt.csh を使うことで比較的簡単にゾーンファイルに記述する TXT レコードが出力されます。

※アーカイブを展開したディレクトリの中に README があります。バイナリファイルがある場合のパフォーマンス向上方法が書かれていました。興味のある方はどうぞ。

 [[公開鍵作成の前に行った秘密鍵:http://pocketstudio.jp/linux/?MTA%2FAntiSPAM%2FDomain%20Keys%A4%C3%A4%C6%B2%BF%A1%A9#cdf505fb]]を安全な場所に設置します。README では /var/db/domainkeys/名前.key.pem が例としてあげられていました。

 例にならってディレクトリを作成します。
 # mkdir /var/db/domainkeys
 # cp 秘密鍵.txt /var/db/domainkeys/server.key.pem
 あわせてパーミッションも変更し、root 以外は参照できなくしておきます。
 # chmod 600 -R /var/db/domainkeys


** 3-2. dk-milter の起動とオプション [#v754d0ef]

 起動は次のような書式です。
 # /usr/bin/dk-filter -l -p ソケットスペック -d ドメイン名(ホスト名) -s 秘密鍵の場所 -S セレクタ
 今回は次のように指定してみました。
- -p = inet:8892@localhost
- -d = nsx.pocketstudio.jp
- -s = /var/db/domainkeys/server.key.pem
- -S = betatest (セレクタって何?という場合は[[こちらを参照:http://pocketstudio.jp/linux/?MTA%2FAntiSPAM%2FDomain%20Keys%A4%C3%A4%C6%B2%BF%A1%A9#m7cc92b8]])

 # /usr/bin/dk-filter -l -p inet:8892@localhost -d nsx.pocketstudio.jp -s /var/db/domainkeys/server.key.pem -S betatest

 これで dk-milter が起動します。-l オプションはログの記録です。/var/log/maillog には起動した旨のログが残ります。

 Jun 28 18:33:22 nsx dk-filter[2871]: Sendmail DomainKeys Filter v0.3.0
 starting (args: -l -p inet:8892@localhost -d nsx.pocketstudio.jp 
 -s /var/db/domainkeys/server.key.pem -S betatest)

 ほかにもセレクタを用いている場合は複数起動します。

  ※詳しくは man dk-filter

 さらに、sendmail の再起動も必要です。SIGHUP を sendmail に送るか、Red Hat 系でしたら以下のように停止・再起動ができます。
 # /etc/rc.d/init.d/sendmail restart
 Shutting down sendmail:                                    [  OK  ]
 Starting sendmail:                                         [  OK  ]

 これで OK !、とりあえず。

 あとは、実際にメールを送信してみると、ログに次のような情報が記録されます。
 Jun 28 18:34:17 nsx sendmail[2907]: j5S9YH0W002907: Milter insert (1):
 header: DomainKey-Signature: a=rsa-sha1; s=betatest; d=nsx.pocketstudio.jp;
 c=simple; q=dns;\n\tb=QjFh0HvJ9Y(メール固有の情報・以下省略)

 実際に外部に配送されたメールには、ヘッダ情報に DomainKey-Signature: ヘッダが付与されていることが分かります。

 DomainKey-Signature: a=rsa-sha1; s=betatest; d=nsx.pocketstudio.jp;
 c=simple; q=dns; b=QjFh0HvJ9Y(以下メール固有の情報)

** 3-3. dk-filter の自動起動設定 [#kf384623]

 サーバ起動時に自動実行されるよう /etc/rc.d/rc.local ファイルに記述を追加しておきます。
 # dk-milter
 /usr/bin/dk-filter -l -p inet:8892@localhost -d pocketstudio.jp -s /var/db/domainkeys/server.key.pem -S betatest
(※運用サーバによって情報は異なります。このまま貼り付けても動きません。サーバ環境に応じてホスト名、秘密鍵の場所、セレクタを変更してご利用下さい)

** 3-4. エラー対策 [#s32855e4]

 smfi_opensocket() failed
 /var/db/domainkeys/server.key.pem: stat(): No such file or directory
 -s オプションで指定された場所に秘密鍵がありません。パスを再確認する必要があります。

 Sendmail DomainKeys Filter: Unable to bind to port xxx Address already in use
 Sendmail DomainKeys Filter: Unable to create listening socket on conn
 既に dk-filter プロセスが起動しています。一旦プロセスを終了させた後、再度 dk-filter を実行する必要があります。

 Milter (dk-filter): error connecting to filter: Connection refused by localhost
 Milter (dk-filter): to error state

 dk-filter が異常動作しているか停止しています。この間 DomainKey の発行はされません。dk-filter の再起動を行えば復帰できます。


** 3-5 DomainKeys の動作確認 [#dd019d5d]

 sa-test@sendmail.net 宛に適当なメールを送ると自動で結果が表示されます。

 Authentication System:       Domain Keys         
    Result:                   DK signature confirmed GOOD
    Description:              Signature verified, message arrived intact
    Reporting host:           sendmail.net        
    More information:         http://antispam.yahoo.com/domainkeys
    Sendmail milter:          http://www.sendmail.net/dk-milter
 このように【 DK signature confirmed GOOD 】とありますので、設定上は問題がない事が分かります。

* 4. 実運用時にはどうする? [#y06df058]

 正しく DomainKeys 認証されたメールにはヘッダ情報に
 Authentication-Results: ホスト名 from=メールアドレス; domainkeys=pass
 このように domainkeys=pass(通過)というヘッダ情報が埋め込まれます。

 正しいメールであるという証拠ですので、たとえば社内のメールのやりとりや、信頼しているサーバ間での通信で、安心だというメールボックスの振り分け、フラグや色づけなどを実施することで活用できそうです。

 まだ DomainKeys を導入しているのは、日本国内では殆どなさそうなので、逆に信頼性を高める役割を持つと思います。

* 5. 課題 - 外部からのメール中継(問題解決) [#vc4253df]

%%調査不足なのですが、サーバ内から mail コマンドなどで通す場合は DomainKey-Signature: ヘッダが付与されます。ですが、外部から中継(Relay)させた場合にはDomainKey-Signature: ヘッダが付きません。この点、要調査です。%%

 外部からのメール中継(Relay)の場合でも自動で DomainKeys を割り当てることが出来ました。通常の SMTP ポート 25 番を経由すると dk-filter はスルーしてしまいます。ですが、サブミッション・ポート(Mail Submission Agent)の TCP 587 番を使用してメール送信をすると、自動で DomainKey が作成(メールのヘッダ中に DomainKey-Signature: が自動挿入)されました。

 変更点は sendmail.mc の追加・修正です。

 DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
 DAEMON_OPTIONS(`Port=587, Name=MSA, M=Ea')dnl
 上記2点、ポートについての記述を書き換え sendmail.cf を再構築したところ、うまくいきました。



* 6.メモ [#t30661c4]

-[[複数の milter を導入する時は dk-milter を優先させなくてはいけない:http://sourceforge.net/mailarchive/forum.php?thread_id=7597159&forum_id=40869]]

-[[RedHat系init起動スクリプト:http://sourceforge.net/mailarchive/forum.php?thread_id=6005007&forum_id=40869]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS