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などのフィルタと併用して別々なディレクトリに入れておき、後で結果を学習させあいするといいと思います。
- SpamAssassinがスパムと判定し自動で捨てるためのフォルダ (Spam)
- SpamAssassinが判定できずメーラないしは手動で判断した場合のフォルダ (Spam2) 学習用
- SpamAssassinが誤判定をしたメールを入れるフォルダ (NotSpam) 学習用
- 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以下のファイル同士の関連なので放置中。
