xserver
Home クッキー及びWeb ビーコンについて



SpamAssassin によるスパムメール対策

SpamAssassin によるスパムメール対策

 1日にくるメールの大半がスパムメールという現状にそろそろ煩わしさを感じてきたため、スパムメール対策を講じることにしました。ここでは、95%以上のSpamメールを抹殺してくれるというSpamAssassin のインストールから導入までを解説していきます。




■SpamAssassin のダウンロード

Version Spamassassin-3.0.4
Homepage http://spamassassin.apache.org/
Download http://spamassassin.apache.org/downloads.cgi?update=200506061100
Install Mail-SpamAssassin-3.0.4.tar.gz

なお、SpamAssassin をインストールする前に予め、Procmail もインストールしておきましょう。スパムと判断したメールを振り分ける際に利用します。なお、Procmail の解説についてはこちらを参照してください。



■SpamAssassin のインストール

いくつかの方法がありますが、どのような方法でインストールしても構いません。Fedora の場合はRPMパッケージが用意されているのでそちらを利用してもいいでしょう。ただし、FCのバージョンによってSpamAssassin のバージョンも自動的に決まってしまうので最新バージョンのSpamAssassin を利用したい場合は、CPAN経由でインストーするか、tarボールからインストールしてください。yum やapt-get ならば、以下のようにしてインストールを実行してください。依存関係で他のperl 関連のRPMもインストーするしなければならないかもしれません。

# yum install spamassassin
or
# apt-get install spamassassin

tar ボールからインストールするには、

$ tar zxfv Mail-SpamAssassin-3.0.4.tar.gz
$ cd Mail-SpamAssassin-*
$ perl Makefile.PL
# make ; make install

CPAN.pm経由でもインストールできます。

# perl -MCPAN -e shell
cpan>install Mail::SpamAssassin

オプションを何も指定せずにインストールした場合は下記に記したディレクトリに主なファイルがインストールされます。

/usr/bin/spamassassin //コマンド
/usr/bin/spamc //クライアント用途のデーモン
/usr/bin/spamd //サーバー用途のデーモン
/usr/share/spamassassin/ //ルールファイルの場所
/etc/mail/spamassassin/local.cf //設定ファイル


■SpamAssassin の設定ファイルの準備

SpamAssassin の設定ファイルは、ドメイン下の全てのユーザに影響する/etc/mail/spamassas
sin/local.cf と個別のユーザのみに機能する $HOME/.spamassassin/user_prefs の2通りあります。local.cf は全体に適用され、ユーザのホームディレクトリに user_pref があればそれを上書きして参照します。なので、local.cf で制限を軽めに設定しておき、user_prefs で厳しく設定しておくようにするのが無難でしょう。user_prefs はspamassassin コマンドを初回実行時に自動的にコピーされます。同時に、ホームディレクトリ直下に .spamassassin というディレクトリも作成されます。以下に示すコマンドを実行してみてください。

$ /usr/bin/spamassassin -t /home/user/Maildir/.mail/cur/メールを指定
or
$ /usr/bin/spamassassin -t sample-nonspam.txt
$ /usr/bin/spamassassin -t sample-spam.txt
//sample-nonspam.txt とsample-spam.txt はソースディレクトリ内にあります

上記のコマンドを実行すると、~/.spamassassin ディレクトリ内にuser_prefs が作成されます。設定を有効にするにはそのファイルを編集していきます。全体に影響を与える local.cf とuser_prefs は書式が同じなので以下では、local.cf の書き方について説明していきます。

■/etc/mail/spamassassin/local.cf の編集

local.cf を編集していきます。

# vi local.cf

//Spamと判定した場合に、メールの件名を書き換える
rewrite_header Subject *****SPAM*****

//メールをスパムと判断するヒット数
//各チェック項目を加算し、合計値が5を超えた場合はスパムとして判定する
//メールヘッダーの「X-Spam-Status: No, hits=4.998~」のhits がそれにあたる

required_score 5
or
required_hits 5

//spam分析結果をメールの本文ではなくヘッダに付ける
report safe 1

