SpamAssassinの設定メモ

出典: Wiki@browncat.org

目次

[編集] SpamAssassinを使う


Linuxのメールサーバに必須ともいえるスパムフィルタのSpamAssassin。一度安定したらたまにしかいじらないので、とりあえず忘れないようにざっくりメモ。一応CentOSメインで運用ですがUbuntuでも設定だけ調べました。

[編集] 準備

CentOS 5等のRedHat系のLinux場合

yum -y install spamassassin procmail

Ubuntu, Debian系の場合

sudo aptitude install spamassassin spamassassin-rules-ja procmail

Ubuntu 7.04サーバでやるとどどっといろんなものがインストールされます。

[編集] 日本語向けuser_prefs導入するための設定

  • /etc/mail/spamassassin/v310.pre

以下の一行のコメントを外す。

loadplugin Mail::SpamAssassin::Plugin::TextCat
  • /etc/mail/spamassassin/local.cf

以下の一行を追加

allow_user_rules 1

[編集] 個人設定

  • .spamassassin
mkdir .spamassassin
cd .spamassassin
wget http://tlec.linux.or.jp/docs/user_prefs
wget http://tlec.linux.or.jp/docs/private_prefs

自分の環境に合わせてprivate_prefsを編集します。

Ubuntuではspamassassasin-rules-jaがかなり賢そうなので不要かもしれません。 空のuser_prefsだけ作っておけば設定を個人で変更できるので便利かもしれません。

mkdir .spamassassin
cd .spamassassin
cp /usr/share/spamassassin/user_prefs.template ./user_prefs

なかなか学習しないキーワードがあるため以下を追加。

header ANATRIM Subject =~ /Anatrim/i
score ANATRIM  1.5

body ANATRIM_BODY   /Anatrim/i
score ANATRIM_BODY  1.5

デフォルト設定ではスパム判定されたメールはspamcがSubjectを書き換えて[SPAM]という文字列が入ります。個人的にこれを止めたいのでuser_prefsの最後に以下の一行を追加

rewrite_header subject
  • メーラなどでSpam関連フォルダ作成

SpamAssassinが迷惑メールと判定した場合に自動で振り分けるためのフォルダをメーラから作成します。ここでは"Spam"とします。このあたりの設定について後ほど少し。

  • .procmailrcファイル
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SHELL=/bin/sh
LOCKFILE=$HOME/.maillock
LOGFILE=$MAILDIR/procmail.log

:0fw
*!^X-Spam.*
|/usr/bin/spamc

:0:
*^X-Spam-Status:.*YES.*
.Spam/
  • .forwardファイル

以下の内容でファイル作成。"も必ず必要。USERNAMEを自分のユーザ名に変える

 "|IFS='' && exec /usr/bin/procmail -f- || exit 75 #USERNAME"

パーミッションを600に。

chmod 600 .forward

[編集] サーバの起動

CentOSでは以下のようにして起動&自動スタートを設定

/sbin/chkconfig spamassassin on
/etc/init.d/spamassassin start

Ubuntuでは

vi /etc/default/spamassassin
などとして
ENABLED=1

あとは

/etc/init.d/spamassassin start

[編集] スパムの学習: sa-learn

  • まずは手元にある迷惑メールを学習させる

先に紹介したuser_prefsは日本語のメールにはかなり有効ですが、英語のスパムにはそれほど効きません。 設定はまだ全然調べれていないのですが、今までスパムとしてはじいてきたメールを もう一度食わせることにします。

sa-learn --spam ~/Maildir/.Junk
sa-learn --ham  ~/Maildir/.NotSpam

少し古いスパムを大体2-3000位学習させたのですが、スパム判定率はまだそれほど高くありません。まだまだ50%位といったところでしょうか。

ここのところ毎日80通程度づつ食べさせているのですがなかなか賢くなりませんね。 まだ30000通ほどスパムが溜め込んであるので、これを一気に学習させたらだいぶ賢くなりそうですが、学習の効果が見たいので置いてあります。

またSpamAssassinには自動学習機能がデフォルトで有効になっているため、時間が経てば徐々にですが賢くなっていくことが期待できます。

