Sender ID についてはこちら"Sender IDって何?"

1. Sendmail が LIBMILTER に対応していないといけない……

 Sender ID の機能を使うには sid-milter(sendmail.net)DomainKeys を使うには dk-miilter(sendmail.net):が必要です

 そのためには sendmail に LIBMILTER が組み込まれている必要があります。

 組み込まれているかどうかは【 sendmail -d0.10 】と入力してデバッグ情報を表示して確認します。

 Fedora Core 4 の sendmail(8.13.4)は Compiled with( sendmail と一緒にコンパイルしたよ)と MILTER の表示が確認出来ます。

$ /usr/sbin/sendmail -d0.10
Version 8.13.4
 Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
                MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6

 この場合、sendmail の下準備は不要です。

 ただ、私が実際に運用しているメールサーバでは MILTER が導入されていませんでした……。

 Compiled with: LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND NETINET
                NETUNIX NEWDB QUEUE SCANF SMTP USERDB XDEBUG

 このような場合、sendmail をソースから構築しなおす必要があります。

2. sendmail の MILTER 対応化作業

2-1. ソースの入手

 sendmail のソースは sendmail.org より取得することが出来ます。今日現在は 8.13.4 が最新バージョンのようです。

 まずはソースをダウンロードします。wget があれば、簡単に取得できます。

$ cd /usr/local/src
$ wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.13.4.tar.gz
--xx:xx:xx--  ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.13.4.tar.gz
           => `sendmail.8.13.4.tar.gz'
Resolving ftp.sendmail.org... done.
Connecting to ftp.sendmail.org[209.246.26.22]:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /pub/sendmail ... done.
==> PORT ... done.    ==> RETR sendmail.8.13.4.tar.gz ... done.
 Length: 1,974,606 (unauthoritative) 

100%[========================================================>] 1,974,606     472.86K/s    ETA 00:00

xx:xx:xx (472.86 KB/s) - `sendmail.8.13.4.tar.gz' saved [1974606]

2-2. ソースの展開・ディレクトリ移動

$ tar xfz sendmail.8.13.4.tar.gz
$ cd sendmail-8.13.4

2-3. コンパイルからセットアップまでの流れ

 libmilter を有効にするためには、devtols/Sites/site.config.m4 の編集が必要になります。(参考)

 事前に sendmail 本体はバックアップを取っておくことをお勧めします。sendmail のプロセスを停止した後

# mv /usr/sbin/sendmail /usr/sbin/sendmail.org

 など、何かあっても元に戻せるように準備される事をおすすめします。

$ vi devtools/Site/site.config.m4

 vi などでファイルを新規作成します。ファイルには以下の行を追加します。

APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')

 次に sendmail 本体のコンパイル・インストールを行います。ディレクトリは先ほどと変わりません、sendmail-8.13.4 の中です。

$ cd sendmail
$ ./Build -c
$ su  (rootになります)
# ./Build install

 これで sendmail 本体のセットアップは完了です。

 sendmail を手動で起動させてみます。

# /usr/sbin/sendmail -bd -q1h

 デバッグモードで MILTER が含まれているか確認します。表示されていれば大丈夫です。

# /usr/sbin/sendmail -d0.10
Version 8.13.4
 Compiled with: DNSMAP LOG MATCHGECOS MILTER MIME7TO8 MIME8TO7

 はい、このように表示されましたので、出ていれば大丈夫です。

 次に libmilter のセットアップです(もしかしたら不要かもしれませんが、後々使うこともあるかもしれないので、この機会にインストールしておきます)。

$ cd libmilter
$ ./Build
$ su (rootになります)
# ./Build install

 これで LIBMILTER(libmilter.aがセットアップされます)

3. sid-milter のセットアップ

 さて、sendmail の MILTER 対応が完了したら、いよいよ Sender ID を実装します。

 Sender ID 機能を使うためには sendmail.net で配布されている sid-milter モジュールを用います。

3-1. sid-milter って何??

 「Sender-ID filter for sendmail」を略して「sid-filter」、とのことです。

 sid-milter はマイクロソフト社が提唱する Sender ID および pobox社による IP Authentication = SPF をサポートしています。

SourceForge で開発が進んでいます。http://sourceforge.net/projects/sid-milter/

3-2. sid-milter のダウンロード

 SourceForge よりダウンロードします。
 ページ半ばにある【 Latest File Releases 】にある【 Download 】をクリックしてダウンロードします。

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

$ cd /usr/local/src
$ wget http://keihanna.dl.sourceforge.net/sourceforge/sid-milter/sid-milter-0.2.8.tar.gz

3-3. sid-milter のセットアップ

 3-2 項でファイルをダウンロードしたら、アーカイブを展開します。

$ tar xfz sid-milter-0.2.8.tar.gz
$ cd sid-milter-0.2.8

 ここで確認です。繰り返しになりますが sendmail 8.13.0(正確には Beta 3以降)のバージョンが必須です。これは MILTER を使用するにあたり 8.13 より実装された拡張 milter プロトコルを用いて Sender ID の動作を行わせるためです。

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