//無条件に受け付けるアドレスを記述
//スパムと判定されたくないアドレス(会社や友達等)を記述しておく

whitelist_from someone@example.com aaa@example.com
whitelist_from *@example.com

//ブラックリストとして登録したいアドレス
blacklist_from someone@somewhere.com

//local.cf として指定したwhitelist_from をuser_prefs で打ち消す場合に用いる
unwhitelist_from someone@example.com

//local.cf として指定したblacklist_from をuser_prefs で打ち消す場合に用いる
unblacklist_from someone@example.com

//
score HEADER_8BITS 0
score HTML_COMMENT_8BITS 0
score SUBJ_FULL_OF_8BITS 0
score CASHCASHCASH 0
score UPPERCASE_25_50 0
score UPPERCASE_50_75 0
score UPPERCASE_75_100 0

//受け取る言語を限定する(default: all)

ok_languages ja en

//HTMLメールの場合等に言語を限定する(default: all)

ok_locales ja en

設定項目は上記で挙げた以外にも非常にたくさんありますが、ここでは敢えて軽めに設定しておきます。もっと詳しく知りたい方は、マニュアルを参照してください。

# perldoc Mail::SpamAssassin::Conf

なお、user_prefs のお手本ともいえるファイルがTLECで公開されているので、こちらのファイルをダウンロードしてそのまま使っても良いでしょう。ただし、このuser_pref を使用する場合は、こちらのページをしっかり読んでおきましょう。

# wget http://tlec.linux.or.jp/docs/user_prefs



■.procmailrcの編集

.procmailrc を使用する前に .forward に開いて以下の行を追加しておいてください。これでprocmailrc が使えるようになります。「User」には、自分のユーザ名を入れてください。Maildir 形式のメールボックスを使用している方は、ユーザ名の代わりに「~/Maildir/ 」とします。

$ vi .forward

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

or

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


次にSpam判定されたメールをどう処理するかを設定するために .procmailrc を編集していきます。なお、spamassassin コマンドはメール1通に対してその都度起動することになるので、受信するメールの量が多い環境で使用する場合は、spamd デーモンを起動しておくほうが良いでしょう。spamd デーモンを起動している場合は、spamc (クライアント用デーモン)を実行させます。

◎spamassassin を使用する場合の .procmailrc の例
$ vi .procmailrc

:0fw:spamassassin.lock
# *!^X-Spam.* //コメントアウトしても良い
| /usr/bin/spamassassin

//メールヘッダに「 X-Spam-Status: Yes 」の記述があれば .spam ディレクトリへ格納
//autolearn=spam の記述があれば問答無用にspamディレクトリへ。

:0H:
* ^X-Spam-Status: Yes
* ^X-Spam-Status:.*autolearn=spam
.spam/


◎spamc を使用する場合の .procmailrc の例

$ vi .procmailrc

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

:0H:
* ^X-Spam-Status: Yes
* ^X-Spam-Status:.*autolearn=spam
.spam/

なお、spamc はspamd デーモンが起動している場合に実行されます。コマンドのspamassassin と同様に「spamc < メール」で処理が実行されます。ここで、spamd がシステム再起動時にも自動起動できるように設定しておきましょう。ソースディレクトリ内にredhat-rc-script.sh というサンプルの自動起動ファイルが置いてあるのでそれを利用します。

# cd Mail-SpamAssassin-3.0.4/spamd
# cp redhat-rc-script.sh /etc/rc.d/init.d/spamd
# chmod +x /etc/rc.d/init.d/spamd
# /etc/rc.d/init.d/spamd start
# chkconfig --add spamd
# chkconfig --level 35 spamd on
# ps aux | grep spamd
root 18155 0.0 0.9 27088 2540 ? S Jul07 0:01 /usr/bin/spamd -d -c -m5 -H



■SpamAssassin の動作確認

ここまで設定できたら、SpamAssassinが正常に機能しているかどうかを確認してみます。なんでもいいので自分宛にメールを送り、メールヘッダーを確認してみましょう。以下のような記述があれば、SpamAssassinは問題なく動作しています。自分で送信したメールなので、「X-Spam-Status: No」とスパムではないとの判定を確認できます。