[編集] ルールの更新: sa-update

SpamAssassinのルールはspamassassin.orgでメンテナンスされています。 最新のルールを取得するにはsa-updateコマンドを使います。 定期的もしくは手動で実行し、spamassassinを再起動します。 運用開始時にも一回実行しておいたほうがいいかもしれません。

sa-update 
/etc/init.d/spamassassin condrestart

centos5にはcronで自動更新するためのcronスクリプトがついていますので、これを/etc/cron.daily/か/etc/cron.weekly辺りにコピーしておきます。

/usr/share/spamassassin/sa-update.cron

[編集] 運用

SpamAssassinを使うとLinuxサーバ側とユーザのMUA側の両方でスパムチェックをすることになると思います。少し重くはなると思いますし、何かと煩雑ですが、信頼性アップのためとあきらめて使っています。

私の場合面倒ですが合計4つのフォルダを作っています。特に運用開始などでサンプル数が少ない場合少し面倒ですがThunderbirdなどのフィルタと併用して別々なディレクトリに入れておき、後で結果を学習させあいするといいと思います。

  1. SpamAssassinがスパムと判定し自動で捨てるためのフォルダ (Spam)
  2. SpamAssassinが判定できずメーラないしは手動で判断した場合のフォルダ (Spam2) 学習用
  3. SpamAssassinが誤判定をしたメールを入れるフォルダ (NotSpam) 学習用
  4. SpamAssassinに学習させた後に入れるフォルダ (Junk)

誤判定でまともなメールが捨てられるのが一番困るのでSpamフォルダはメールチェック時に定期的に見ます。この中でメーラが学習できていないものはチェックして覚えさせます。

私はメーラには自動で捨てる設定をしていないので、受信箱にSpamAssassinが判定できなかったスパムがたまってきます。またメーラが判定できなかったものも同じく受信箱に残ります。ある程度たまったらこれをSpam2に移動。適当にSpam2がたまったらメーラとSpamAssasisnに学習させてJunkへ。

 sa-learn --spam ~/Maildir/.Spam2

もし誤判定があればNotSpamに入れておき、--hamオプションをつけて学習。後は受信箱なりなんなりへ移動。

少々面倒で、手間はかかりますが、最初のうちしばらくやっておけば徐々に受信箱に残るものが減ってSpamフォルダが増えてくるので、後は誤判定だけ気をつけておけばいいでしょう。

[編集] 経過

2007/GW~5/18まで、更の状態に初期3000通ちょっとから来たスパムを学習させ合計約4000通程度学習させましたが、いまだにVI*GRAなんていうビッグキーワードの判定漏れが減りません。一度判定させたものを念のため再度学習させてみました。

さらに5000通近くのメールを学習させたのですが今ひとつな感じです。
今のところthunderbirdのフィルタと比べて賢いのは

  • 日本語メールではSpamAssassin
  • 英語のメールではthunderbird

5/23 private_prefsの設定追加が抜けていたのと追加ルールを加えて、Postfixスパム対策メモの対策を行ったところ届くものは15%カット。スパム判定率は70%程度に向上しました。また受信箱に残ったスパムも高得点なメールが増えました。 必要なものまで拒否していないか不安ですので、しばらくログの監視は必要そうです。

[編集] 日常の運用には

ある程度運用が安定してきたら4つもフォルダを手動で操作するのは面倒です。 そこで"Spam2", "NotSpam"をcronで自動で学習&移動するようスクリプトを組んでおきます。

基本操作は変わらない。Inboxに見つけたスパムメールを手動でSpam2に入れること、自動判定のフォルダ(Spam)をたまにチェックして誤判定のものは"NotSpam"に移動するようにします。

ルールの更新スクリプトsa-updateも毎日ではなくてもいいので、一週間に一回くらい走らせても良いかもしれません。

[編集] 気になる点

メールのチェック毎にSpamAssassinがルールの前方参照をしているらしき警告をメールのログに残します。
少しうっとうしいのですが/usr/share/spamassassin以下のファイル同士の関連なので放置中。

ナビゲーション
Ads