« 英雄*戦姫攻略 | トップページ | キュアソート »

2012/06/16

FreeBSD8.1-RELEASEでSpamAssassin

あいぽんで自宅のメールを取れるようにしたのだが、そうすると大量に来るspamのたびに着信音がするのでいいかげん対策をしなければなあ・・・ということで、しばらく悩んでいた。
ちょっと余裕ができたので本格的にSpamAssassinを導入してみることにした。

しかし、資料が・・・ない。
SpamAssassinを導入してもろくなドキュメントがインストールされないし、公式サイトをみてもようわからん。LinuxでSpamAssassinを導入している人はいるのだが、FreeBSDで使ってる人の情報はちょっと古いっぽい。なので、この人の情報を参考にしながら、FreeBSD8.1-RELEASEにSpamAssassinを導入してみたので、メモ。

1.アプリのインストール
絶対必要なのは、SpamAssassinとprocmail。あと、SpamAssassinはperl5で動くのでperlも最新版にしておいた方がいい、か?私は面倒なのでそのままの環境でトライ。インストールはportsでもpackagesでもソースでもお好みで。私はpackagesにした。
それぞれ、FreeBSD8.1でのパッケージ名は以下の通り。
・p5-Mail-SpamAssassin-3.3.1
・procmail-3.22_6
よく見たら、依存関係で「perl-5.10.1_1」も勝手に入るっぽい・・・?
パッケージのインストールは以下の通り。
本家のサイトには8.1Rのパッケージツリーは古くて残っていないので、日本のサイトから入手。これもいつなくなるかわからないので、その場合はportsから入れるかソースから入れるしかないね。
あらかじめ、以下の呪文をとなえておく。

# setenv PACKAGESITE ftp://ftp3.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/Latest/

続いてパッケージのインストール

# pkg_add -r p5-Mail-SpamAssassin
# pkg_add -r procmail

これだけ。インストール後は当然rehashしておくこと。


2.下ごしらえ
ここら辺はドキュメントがなくていろんなサイトから情報を引っ張ってきたので本来はいらない手順が含まれているかもしれない。
が、その判断ができないのでとりあえず全部書いておく。

a. 設定ファイルのコピー
以下のように、設定ファイルをコピーしておく。(・・・必要があるのかどうか不明)

# cd /usr/local/etc/mail/spamassassin/
# cp local.cf.sample local.cf

b. 自動で起動。
/etc/rc.confに以下のように書く。

spamd_enable="YES"
spamd_flags="-u spamd -H /var/spool/spamd"

これで再起動すればSpamAssassinが動くはずなのだが、ウチの環境では再起動していないので本当にこの記述で正しいかどうかは不明。

c. 手動で起動
以下のようにすれば、手動でSpamAssassinを起動できる。

# /usr/local/etc/rc.d/sa-spamd start

はずなのだが、「exited or timed out without signaling production of a PID」みたいなエラーがでて起動できない。
以下のコマンドで起動できるようになる。(理由は不明(汗))

# sa-update


3.ユーザ設定
まず、前提条件としてMTAが動いていてちゃんとメールがローカルサーバに配信されていること。ローカルサーバがmbox形式ではなくてMaildir形式でメールを保存するようになっていること。
SpamAssassinはMTA→MDA→MUAの間に入って、MTA→MDA→sa→MUAみたいに動くので、まずはMTAが動いていることが大前提。
mbox形式でも使えるのかどうか知らないが、今の流行りはMaildir形式なのでこれを機にMaildir形式に移行するのが良いと思う。
実はウチの環境ではMTAは動かしていなくてfetchmailでプロバイダのサーバから持ってきているだけなのだが、動きとしては上と同じ事になる。

a. ドットファイルの準備
必要なファイルは~/.forwardと~/.procmailrc
それぞれ以下のようにする。

  ~/.forward
"|IFS='' && exec /usr/local/bin/procmail -f- || exit 75 #username"

最後の#usernameは自分のユーザ名を入れること。

  ~/.procmailrc
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmaillog
LOCKFILE=$HOME/.lockmail

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

:0
*^X-Spam-Status: Yes
$MAILDIR/.SpamMailFolder/

内容については説明しないので、適当に調べて欲しい。(つか、私もわかってない(汗))
最後の.SpamMailFolderはspamを移動させたいフォルダをあらかじめ(任意の名前で)用意しておいて、そのフォルダを指定する。
このフォルダ、maildirmakeというコマンドで作成できるそうなのだが、ウチの環境ではそれで作成した場合になぜかMUAであるThunderbirdで認識されないという現象が発生。よくわからなかったので、Thunderbird上で保存フォルダを作ることにした。

b. spamの学習
SpamAssassinにspamメールの学習をさせるためにはえさになるメールが必要になる。たいていは一日10や20のspamが来るだろうから(もっと多いか?)、それを数日分保存しておいて、SpamAssassinに食わせてやる。

% sa-learn --spam ~/Maildir/.SpamMailFolder/cur

これで学習する。
あと、spamじゃない学習もさせてやる必要がある。

% sa-learn --ham ~/Maildir/cur

これで、受信トレイ(Thunderbirdの場合)にあるメールはspamじゃないことを覚える。

c. 学習用スクリプトの準備
以下のようなシェルスクリプトを適当なところ(~/bin/spam-learn.shとか)に用意してやる。

#!/bin/sh
/usr/local/bin/sa-learn --spam ~/Maildir/.SpamMailFalder/cur
/usr/local/bin/sa-learn --ham ~/Maildir/cur

作成後に忘れずに実行権を与えておくこと。

d. cronで動かす
一日一回上記のシェルスクリプトを動かしてやることで、SpamAssassinの学習精度を高める。

% crontab -e

crontabが開くので、以下の記述を追加。

0 4 * * * /home/username/bin/spam-learn.sh

こうしてやれば、一日一回午前4時にspam-learn.shが動く。
もちろん、実行する時間はいつでもいい。


・・・とゆーことで、SpamAssassinの運用が始まったわけだが、これは便利だね。
あいぽんの余計な着信に惑わされなくなったのが非常に嬉しい。
うんうん。こんなことなら早く設定しておくんだったなあ。
とはいえ、設定の仕方がわからなかったから仕方ないんだが。ま、今回こうやってまとめたから大丈夫だろう。

| |

« 英雄*戦姫攻略 | トップページ | キュアソート »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: FreeBSD8.1-RELEASEでSpamAssassin:

« 英雄*戦姫攻略 | トップページ | キュアソート »