2007年12月20日

ドメイン認証

仕事柄(?)yahooのアドレスを持っている人にメールを送ることが多いのですが、
よく迷惑メールフィルターに引っかかってしまいます。
X-YahooFilteredBulk: にも登録されてしまっていて
とりあえずどうすることも出来ず・・・

と思っていたのですが、はたと「Domainkeys」を思い出しまして、おもむろに設定を。

・・・が
これが結構大変でした(ほぼ丸二日)

なのでメモを残しておくことに。


環境
Fedora Core 6
Postfix 2.4.5
(他にamvisd-newとspamassassinがありますが今回はあまり影響しません)

希望
出来ればPerlは使いたくない。amavisdが相当メモリとCPUを食っているので。
今後のことも考えてmilterと、cで書かれたもので何とかしたい。
(ついでにamavisdをやめたい)

DKIMのインストール
今後主流になる(はず)のDKIMです。インストールしてからわかりましたがYahooではこれを認証してくれません(涙
ただ、Google(gmail)ではちゃんと見てくれるので、まるっきり無駄ではないわけで・・・

 パッケージの取得
 「dkim src rpm」とかでググって、拾ってくる。
 今回は、
 http://www.redhat.com/archives/fedora-package-review/2007-December/msg00202.html
 この記事あたりから。
 なぜソースかというと他にもいろんな情報があると思ったから
 &事前に調べた感じだとライブラリの依存関係がめんどくさそうだったから
 (ついでにCPUの最適化が出来れば、と)

 事前準備
 拾ってきたパッケージの依存関係から
 openssl関連とsendmailあたりが必要と(もちろん他もあるけどたいてい入ってるでしょう)
 たぶんopensslは普通に入っている可能性が高いけど、
 最初からpostfixでシステムを組むとsendmailが入っていない(or削除した)可能性があるので注意。
 後から入れる時はMTA切り替え用のソフトも入れておくこと。
 (試してはいないけどいきなりsendmailにかわられても困る)

 インストール。
 rpmbuild 〜
 rpm -Uvh 〜
 この辺はまあ普通に。

 鍵の生成
 このバージョンからか/usr/sbin/dkim-genkeyをつかう。
 よく「genkey.cshを使います」とありますが、やや情報が古いかも。
 /usr/sbin/dkim-genkey -d ドメイン名 -r -s セレクタ名 -t
 -r メールにしかこの鍵を使わない
 -t テストモード
  セレクタ名.txtとセレクタ名.privateができる

 dnsへ鍵の設置
 上の生成で出来た「セレクタ名.txt」をdnsに登録。このファイルはとっておいてもいいし、捨ててもイイ。
 セレクタ名.private はdkimユーザーが見られるところに設置(今回は/var/db/dkim-milter/にほおりこんだ)

 設定。
 /etc/mail/dkim-milterにconfファイルがあるけど、これを使おうとしてハマった(滅
 解決策は/etc/init.d/dkim-milterを直接書き直す
 
 SOCKET=
 TCPソケットを使いたいので、inet:xxxxx@localhost とする(xxxxxはポート番号)

 EXTRA_FLAGS=
 ここにconfファイルに書きそうなことをすべて書く。
 -l -d ドメイン名 -s セレクタ名 -k 公開鍵ファイル -u dkim-milterを動かすユーザー名
 -l ログをとる。

 start()
 daemon 〜を書き換え
 -daemon --user ${user} ${prog} -x ${config} -P ${pidfile} -p ${SOCKET} ${EXTRA_FLAGS}
+daemon --user ${user} /usr/sbin/${prog} -P ${pidfile} -p ${SOCKET} ${EXTRA_FLAGS}
 ※フルパスにしないと起動しない。
 ※configは使わないので消す。

 dkim-milterの起動。
 ログを見て「Sendmail DKIM Filter v2.4.0 starting 」があればok

 postfixの設定
 main.cfに追加。
 
 smtpd_milters = inet:localhost:xxxxx
 non_smtpd_milters = inet:localhost:xxxxx
 #出ていくメールと入ってくるメールの両方にmilterを通す。
 milter_default_action = accept
 #milterが動いていない場合などはそのまま通す。
 #dkimなどで受信拒否をしたい場合はともかく、企業の場合は通しておいた方が安全。
 
 postfixのリロード。

 sa-test@sendmail.comnetにテストメールを送って、
-----
Authentication System: DomainKeys Identified Mail
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/
-----
 こんな感じになればOK



 ・・・だったのですが、Yahooでは、Authentication-Results:の欄が(no sig)
 




 気を取り直してdk-milter
 パッケージの取得
 どこかしらからパッケージを拾ってくる or tar玉からビルド。
 ttp://kmlinux.fjfi.cvut.cz/~vokac/activities/milter/
 (直リンクは何となく微妙なので・・・)

 事前準備
 dkimをセットアップしたら依存関係はほぼ問題ないと思います

 インストール
 rpm -ivh dk-milter.src.rpm
 あとで必要になるファイル「gentxt.csh」があるので、ソースを展開しておきます。
 rpmbuild -bb dk-milter.spec
 パッケージをビルドします。
 rpm -Uvh dk-milter*.rpm

 鍵の生成
 展開したソースからgentxt.cshをコピー。
 ./gentxt.csh セレクタ名 ドメイン名
 セレクタ名はdkimのものと別にしておかないとハマります。
 実行するとコマンドラインにdns用の公開鍵が表示されますのでコピーしてどこかに保存します。
 セレクタ名.public は鍵だけのファイルなのであまり使いでがありません。

 鍵の設置
 公開鍵:dnsへの登録は先にコピーしたものを貼り付け。
 秘密鍵:セレクタ名.private をdk-milterのユーザーが見られるところにコピー
     (今回は/var/db/dk-milter/にほおりこんだ)


 設定
 /etc/init.d/dk-milterの「default variables」 をいじる。
 PORT="inet:xxxxy@localhost"
 SIGNING_DOMAIN="ドメイン名"
 SELECTOR_NAME="セレクタ名"
 (sysconfig でも良かったと後になって思ったが・・・)

 起動
 ログに「Sendmail DomainKeys Filter v0.5.0 starting 」などと出たらおk


 postfixの設定
 main.cfにさらに追加。
 
 smtpd_milters = inet:localhost:xxxxx inet:localhost:xxxxy
 non_smtpd_milters = inet:localhost:xxxxx inet:localhost:xxxxy
 milter_default_action = accept  

 postfix のリロード


 sa-test@sendmail.comnetにテストメールを送って、
-----
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: https://sourceforge.net/projects/domainkeys-milter/
-----
 こんな感じになればOK 


dnsの更新に時間がかかっている場合があるので、その場合はまつ。

1 コメント:

Hizumi さんのコメント...

参考にさせていただきました。おかげで,DKIM/Domainkeyを私も使えるようになりました。
ただ,テストメールの先は「sa-test@sendmail.com」でなく,「sa-test@sendmail.net」ではないでしょうか。
ありがとうございました。

Stop Rokkasho !!!