X-Spam-Status: No, hits=-0.084 required=6.31 tests=[ALL_TRUSTED=-2.82, AWL=-0.194, DOMAIN_RATIO=1.36, MISSING_SUBJECT=1.57]
X-Spam-Level:

◆トラブルシューティング

私は通常メールを自分宛に送信しても上記のようなヘッダーが付加されませんでした。けれども、Spam メールが送信されてくるとヘッダーには正常に「X-Spam-Status」と「X-Spam-Level」の記述がされていました。ということは、一定のスコア以上の場合にはヘッダーが付加され、そのスコアを下回る場合はヘッダーは付加されないという設定がどこかのファイルで効いている事になるわけですが、その設定ファイルがどこにあるかわからず1日近く悩みました(笑)。SpamAssassinの旧バージョンでは、「always_add_headers」という値を「1」にすればヘッダーはつくみたいですが、私の場合はその限りではありませんでした。原因は、amavisd.conf の設定にありました。amavisd.conf に以下のような行があるのでコメントアウトするか、-999 とかいう数値を入力しておきましょう。これで、通常メールにもX-Spam-Status とX-Spam-Level のヘッダが挿入されるようになります。

# vi /etc/amavisd.conf

//このスコア値以上のメールにX-Spam-StatusとX-Spam-Levelヘッダを挿入する
$sa_tag_level_deflt = -999;


//このスコア値以上の場合に'X-Spam-Flag: YES'ヘッダを挿入する
$sa_tag2_level_deflt = 6.31;



■SpamAssassin の予習

SpamAssassin には学習機能があり、過去にスパムと判断したメールを学習させていくことで、精度を高めるができます。また、スパムメールではないのに、スパムであると誤判定されてしまったメールは「このメールはスパムではない」ということを学習させてあげることも必要です。スパムメールを学習させるには、「sa-learn --spam」、誤判定を学習させるには、「sa-learn --ham」を実行します。まず、スパムメールを学習させるために、TLECで用意しているスパムメールをダウンロードしてきてそれを学習させます。(2004年後半から2005年1月初旬迄の spam の一部を集めたもの。)以下のコマンドを実行すると終了するまでに10分ぐらいかかるのでコーヒーでも作って気長に待っていましょう。

$ wget http://www.flcl.org/~yoh/yoh_spam_050102.tar.bz2
$ tar xvjf yoh_spam_050102.tar.bz2
$ /usr/bin/sa-learn --spam ./home/yoh/spam/spam/
Learned from 1271 message(s) (1274 message(s) examined).

上記のコマンド実行後には、.spamassassin 直下にbayes_seen と bayes_toks が作成され、これがBayesian フィルタ用のデーターベースファイルになります。Bayesianフィルタは、ある程度のメール量を学習してからでないと動作を開始しません。数通程度の量では、bayes_seen と bayes_toksは作成されませんでした。また、Bayesianフィルタでの学習よりも、user_prefsで指定した条件の方が優先されるそうです。他のユーザにもsa-learn を実行すると無駄に時間がかかってしまうのでこの2つのファイルを他ユーザの~/.spamassassin 以下にコピーしてあげる方がてっとり早いでしょう。

誤判定してしまったメールは次のように、--ham オプションをつけて学習させてあげます。ファイル単位でもディレクトリ単位でも指定することが可能です。

# /usr/bin/sa-learn --ham /home/*/Maildir/cur
Learned from 15 message(s) (15 message(s) examined).

■cron による自動学習

上記で説明した学習をその都度実行していたのでは手間がかかってしまうのでcron に登録して自動実行できるようにしておきます。まず、以下のようなシェルスクリプトを作成します。

# touch /usr/local/bin/sa-learn.sh
# chmod +x /usr/local/bin/sa-learn.sh
# vi /usr/local/bin/sa-learn.sh

#! /bin/sh

# スパムメールの学習
/usr/bin/sa-learn --spam /home/*/Maildir/.Spam/cur

# 通常メールを学習
/usr/bin/sa-learn --ham /home/*/Maildir/cur


