メイン

spamassassin アーカイブ

2007年09月05日

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
---
など。

2007年09月11日

spamassassinで日本語スパムメール対策

headerやbodyにある単語でスパム判定を行う設定をする。

たとえばSubjectに「出会い系」という文字列が入っていたら判定ポイントをプラス1する場合

vi /etc/mail/spamassassin/local.cf
---
header H_SPAM_WORD1 Subject =~ /=P2q\$\$7O/
describe H_SPAM_WORD1 Deaikei
score H_SPAM_WORD1 1.00
---

と記入する。
単に出会い系と記入してはいけない。文字コードの問題である。またPERL言語なのでエスケープしてやる必要もある。

# echo "出会い系" | nkf -j|awk '{gsub(/\x1B[$(]B/,"");print}'
=P2q$$7O

※エスケープの必要のあるメタキャラ
.`*+/?^$#{}()[]

よって「出会い系」は「=P2q\$\$7O」という文字列になる。
bodyにある文字列で判定ポイントを上げるには以下のように書く。

---
body B_SPAM_WORD /=P2q\$\$7O/
describe B_SPAM_WORD Deaikei
score B_SPAM_WORD 1.00
---

bodyの文字列を指定する場合はよく考えてからにしましょう。

2007年10月03日

spamassassinでベイジアンフィルタを有効にする

 以前書いたspamassassinの設定だけではベイジアンフィルタが結局有効になりませんでした。メールサーバを使っている利用者でspamassassinの機能を有効にしている人全員にベイジアンフィルタをかけたかったんだけどなかなかうまく行かなかった。
 いろいろ調べた結果以下の設定も必要ということが分かった。

# mkdir /path/to/directory
# chmod 777 /path/to/directory
# mkdir /path/to/directory/byes
# chmod 777 /path/to/directory/byes

# vi /etc/mail/spamassassin/local.cf
---
bayes_path /path/to/directory/bayes/bayes
bayes_file_mode 0666
auto_whitelist_path /path/to/directory/auto_whitelist
auto_whitelist_file_mode 0666
---

最後に以下のコマンドで間違いがないか確認しましょう。
# spamassassin --lint


これでいけるようです。

Natural Rhythm ナチュラルリズム

カテゴリー

About spamassassin

ブログ「偉大なるOSS」のカテゴリ「spamassassin」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはPostgreSQLです。

次のカテゴリはxoopsです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。