« apacheのベーシック認証をLDAP対応にする。 | メイン | userminでWEBメール »

spamassassinでスパムメール対策

 スパムメールがこのところやたら目につく。有料のアプライアンス製品と遜色ないレベルで駆除をおこなってくれそうなOSSもいくつかあるようだ。目をつけたのは spamassassin と bsfilter。日本語のスパム対策で有利なのはbsfilterのようだが我が組織の環境では日本語圏外からのスパムの方が多い。またspamassassinも工夫次第で日本語スパムにも十分な処理をするようだったので今回はこの手のソフトウェアでのデファクトスタンダードであるspamassassinを選択した。
 特徴は以下。

●メールのヘッダと本文のパターンマッチング
●ベイジアンフィルタ
●DNSBL, URIBL
●共同型フィルタリングネットワーク

SPAMメールをSPAMメールと判定する精度:約95%
正常メールを正常メールと判定する精度:約99%

学習機能があるので精度は徐々に上がると思います。

今回OSはCentOS4,RHEL4で確認した。どちらも同じ設定だった。RHEL4での作業記録をとっている。

まずはspamassassinのインストールから。

# up2date --configure
# up2date --install spamassassin

spamassassin-3.1.9-1.el4にバージョンアップした。これでインストール完了。
サイトポリシー設定ファイルは以下のファイルです。このコンフィグファイルで全体の制御にかかわる設定を行います。
/etc/mail/spamassasin/local.cf

個別ユーザ設定ファイルは以下です。ユーザごとの設定です。
~/.spamassassin/user_prefs

ルールのアップデートを必ず行いましょう。
# sa-update
※/var/lib/spamassassin配下にダウンロードされます
※perl-Archive-Tarのrpmと
 perl-IO-Zlibのrpmをインストールしないとエラーが出る。


procmailを利用してspamassassinは機能します。


spamassassinを利用するユーザには~/.procmailrc ファイルを作成します。

$ vi ~/.procmailrc
---
# ログ
LOGFILE=$HOME/procmail.log

# spamassassinによるスパムチェックを行う
:0fw:$HOME/.procmail.lock
|/usr/bin/spamc

# スパムメールをユーザ届かなくする設定
:0
* ^X-Spam-Status: Yes
/path/file
---

ネットで調べると$HOME/.procmail.lockは書かなくてもいいようだったけど書かないとprocmail.logにエラーが出た。
/path/file は /dev/null でもいいけどちょっと怖い。


postfixを使っている場合は以下のように設定を変更します。

# vi /etc/postfix/main.cf
---
mailbox_command = /usr/bin/procmail
---


最後に各種サービスの起動,再起動などをします。

# chkconfig --level 35 spamassasin on
# service spamassassin start
# service postfix reload

これでOK。意外と簡単でした。あとはspamassassinの判定精度を上げるために学習させます。


スパムメールを学習させる

# sa-learn --progress --spam /path/directory

正常なメールを学習させる

# sa-learn --progress --ham /path/directory

それぞれ200通学習しなければベイジアンフィルタが有効になりません。
この数値は以下の設定で変更することができます。

# vi /etc/mail/spamassassin/local.cf
---
bays_min_ham_num 100
bays_min_spam_num 100
---
など。