Tips記事
» 2003年05月30日 15時30分 UPDATE

スパムを抹殺させたい−SpamAssassin

[木田佳克,ITmedia]

 増えることはあっても減ることはない昨今のスパムメール事情。何らかの支障を来している人におすすめなのが、文字列のパターンマッチングによる排除を行うツール「SpamAssassin」だ。SMTPサーバ上でProcmailと組み合わせて動作をさせる。

http://spamassassin.org/

 パターンマッチによる排除では重要なメールまでを削除されないかと心配だろう。しかし、SpamAssassinでは、バージョンを重ねることで「スパムに該当する条件」が確立されているという強みがある。日本語圏でも多くのユーザーがいるため実績も多い。インストール直後は100%までとはいかないものの、試験運用を行えば数週間で実用レベルへと移行できるはずだ。

1. Procmailをインストール

 まず最初に、「Procmail」が必要となる。メールを振り分けするために利用するのだ(関連記事)。インストールされているかどうかは、次のようにして確認しよう。存在しない場合には、システムCD-ROMやISOファイル、「SpeakEasy.Rpmfind.Net」などで検索し、インストール(# rpm -ivh procmail-xxxx.rpm)するとよい。

$ rpm -qa|grep procmail
procmail-3.22-9

2. SpamAssassinをtarボールかRPMでインストール

 次にSpamAssassinをインストールしよう。選択肢としては、tarボールとRPMパッケージがある。希望する方をダウンロードすればよい。

http://au.spamassassin.org/downloads.html

 なお、Red Hat Linux自体にもSpamAssassinがパッケージされているため、up2date(Red Hat Network)を利用しているのであれば、こらを利用した方が無難だ。

 tarボールでは次のように、指定する。

$ tar zxfv Mail-SpamAssassin-2.55.tar.gz
$ cd Mail-SpamAssassin-2.55
$ ./configure
# make; make install

 なお、make install実行の最後に表示されるように、chmod 755 /usr/share/spamassassinとして/usr/share/ディレクトリ下に、実行ファイルがインストールされる。後で利用するため、覚えておこう。

 RPMパッケージでは次のように指定すればよい。後述するが、RPMであればデーモンスクリプトまでも適所にインストールされるため、後々の設定が楽だ。

# rpm -Uvh spamassassin-2.55-1.7.3.i386.rpm perl-Mail-SpamAssassin-2.55-1.7.3.i386.rpm

 次に設定ファイルを用意する。注意点として、該当させるユーザーディレクトリ下に用意するProcmailの設定ファイル(~/.procmailrc)は、置いたとたんに機能するため、いちばん最後に配置する。

3. SpamAssassinの設定ファイルを用意

 SpamAssassinの設定ファイルは2通りだ。用途に応じてどちらかを選択すればよい。

/etc/mail/spamassassin/local.cf

または、

~/.spamassassin/user_prefs

 上記設定ファイル内では、スパム排除を行うためのルール(パターン)を記述する。それぞれは、「local.cf」ファイルがドメイン下すべてのユーザーに対し、「user_prefs」ファイルは1ユーザーのみに有効とさせたい場合だ。

 なお、記述内容のサンプルは、/usr/share/spamassassin/下に用意されている。実は、この設定こそがSpamAssassinの挙動を左右させる重要な設定になるのだが、日本語圏(2バイト)のサンプルは含まれていないため、Googleなどで「local.cf user_prefs spamassassin」など入力して検索してほしい。

# ls /usr/share/spamassassin/
# ln -s /usr/local/share/spamassassin/15_site.cf ~/.spamassassin/user_prefs

 最後にProcmailのための振り分け設定を行う。SpamAssassinでは、スパムかどうかを判定するために受信メールのヘッダに判定ポイントを書き込む。このポイントをProcmailで判別し、該当するスパムを条件で振り分けるという仕組みだ。

 1メールごとの実行であれば、


:0fw
*!^X-Spam.*
        |/usr/share/spamassassin -P
:0:
* ^X-Spam-Status: Yes
spam/

 デーモン(spamd)実行の場合には、


:0fw
*!^X-Spam.*
        |/usr/bin/spamc
:0:
* ^X-Spam-Status: Yes
spam/

の内容で、「.procmailrc」のファイル名でホームディレクトリ下に用意する($ vi ~/.procmailrc)。受信メール数が多い場合には、その都度呼び出される実行形式(spamassassin)よりも、後者のデーモン利用(spamc)がよいだろう(ただし上記例は最も基本的な設定であり、また、$ mkdir ~/spamとしてあらかじめディレクトリを作っておく必要がある)。

 SpamAssassinが機能しているかどうかは、受信メールのヘッダを見ればよい。次のような行が含まれているはずだ。パターン認識にて判定が行われ、「X-Spam-Level:」行の「*」の数でProcmailが振り分ける。

〜中略〜

X-Spam-Status: No, hits=7.6 required=10.0
  tests=HTML_40_50,HTML_IMAGE_ONLY_10, .....
      HTML_TAG_EXISTS_TBODY, ...
      PRIORITY_NO_NAME,RCVD_IN_NJABL, ...
      ROUND_THE_WORLD_LOCAL,WORK_AT_HOME   version=2.55
X-Spam-Level: *******
X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp)

〜以下略〜
−メール本文につながる−

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