Oracle Linux 6.2 に SpamAssassin 3.3.1 をインストール

Oracle Linux 6.2 にメール・サーバーを構築する第5章。統合型スパム・フィルターである Apache SpamAssassin を導入し、メール受信時に迷惑メールを排除できるようにする。今回の記事ではSpamAssassinが単独で動作するようにまで設定し、メール配送フローへの組込みは後ほどProcmailを使用して行う。以下は Oracle Linux 6.2 にインストールする方法だが、Red Hat Enterprise Linux (RHEL) / CentOS / Scientific Linux でも同様だろう。

まずはSpamAssassinをインストールしよう。

SpamAssassinがうまく迷惑メールを識別できるかどうかは設定ファイルの善し悪しに掛かっている。今回はTLECで以前公開されいた、日本語に対応している松田陽一氏のuser_prefsを使用し、Cronで定期的に更新することにした。

この設定ファイルを使用するにはtrusted_networksでローカルIPアドレスなどの信頼できるIPアドレスを設定するだけだが、ボクの環境ではSpamAssassinの学習型フィルター(ベイジアン・フィルター)で迷惑メールの可能性が高いと判断された場合には間違いなく迷惑メールなので、BAYES_*の点数をより高くに変更している。ただし、定期的な学習が必要にも関わらず実施していないユーザーが多いためにデフォルトでは低く設定されているため、後ほど紹介する定期的な学習を必ず実施しよう。また、report_safe0にすると、迷惑メールと判断された場合にもヘッダーにそれが記述されるだけで外見上の変化がなくなるので、False Positive (偽陽性。迷惑メールでないメールを誤って迷惑メールと判断すること)のときの影響が少ない。

SpamAssassinを実行するには2通りの方法がある。一つはspamassassinコマンドを使用して、その都度SpamAssassinを起動する方法。もう一つはspamdというSpamAssassinデーモンを事前に起動しておき、spamcコマンドでそのデーモンに接続しに行くクライアント・サーバー方式だ。SpamAssassinはかなり重いので、spamc/spamdを使ったほうがメール配送のボトルネックにならないだろう。

まずはspamassassinコマンドで動作検証してみよう。X-Spam-Flag:などのヘッダーが追加されて出力されるはずだ。以下では、点数が13以上のときに迷惑メールと判断されるところで、999.9点となっているために迷惑メールと判断されている。

同様にspamc/spamdでも行ってみよう。

SpamAssassinはベイズ理論を応用した学習型フィルターも備えているので、既存のメールを学習させることで、迷惑メールっぽいメールはより迷惑メールとして認識されやすくなる。迷惑メールの傾向を学習させるには以下のコマンドのように迷惑メールの入っているメール・ボックスを引数に与える。なお、この学習結果はsa-learnコマンドを実行したユーザーごとに $HOME/.spamassassin 内に保存される。

合わせて迷惑メールでないメール(ハム)も学習させよう。

Cronで実行するために、24時間以内の迷惑メールとハム・メールを学習し、7日以上古い迷惑メールを自動で削除するスクリプトを作成した。以下のソースコードはBSDライセンスを元としたこちらのライセンスに従って再頒布および使用ができる。このスクリプトの最新版は GitHub: rewse / sa-learn-all にある。

迷惑メールとハム・メールをそれぞれ200通以上学習をさせると、ヘッダーのX-Spam-Status:BAYES_00などが表示されるようになるはずだ。

コメントを残す