spam メイル対策で紹介した spam メイルの具体的な対策方法のうち,受け取った電子メイルをフィルタリングする,SpamAssassin について,導入方法などを紹介したいと思います.
SpamAssassin は,Justin Mason 氏によって,氏によってかつて書かれたフィルターを書き直す形で,2001 年頃に SourceForge.net にて開発が進められました.
特徴としては,Perl で書かれており,学習型の Bayesian filter を使ったフィルターを,個々人で調整でき,使えば使うほど精度が上がっていく,という点です.
主に,サーバサイドにインストールし,受信した電子メイルを,SpamAssassin によって,spam メイルか ham メイルかを判断,spam メイルと判断すれば,フラグを立てるなどの処理を行います.
SpamAssassin 自体は,spam メイルか ham メイルかの判断をするだけで,spam メイルと判断されたメイルを隔離したり削除するには,他のツールを使います.(各種MUA や procmail など)
ビット珈琲では,メイルサーバには,FreeBSD 上に,MTA として qmail を採用し,それに加え,アカウント管理のために,vpopmail を導入しています.
ここに,SpamAssassin を導入するのは非常に簡単です.
現在の構成を作る際,ports に,社内で作成した patch を宛てる形で導入しますが,SpamAssassin は,vpopmail (ports/mail/vpopmail) の make の変数で,WITH_SPAMASSASSIN=y とするだけです.
vpopmail には SpamAssassin と連携する configure オプションが予め用意されており,ports の変数は,このオプションを有効にするものです.(--enable-spamassassin に SpamAssassin の spamc コマンドへのパスを指定します)
インストールが完了すると,/usr/local/etc/mail/spamassassin にサンプルファイル (init.pre.sample,local.cf.sample) があるので,これをコピーしてファイルを用意する (init.pre,local.cf) ことで,設定が有効となります.
vpopmail からユーザの個別設定を使うには,少々コツが必要です.SpamAssassin のデーモン起動時のオプションに,-u vpopmail --virtual-config-dir=/usr/local/vpopmail/domains/%d/%l/.spamassassin を追加します.
具体的には,/etc/rc.conf の,spamd_flags で指定します.
root@TOJO /root# cat /etc/rc.conf | grep spamd[CRLF]
spamd_enable="YES"
spamd_flags="-u vpopmail --virtual-config-dir=/usr/local/vpopmail/domains/%d/%l/.spamassassin"
Baysian filter は学習する事で精度が上がります.自分が受け取った電子メイルの中から,spam メイルと ham メイルをピックアップし,それぞれ SpamAssassin に教えます.
この際,他人の受け取った spam メイルを使っても意味がありませんので,必ず自分が受け取ったものを使います.これは,spam メイルか否かの判断基準は,受け取る人によって変わってくるためです.
学習には,vpopmailユーザになって(デフォルトではログインシェルが無効なので,vipw などでログインシェルを編集します) sa-learn というコマンドを使います.spam メイルをメイルサーバにアップロードし,メイルを置いたディレクトリで,コマンドを実行します.同様に,ham メイルも行います.
root@TOJO /home/kakuo/spam# su vpopmail[CRLF]
vpopmail@TOJO /home/kakuo/spam% sa-learn --no-sync --showdots --spam .[CRLF]
vpopmail@TOJO /home/kakuo/spam% cd ../ham[CRLF]
vpopmail@TOJO /home/kakuo/ham% sa-learn --no-sync --showdots --ham .[CRLF]
vpopmail@TOJO /home/kakuo/ham% sa-learn --sync[CRLF]
ただ,これらの作業は一般ユーザには簡単とは言いがたいので,例えば,特定のメイルアドレス宛てに spam メイルを添付して送る事で,自動的に学習させるような仕組みが必要だと思います.