cron に登録します。1日に1回実行するようにします。こうすることで、spam ディレクトリにスパムメールを入れておけばそれを学習してくれるし、仮に誤判定してしまったとしても、通常メールのディレクトリに戻しておけばそれを通常メールであると再学習してくれます。

# vi /etc/crontab
30 4 * * * root /usr/local/bin/sa-learn.sh



■razor2のインストール

Version razor-agents-2.75
razor-agents-sdk-2.06
Homepage http://razor.sourceforge.net/
Install razor-agents-2.75.tar.bz2
razor-agents-sdk-2.06.tar.bz2

razor2 は分散データベースファイルシステムのことで、SpamAssassinと連携して機能させることができます。razor2をインストールするとSpamAssassin はrazor2の存在を自動的に検出してくれるのでSpamAssassin側で設定することは一切ありません。

◎razor-agents-sdk のインストール
# tar xvjf razor-agents-sdk-2.06.tar.bz2
# cd razor-agents-sdk-2.06
# perl Makefile.PL
# make
# make test
# make install

◎razor-agents-2.75 のインストール
# tar xvjf razor-agents-2.75.tar.bz2
# cd razor-agents-2.75
# perl Makefile.PL
# make
# make test
# make install

インストール後には以下のコマンドを実行して、デフォルトの設定ファイルを生成します。-d オプションはデバッグを標準出力します。-home オプションでインストールする場所を指定します。なお、razor2 はTCPの2703番を使用するのでルータやフィルタリング等で2703番ポートを閉じている場合は、下記のコマンド実行する前に必ずポートを空けるようにしてください。そうでないと、外部(WAN側)にでれないためにコマンドを実行しても失敗します。

$ /usr/bin/razor-admin -d -create -home=/home/kororo/.razor

-d オプションをつけて実行すると、「razor-admin finished successfully.」といったデバッグメッセージが標準出力されます。.razor/ ディレクトリ直下には、razor-agent.conf が作成されています。ここでrazor2 が実際に動作しているのかどうかを確かめるために自分宛にメールを送ってみてください。メールの送信後、.razor/ ディレクトリにrazaor-agent.log というファイルが作成されていますので以下のようなログが記述されていることを確認してください。このログは、razor-agent.conf で、debuglevel = 3 となっているために出力されるので、このdebuglevel を「1」に編集しなおして極力余計なログは吐かないように設定しておくと良いでしょう。

$ tail razor-agent.log

Jul 09 05:13:12.191349 check[18159]: [ 2] [bootup] Logging initiated LogDebugLevel=3 to file:/home/kororo/.razor/razor-a gent.log

Jul 09 05:13:13.406629 check[18159]: [ 3] mail 1 is not known spam.

razor2 は、TCP 2703番を使ってメールがスパムであるか否かを外部の共有データベースへ照合しにいくため、通常の受信より少し時間がかかります。自分宛にメールを送ってみればその遅さがすぐにわかります。通常なら1~2秒で届くメールが5秒ぐらいかかるようになります。もし、このもたつきが耐えられないというのであれば、local.cf もしくは、user_prefs でrazor2 を使わないように指定することもできます。その場合は以下のようにuse_razorの値を「0」にします。

$ vi .spamassassin/user_prefs

# default Use=1,Not Use=0
use_razor2 0

razor-agent.log は肥大化していくのできちんとログのローテーションを行っておきましょう。

# touch /etc/logrotate.d/razor

◎/etc/logrotate.d/razor
/home/kororo/.razor/razor-agent.log {
weekly
rotate 4
missingok
create 0644 kororo kororo
}



■参考サイト

⇒Mail::SpamAssassin::Conf
⇒razor2 Documentation
⇒razor-agent.conf







TOPに戻る

Sponcerd Link


Search
 
Web サイト内
Rental Server

【レンタルサーバのXbit】 低価格・高品質のビジネスクオリティー。300メガ1,050円~30分で サービススタート可能!


容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ



当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらのメールアドレスよりお願いします。
Beginning | Introduction | Installation | Server |
Security | Tips | Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: