Postfixにスパムメールフィルターを入れる

Webサイトを公開していると公開ドメインの特定のアカウントに対してスパムメールが送られてくることも珍しくなく、僕の場合には、1日当たり200通くらいスパムメールが来る。そこで、spamassasinというソフトウエアを組み込むことで簡単にスパムメールフィルターを実装することができたので紹介する。
ちなみにインストールにあたってLinuxで自宅サーバーさんのサイトが役に立った。動作する概要を知るにはとても役に立つのでご一読いただきたい。また以下のインストール手順も多くは参考に記載しているものであることをお断りしておく。
Fedora Core 6上にPostfixが稼働している環境にspamassasinを以下の手順でインストールした。
1.yum install spamassasin コマンドを実行するとspamassasin以外にperlモジュールをたくさん入れる必要があることが分かるので、yを押す。
2.rpm -qi procmail を実行し、procmailコマンドがあることを確認する。ただし、設定ファイルである/etc/procmailrc がないため、 vi /etc/procmailrc として以下を記述する。

# パスを設定
PATH=/bin:/usr/bin:/usr/local/bin
# メールボックスの設定
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
# Procmailのログファイル出力先を指定
LOGFILE=$MAILDIR/procmaillog
# ロックファイルのパスを指定
LOCKFILE=$HOME/.lockmail
# メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動します
:0fw
*!^X-Spam.*
|spamassassin
# メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納します(ただし、POPサーバーで受信しているケースがある場合には、この設定をするとスパム扱いされたメールが確認メールソフトからできないので注意)
:0
* ^X-Spam-Status: Yes
$MAILDIR/.Spam/

※.Spamディレクトリは/home/XXX/Maildir以下に作成しなければならないようだが、みている限りでは、上記設定をすることでメールの受信が始まると勝手に作ってくれるようだ。
4.Postfixでメールを受信をした際にprocmailで処理させるために以下の記述を/etc/postfix/main.cf に記述する

mailbox_command = /usr/bin/procmail

5.spamassasinサービスを自動起動させるために以下のコマンドを実行する。
/sbin/chkconfig –level 35 spamassassin on
6.spamassasinサービスの起動&postfixの再起動を行う
/etc/init.d/spamassasin start
/etc/init.d/postfix restart
7.postfixで配送を管理しているドメインあてにメールを送ってヘッダーに以下の情報があることを確認する。

X-Spam-Checker-Version: SpamAssassin 3.1.9 (2007-02-13) on
(サーバー名)
X-Spam-Level:
X-Spam-Status: No, score=0.5 required=5.0 tests=NO_REAL_NAME,NO_RELAYS
autolearn=no version=3.1.9

もしスパムメールを受け取った場合には、.Spamというフォルダに移動され、以下のようなヘッダーが付け加えられる。

X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 3.1.9 (2007-02-13) on
(サーバー名)
X-Spam-Level: ******************
X-Spam-Status: Yes, score=18.2 required=5.0 tests=ALL_TRUSTED,
FORGED_MUA_OUTLOOK,INVALID_MSGID,REPLICA_WATCH,URIBL_JP_SURBL,URIBL_OB_SURBL,
URIBL_SBL,URIBL_SC_SURBL,URIBL_WS_SURBL autolearn=no version=3.1.9
X-Spam-Report:
* -1.4 ALL_TRUSTED Passed through trusted hosts only via SMTP
* 2.3 REPLICA_WATCH BODY: Message talks about a replica watch
* 1.1 URIBL_SBL Contains an URL listed in the SBL blocklist
* [URIs: prnewperiod.net]
* 3.4 URIBL_JP_SURBL Contains an URL listed in the JP SURBL blocklist
* [URIs: prnewperiod.net]
* 1.5 URIBL_WS_SURBL Contains an URL listed in the WS SURBL blocklist
* [URIs: prnewperiod.net]
* 2.6 URIBL_OB_SURBL Contains an URL listed in the OB SURBL blocklist
* [URIs: prnewperiod.net]
* 3.6 URIBL_SC_SURBL Contains an URL listed in the SC SURBL blocklist
* [URIs: prnewperiod.net]
* 1.7 INVALID_MSGID Message-Id is not valid, according to RFC 2822
* 3.4 FORGED_MUA_OUTLOOK Forged mail pretending to be from MS Outlook

8.定期的に学習させるためにcronへ登録する。vi /etc/cron.d/spamassasin を実行し、以下のを記述する。

0 1 * * * /usr/bin/sa-learn –spam /home/*/Maildir/.Spam/cur > /dev/null
0 1 * * * /usr/bin/sa-learn –ham /home/*/Maildir/cur > /dev/null

以上で設定完了だ。
なお、.Spamに移動したファイルは通常は読み取りできないので、もしsquirrelmailを使っているようであれば、フォルダメニューで.spamを登録すれば読み取りできるようになる。

“Postfixにスパムメールフィルターを入れる” への1件の返信

  1. 91件のメールのうち誤検出(スパムなのにもかかわらずスパム扱いされていない)は2件でした。ただ、誤検出しているものもScoreが4.1とかなり高い位置にあるため学習効果によってうまくスパム扱いにできるのではないかと期待しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です