はじめての SpamAssassin for SpamAssassin version 3.1.0

著者:佐藤裕介 (nuts@cclub.cc.tut.ac.jp)
バージョン:2006/03/20 00:17:13 +0900 (JST)
このドキュメントは、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。 クリエイティブ・コモンズ・ライセンス

この文書の内容・免責事項

この文書では、 spam 除けプログラムである SpamAssassin を使う際の最初の 一歩について述べます。内容としては、 http://wiki.apache.org/spamassassin/UsedViaProcmailhttp://wiki.apache.org/spamassassin/SingleUserUnixInstall からのつまみ 食い、といった程度のものです。

この文書では、次のような内容は扱いません。

なお、このドキュメントの内容の正確さについては無保証です。また、このド キュメントに書かれていることを実行した結果直接的および間接的に発生した 損害について、私(佐藤裕介)は何ら責任を負いかねます。特に、設定のミス によってはメールが lost してしまうことも考えられますので、導入は慎重に。 私は、メールが lost しても大丈夫そうなアカウントでしか使っていません。

想定する読者・環境

この文書では、次のような読者を想定しています。

この文書の内容は、次の環境で正常動作を確認しました。

SpamAssassin と procmail が使えるようになっているか確かめる

まず、インストールされているかどうかのチェックです。次の 2 つのコマン ドを実行します。

$ which procmail
/usr/local/bin/procmail
$ which spamassassin
/usr/local/bin/spamassassin

どちらかでパスが表示されなかったらアウトです。 管理者にインストールをお願いするか、あきらめましょう。

次は、 SpamAssassin が正常に動作するかどうかのチェックです。次のコマン ドを実行します。

$ spamassassin -D < /usr/local/share/doc/p5-Mail-SpamAssassin/sample-nonspam.txt \
>  > spamassassin-output.txt 2>&1

出力されたファイルに grep をかけて……

$ grep "found bayes db" spamassassin-output.txt
ちゃんとインストールされていれば、何行かマッチするはず。 Perl の DB_File パッケージに関係している、らしい。
$ grep "is DNS available" spamassassin-output.txt
ちゃんとインストールされていればマッチするはず。Perl の Net::DNS パッ ケージに関係している、らしい。

$ grep "registering glue method for check_for_spf_helo_pass" spamassassin-output.txt

$ grep "Razor2 is available" spamassassin-output.txt

$ grep "Pyzor is available" spamassassin-output.txt

$ grep "DCC is available" spamassassin-output.txt
この 4 つはマッチしなくてもいいけど、マッチしていれば spam 検出率 UP? それぞれ、 Mail::SPF::Query, Razor, Pyzor, DCC に関係している、らしい。

Perl のバージョンについて

http://svn.apache.org/repos/asf/spamassassin/branches/3.1/INSTALL (バージョンが古くなりますが、日本語訳は http://www2s.biglobe.ne.jp/~nuts/archive/translation/SpamAssassin/INSTALL.ja )には「Perl 5.8.x を使っているとトラブるかもよ」とか恐いことが書いて ありますが、気にしなくてもいいでしょう。結局「設定しても何も変わらない という報告もあるよ」ということのようですし。

.forward ファイルを作成する

ホームディレクトリに、次のような内容を含む .forward ファイルを作成 します。システムの MTA が qmail の場合は .qmail かもしれません ( qmail の場合でも次の内容でいいかは未確認です)。

なお、メールの受信が不可能になる時間をできるだけ少なくするために、ここ では dot.forward とかいうファイル名にしておいて、後で(受信テスト の前に)リネームする、という方法がおすすめです。

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

ここで、 procmail へのパスはシステムごとに違う可能性があります。また、 user はユーザ名で置き換えてください。例えば私のアカウントだったら……

$ cat .forward
"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #nuts"

.procmailrc ファイルを作成する

以下の内容を含む .procmailrc ファイルをホームディレクトリに作成します。 ソースは procmailrc.example で、ここから DROPPRIVS=yes という設 定を取り払ってあります。

# SpamAssassin sample procmailrc
#
# Pipe the mail through spamassassin (replace 'spamassassin' with 'spamc'
# if you use the spamc/spamd combination)
#
# The condition line ensures that only messages smaller than 250 kB
# (250 * 1024 = 256000 bytes) are processed by SpamAssassin. Most spam
# isn't bigger than a few k and working with big messages can bring
# SpamAssassin to its knees.
#
# The lock file ensures that only 1 spamassassin invocation happens
# at 1 time, to keep the load down.
#
:0fw: spamassassin.lock
* < 256000
| spamassassin

# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
almost-certainly-spam

# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
probably-spam

# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped.  This will re-add it.
:0
* ^^rom[ ]
{
  LOG="*** Dropped F off From_ header! Fixing up. "
  
  :0 fhw
  | sed -e '1s/^/F/'
}

この設定では、次のような処理を規定しています。

spam っぽいメールあっても受信はしておきたい、という場合は、 20 行目〜 22 行目、 26 行目〜 28 行目をコメントアウト(先頭に # を付加)して ください。 spam っぽいメールは特殊な形式 [1] に変換されるだけで、その まま受信できるようになります。

[1]メールの本文は「これは spam だよ」という内容のメッセージで、元々 送られてきたメールは添付ファイルとして付加されている、という形 式になっています。

なお、場合によっては、パイプを使ってメールの内 容を spamassassin に渡している部分(16行目)に spamassassin へのフルパ スを記述する必要があるかもしれません。例えば……

:0fw: spamassassin.lock
* < 256000
| /usr/local/bin/spamassassin

テストする

メールの受信と spam の判定が正常に行えているかどうかテストをします。 .forward ファイルを作成する際に dot.forward というファイル名に していた場合は、ここで .forward にリネームしてください ( mv -i dot.forward .forward )。

ham のテスト

最初に ham (spam でないメール)のテストです。 spam っぽくない内容のメー ル(適当でいいです。「テストです」とか)を自分で作成し、好きな MUA を 使って自分のアカウントに送信します。正しく設定できていれば、自分宛てに 送ったメールを受け取れるはずです。

ここで受信できなかったら、 すぐに .forward ファイルを dot.forward に リネームして、それから 原因を探してください。他から来たメールが lost する可能性を最小限にするためです。

原因としては、次のようなものが考えられます。

  • 非 root ユーザなのに .procmailrc に DROPPRIVS=yes が書いてある (?)
  • .procmailrc に書いてある spamassassin へのパスが間違っている・パスが 切れていない
  • .forward に書いてある procmail へのパスが間違っている
  • .forward に書いてあるユーザ名が間違っている (?)

spam のテスト

次に spam のテストです。次の内容を含むメールを自分で作成し、好きな MUA を使って自分のアカウントに送信します。

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

この内容が含まれるメールは必ず spam だと判定される、ようです。正しく設 定できていれば、自分のホームディレクトリの下に almost-certainly-spam というファイルができていて、その中にこのメー ルの内容が含まれているはずです。

更新履歴

2006-03-20
  • 最初のバージョン。