SpamAssassin - 教育
- メーラをつかいつつ、SpamAssassinにSpam判定漏れ分を学習させる方法について。
- メーラにはEdmaxを使用している。
- spam学習には、sa-learnというコマンドを使用する。
- 学習方針は、「悪いものと同時に、良いものも教える」とする
- メールヘッダに"X-Spam-Flag: YES"と付いているものは、学習対象から除外する。
学習方法
- 本来アカウント毎に学習データベースを持つべきらしいが、全体に共通のパターンとして学習させたい。
- Edmaxから、unixMailbox形式で、SpamAssassinをかわしたspamをエクスポートする。添付ファイルも再構築して含める。
- エクスポートしたファイルを、spamassassin稼動サーバ(うちではメールサーバ内)に転送。
- spamassassinデーモンを実行しているユーザの権限(当方では`spamd`で、sa-learnを使ってspamを学習させる。(漏れた分だけ学習させる)
spamd$ sa-learn --spam --mbox spam/spam20081016
※ユーザ:spamdで実行して効果があるのかな....
⇒確証はないけど、このスレの流れを信用する
http://spamassassin.jp/modules/xhnewbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=20&forum=2
※2008.10.17追記:デーモン実行ユーザでのsa-learnで正解だということを、実証的にアレした。
資料
http://www.ksknet.net/spamassassin/spamassassin_1.html
sa-learn コマンドでspamassassinに学習をさせ、スパムの判定精度を向上させることができます。 スパムの場合には --spam オプションを スパムでない場合には --ham オプションを それぞれつけてください。 また指定する読み込みの対象はファイルや、メールボックス、 ディレクトリ、などでそれぞれ続くオプションが違います。 --mbox <-- メールボックス --file <-- ファイル --dir <-- ディレクトリ [例] sa-learn --spam --file spam.txt ちなみにmanページによると、スパムメールだけを覚えさせてもあまり効果はないようで、スパムと間違って判断してしまったメールも学習させる必要があるみたいです。最低スパムメールとそうでないメールを1000通づつ学習する必要があります。ただし、5000通以上になりますと、あまり精度はあがらないとのことです。
http://www.geocities.jp/bashou1000/spamassassin.txt
spamAssassin設定 新規作成 2005/02/23 最終更新 2005/03/08 ●概要 一日に受信するメールの内、8割をスパムが占めているユーザもいる事から、 スパムフィルタ導入の運びとなった。 SpamAssassinが動作するまでの処理内容としては、以下 Postfixがメール受信 ↓ Procmailへ中継。ProcmailはSpamAssassinに再中継 ↓ SpamAssassinによるSpam判定 ↓ 適切なユーザフォルダへ格納。スパムメールと判断されたら、指定フォルダに格納。 ●日々の運用 誤認識防止の為、spamアカウントに届くメールや /home/spam ディレクトリは 毎日チェック。 SpamAssassinを経由したメールには、メールヘッダー部分にスパム判定スコア などが追加されている。 基本的に SpamAssassin に autolearn=spam と判定されたものは放置。 autolearn=no となったものは、 sa-learn --spam で学習。 --------------------------------------------------------------------- 例:test@yahoo.co.jp宛のスパムメールが、正常と認識されて下記フォルダに 格納された。 /home/test/Maildir/cur/1109854125.3112_0.mail.yahoo.co.jp:2,S スパム学習させる。 # sa-learn --spam 1109854125.3112_0.mail.yahoo.co.jp:2,S ※特に必要が無ければ、以下の手順は行なわず学習済のメールを削除しても良い。 権限をspamに直す # chown spam 1109854125.3112_0.mail.yahoo.co.jp:2,S 本来のspamフォルダに移動 # mv 1109854125.3112_0.mail.yahoo.co.jp:2,S /home/spam/Maildir/new/ --------------------------------------------------------------------- 正常なメールがスパムと誤認識したものは sa-learn --ham で学習した後、 本来のフォルダへ移動。 --------------------------------------------------------------------- 例:test@yahoo.co.jp宛のメールが、スパムと誤認識されて下記フォルダに 格納された。 /home/spam/Maildir/cur/1109854125.3112_0.mail.yahoo.co.jp:2,S スパム学習させる。 # sa-learn --ham 1109854125.3112_0.mail.yahoo.co.jp:2,S 権限をtestに直す # chown test 1109854125.3112_0.mail.yahoo.co.jp:2,S 本来のフォルダに移動 # mv 1109854125.3112_0.mail.yahoo.co.jp:2,S /home/test/Maildir/new/ --------------------------------------------------------------------- 誤認識していない通常のメイル (ham: SpamAssassin ローカルな slang) でも、 autolearn=no は sa-learn --ham で学習。 ●whitelistへの追加 スパム学習をしても、誤診が直らない場合、 各ユーザディレクトリにある user_prefまたは/etc/spamassassin/local.cf内に 下記のような記述を追加する。 --------------------------------------------------------------------- whitelist_from test@yahoo.co.jp whitelist_from test@yahoo.ne.jp whitelist_from *@yahoo.co.jp --------------------------------------------------------------------- 設定追加後は、spamassassinに設定を読み込ませる。 # /etc/init.d/spamassassin reload whitelistに追加されたアドレスからのメールは、あらかじめSpam判定のスコアに -100されて計算される。判定時のスコアが8以上の場合、スパムと認識するように なっているので、まずスパムにはならない。 ●ユーザ追加時の手順 ユーザ追加後、メール格納用のフォルダ(新規、既読、一時)を作成する。 ※以前の /var/mail/ フォルダは使用出来ない。Spam判定時の取り扱いを考えて mbox形式からMaildir形式に、メール保存方法を変更したため。 --------------------------------------------------------------------- 例:ユーザ:test ユーザ追加。ログインは出来ないように設定 # useradd -s /bin/nologin test メールフォルダの作成 # mkdir /home/test # mkdir /home/test/Maildir # mkdir /home/test/Maildir/new # mkdir /home/test/Maildir/cur # mkdir /home/test/Maildir/tmp 全てオーナーはtestにしておく。 # chmod -R test /home/test --------------------------------------------------------------------- ●SpamAssassinを有効にするには(受信メールをProcmailに渡す設定) 各ユーザのホームディレクトリに.forward作成 .forward の中身に、下記の一文を追加する。 "|IFS=' ' &&exec /usr/bin/procmail -f- || exit 75 #ユーザ名" 例 /home/test/.forward -------------------------------------------------------------------- "|IFS=' ' &&exec /usr/bin/procmail -f- || exit 75 #test" -------------------------------------------------------------------- ※SpamAssasinの適用を中止する(Procmailに渡さなくする)場合は、 中身が空の .forward ファイルを配置すればよい。 -------------------------------------------------------------------------------- 以下、インストール時の設定 ●mbox から Maildir への移行時に既存のメールをmaildir形式に変換する。 http://untroubled.org/mbox2maildir からmbox2maildirを 取得しておき、実行可能にしておく # wget http://untroubled.org/mbox2maildir # chmod 755 mbox2maildir スクリプトの実行例 # ./mbox2maildir /var/mail/test /home/test/Maildir ※ rootで実行したせいか、オーナーがrootに代わってしまうので、 Maildir以下のchmodを忘れずに ●SpamAssassin3.0.2のインストール Debian GNU/Linux 3.0r4(woody)のSpamAssassinは2.20とバージョンが 古いので、/etc/apt/sources.list にbackportを追加しておく。 以下のような形だと、postfixも2.1.5の比較的新しいバージョンが インストール可能になる。 -------------------------------------------------------------------- # spamassassin backport 20050210 deb http://www.backports.org/debian/ woody spamassassin deb http://www.backports.org/debian/ woody libnet-dns-perl # postfix backport 20050210 deb http://www.backports.org/debian/ woody postfix -------------------------------------------------------------------- ※今回は、SpamAssassinだけをインストールした。 SpamAssassinインストール # apt-get update # apt-get install spamassassin これだけだとライブラリが足らないので # apt-get install libnet-dns-perl SpamAssassinのテストは #spamassassin -t < /usr/share/doc/spamassassin/sample-spam.txt また、/etc/default/spamassassin 内の ENABLED=0 → ENABLED=1 にしないとspamassassinが起動出来ないらしい。 起動は/etc/init.d/spamassassin start ●SpamAssassinの設定 全体設定は、/etc/spamassassin/local.cf に行なう。 今回は、下記アドレスから http://tlec.linux.or.jp/docs/user_prefs 設定サンプルをもらってきて、local.cfとした。 ●Maildir形式の受信をサポートするPOPをインストール # apt-get update # apt-get install courier-pop ●PostfixにMaildirの設定 /etc/postfix/main.cfに下記設定を施す。 -------------------------------------------------------------------- #home_mailbox = Mailbox home_mailbox = Maildir/ mail_spool_directory=/var/mail/ -------------------------------------------------------------------- この後、postfixを設定再読み込み又は、再起動すると設定反映 # /etc/init.d/postfix reload 又は # /etc/init.d/postfix restart なお、Debianパッケージpop-before-smtpを利用したい場合には 下記のようなパラメータ設定をすると良いかも -------------------------------------------------------------------- mynetworks = 127.0.0.0/8 hash:/var/lib/pop-before-smtp/hosts smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient, check_client_access hash:/var/lib/pop-before-smtp/hosts, reject_unauth_destination -------------------------------------------------------------------- ※ pop-before-smtp利用時は、/etc/pop-before-smtp/pop-before-smtp.confを修正する 既存のpat pat2を#でコメントアウトし、下記設定追加 /etc/pop-before-smtp/pop-before-smtp.conf -------------------------------------------------------------------- # 2005/02/22 addd # For Courier-pop pat = '^(... .. ..:..:..) \S+ courierpop3login: LOGIN, user=\S+, ip=\[::....:(\d+\.\d+\.\d+\.\d+)\]$ ' -------------------------------------------------------------------- ●ProcmailをSpamAssassinと連携させて使う設定 /etc/procmailrc -------------------------------------------------------------------- PATH=/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ LOGFILE=$HOME/.SPAM/procmail.log LOCKFILE=$HOME/.lockmail :0fw *!^X-Spam.* | /usr/bin/spamc :0: #*^X-Spam-Status: Yes * ^X-Spam-Level: \*\*\*\*\*\*\* ! spam -------------------------------------------------------------------- ●Spamの促成学習 通常、1000通ほど学習させた後にSpam判別が安定するが、 インストールしたばかりで適当なサンプルがない場合。 tlec から、Spamメール集を取得し、これを学習させる。 # wget http://www.flcl.org/~yoh/yoh_spam_050102.tar.bz2 # apt-get install bzip2 # bzip2 -dc yoh_spam_050102.tar.bz2 | tar xvf - # sa-learn --spam ./home/yoh/spam/spam/ ●設定変更(2005/03/04) 運用をしていく中で、local.cf の最後尾に下記設定を追加した。 /etc/spamassassin/local.cf -------------------------------------------------------------------- (中略) always_add_report 1 whitelist_from test@yahoo.jp whitelist_from test@yahoo.ne.jp whitelist_from *@yahoo.co.jp -------------------------------------------------------------------- always_add_report { 0 | 1 } ※デフォルト0 スパムと判定した場合に、その条件でこう判定されたかのレポートを つけるのが0。不要なら1をセットする