2003年10月12日 日曜日

fetchmail+procmail+spamassassinで楽々SPAMフィルタリング

ここ最近やたらSPAMメールが多いので、以前よりSPAMフィルタを導入しなければならないかなと思っていたのですが、時間が取れたのでようやく導入となりました。TLUCのMLで五十嵐さん三浦さんに設定を教わったのと、UnixUser 2003年9月号の特集記事を参照にしてみました。あとspamassassin を fetchmail から利用する方法も参照しました。
うちは自宅でSMTPサーバを公開しているわけではない(自宅のプロバイダの関係でグローバルなIPv4アドレスをとれない)ので、単純にfetchmail+procmail+spamassassinで運用を試みてみます。

インストール

メール関係を扱っているうちのサーバはDebian GNU/Linux(woody, stable)なので、まず/etc/apt/sources.listに以下の内容を書き足し。
deb http://people.debian.org/~nobse/deprecated/backported ./
続いてツールをインストールする。
sudo apt-get install spamassassin procmail fetchmail

fetchmailの設定

次にfetchmailの設定を行う。うちは3つのAPOPサーバにアクセスしてメールを拾ってくるので、全部fetchmailだけで落とせるようです。ということで、~/.fetchmailrcはこんな感じ。# 以降をコメントとして読んでください。(実際は書かなくて良い)

## .fetchmailrc
defaults                 # デフォルトの設定
  protocol apop          # プロトコルはAPOP、POP3ならpop3にする。
  no rewrite
  no mimedecode          # MIMEデコードしない。(デフォルトでこの指定になる。)
  options fetchall       # 既読・未読にかかわらず全てのメッセージを取得
  mda /usr/bin/procmail  # procmailに処理を渡す
  set daemon 300         # 300秒に1回 メールをもらってくる(デーモン化)
poll server1             # server1の設定(pollはデーモン化しているともらってくる設定)
  user user1             # ユーザー名はuser1
  password hogehoge      # パスワードはhogehoge
poll server2             # server2の設定 (以下同じ。)
  user user2
  password fugafuga
skip server3             # server3の設定(skipは自動でメールをもらわない)
  user user3
  password fumufumu

以上を設定して、group / other のパーミッションを落す。パスワード生書きなので、fetchmailはgroupとotherのパーミッションを落とさないと実行してくれない。
$ chmod 600 ~/fetchmailrc
複数のサーバから持ってくるときはこれで良いのかな? (どれかのPOPサーバがこけているときは、大丈夫なのかなぁ?) いきなりkeepしないのはまずいかも知れないのでしばらくkeepを設定しておいた方が無難です。(大丈夫っぽいけど。大事なメールは無くさないようにしましょう。無くなっても僕は知りません。) fetchmeilを起動します。
$ fetchmail -v

procmailの設定

procmailの設定は暗号めいていて非常に難解。でも書くべき内容は高々知れているので、さくっと書く。どう読んでも意味不明だけども、もらってきたメールはフィルタのspamassassinを通して、SPAMだったら ~/Maildir/.spam へ、そうでないメールは ~/Maildir/ へ仕分けられる。

## .procmailrc
MAILDIR=$HOME/Maildir/
LOGFILE=$HOME/.procmail/process.log
DEFAULT=$MAILDIR
:0fw
| spamassassin
:0:
* ^X-Spam-Status: Yes
.spam/

.procmailrcは何を書いているのか解読するのにえらく時間がかかったというか、ようわからん。こんなので本当に良いのかなぁ。今のところ調子は良さそう。

spamassassinの設定

spamassassinの設定ファイル user_prefs は、いったん設定をhttp://tlec.linux.or.jp/docs/user_prefsから頂いてきて、~/.spamassassin にコピーしてみる。(詳しい内容の解析は別途考える。)
$ cd ~/.spamassassin$ wget -O user_prefs http://tlec.linux.or.jp/docs/user_prefs
まずいSPAMを食べさせるべくためてきたSPAM(MH形式で保存してある)を~/spam1/に、さらにえさを投与すべくSPAMをhttp://www.flcl.org/~yoh/spam9xxxx.tar.gz(Linux-MLにおけるSPAMを抜き取った物)からもらってきて、~/spam2/ 以下に展開。spamassassinのベイジアンフィルタリングのデータベースを賢くするために、お食事もといお勉強をしてもらう。(全部で2000通程度食べてもらった。)

$ sa-learn --spam --no-rebuild --dir ~/spam1/
$ sa-learn --spam --no-rebuild --dir ~/spam2/
$ sa-learn --rebuild

~/Maildir/に格納されているhamなメールはどうやって食べてもらえばいいのですかね。単純に、~/Maildir/.hogehoge にhamなメールを入れているとすれば、
$ sa-learn –ham –no-rebuild –dir ~/Maildir/.hogehoge
$ sa-learn –rebuild
で良いのかな?(まだやっていない)

おしまいに

ということで、SPAMが来るのをひたすら待つこととなった。(楽しみなのです。) うまくいくと_かなり幸せ_になりますな。(あと微妙な副産物としては、未読のSPAMでないメールは、全部 ~/Maildir/ に集まることになったので、WanderlustのPOPフォルダを使う必要が無くなって、IMAPフォルダだけを使えば良くなったので、微妙に使い勝手があがったのです。