$ vi sid-filter/Makefile.m4

 ファイルを開いて、24 行目の confLIBDIRS のパスを必要に応じて書き換えます。libmilter.a が /usr/lib であれば

dnl APPENDDEF(`confLIBDIRS', `-L/usr/local/sendmail/lib')

 こちらを

APPENDDEF(`confLIBDIRS', `-L/usr/lib')

 このように書き換えておきます。(特に必要なければ記述は不要かもしれません)

 ここで sid-milter をコンパイルします。

$ ./Build
# su
# ./Build install

 正常にコンパイルされていれば /usr/bin/sid-filter にファイルがコピーされます。

$ ls -l /usr/bin/sid-filter
-r-xr-xr-x    1 bin      bin        181421 Jun 28 17:06 /usr/bin/sid-filter

3-4. sendmail.mc の編集と sendmail.cf 再構築

 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(`sid-filter', `S=inet:8891@localhost')

 このような記述を追加します。

 保存後、sendmail.cf を M4 マクロを使って生成します。

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
(具体的には sendmail.cf に「O InputMailFilters=sid-filter」が追加されます)

4. sid-milter の運用

4-1. sid-milter の起動とオプション

# /usr/bin/sid-filter -l -p inet:8891@localhost

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

Jun 28 17:15:26 nsx sid-filter[946]: Sendmail Sender-ID Filter v0.2.8 starting

 -p オプションでは SOCKETSPEC(どこにソケットを開くか)の指定ですが、指定が適切ではないと以下のようなエラーが表示されます。

sid-filter[938]: Sendmail Sender-ID Filter: unknown socket type tmp
sid-filter[938]: Sendmail Sender-ID Filter: Unable to create listening socket on conn tmp
sid-filter[938]: smfi_opensocket() failed

 ダメな実行例

# /usr/bin/sid-filter -l -p 8891@localhost
# /usr/bin/sid-filter -l -p local:/tmp/sid-milter.sock

 ※詳しくは man sid-filter

 さらに、sendmail の再起動も必要です。SIGHUP を sendmail に送るか、Red Hat 系でしたら以下のように停止・再起動ができます。

# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:                                    [  OK  ]
Starting sendmail:                                         [  OK  ]

 これで OK !

 あとは、送信されるメールにヘッダ情報が付与されます。

Authentication-Results: nsx.pocketstudio.jp from=root@nsx.pocketstudio.jp; sender-id=neutral; spf=neutral

 これはサーバ内から送信したものです。特に設定していないので neutral です。

 今度は外部(sv.pocketstudio.jp)から設定サーバ(nsx.pocketstudio.jp) にメールを送り返してみます。正しい認証なので、ログを見ても'sender-id=pass'通過, 'spf=pass'通過が記録されている事が分かります(/var/log/maillogより)。

Jun 28 17:40:24 nsx sendmail[1190]: j5S8eO4a001190: Milter insert (1):
header: Authentication-Results: nsx.pocketstudio.jp from=zem@pocketstudio.jp;
sender-id=pass; spf=pass

 こんどはわざと全然違うドメイン(From:)のメールを nsx.pocketstudio.jp 宛に送ってみます。

Jun 28 17:43:07 nsx sendmail[1204]: j5S8h7cx001204: Milter insert (1):
header: Authentication-Results: nsx.pocketstudio.jp from=zem@hotmail.co.jp;
sender-id=neutral; spf=neutral

 From: を hotmail.co.jp に設定してみました。ホスト名と IP アドレスの情報が一致しないので neutral(中立)として表示されています。

4-2. sid-filter の自動起動設定

 テストがうまくいけば、あとはサーバ起動時に自動実行されるよう /etc/rc.d/rc.local ファイルに記述を追加しておきます。

# sid-milter
/usr/bin/sid-filter -l -p inet:8891@localhost

5. さて、結局の所、どのように活用していけば良いのか

 とりあえず上記の手順で sid-milter を使った Sender ID の確認が行えるようになった。とはいえ、インターネット中の全サーバが Sender ID に対応していない現状では Sender ID の条件に一致しないからといって、闇雲にメールを排除させることもできない。

 一番実用的なところとしては、Becky などの振り分け設定でヘッダ【Authentication-Results:】に【sender-id=pass; spf=pass】という文字列があれば SPAM ではない(正確には偽装されたメールではない)という事が確認できる程度しかないかも……です。

 インターネット中の全サーバが、たとえば sendmail で標準で実装されるなどしたら状況は変わるかも知れませんが、現状ではちょっとスパム対策としては「ちょっと役に立たないかなー」という心境です。。。

 とはいえ!

 明らかに自ドメインに対する From: 詐称 SPAM もしくはフィッシング詐欺を目的としたメールは排除可能です。Becky などで色分けするなり、安全かそうでないか見分ける為に導入してみる価値はあるかもしれません。  

 


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Tue, 28 Jun 2005 18:36:30 JST (5521d)