#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]]