[最終更新:2007/01/05]

スパムフィルターのインストールと設定

1、procmail の設定


■ procmail の共通設定( pocmail に スパム表示をさせるための設定)
# vi /etc/procmailrc
PATH =/bin:/usr/bin ←各種パスの設定
MAILDIR = $HOME/Maildir
DEFAULT = $MAILDIR/
LOGFILE = $MAILDIR/procmail.log
LOCKFILE = $HOME/.lockfile
:0fw
|/usr/bin/spamc ←スパムメールかどうかの判断を spamassassin に実行させる。
:0 fw
| /usr/local/bin/bsfilter --pipe --insert-flag --insert-probability ←スパムメールかどうか bsfilter に判断させ、flag と 可能性をメールヘッダーに挿入させる。
:wq ← 保存して終了。

■各人の設定 ( スパムメールを各人の設定したフォルダーに移動させる設定で、各人のホームディレクトリーに作成 )
# exit
$ vi ~.procmailrc
SHELL = /bin/bash ←各種パスの設定
PATH = /bin:/usr/bin:/usr/local/bin
MAILDIR = $HOME/Maildir ←
LOGFILE = $MAILDIR/procmail.log
LOCKFILE = $HOME/.lockmail

:0
* ^X-Spam-Status: Yes ← spamassassin がスパムと判断しメールヘッダーに Yes と記載されていれば
$MAILDIR/.Junk/ ← そのメールを .Junk フォルダーに移動させる。

:0
* ^X-Spam-Flag: Yes ← bsfilter がスパムと判断しメールヘッダーに Yes との記載があれば、
$MAILDIR/.Junk/ ← そのメールを .Junk フォルダーに移動させる。

:0
* X-Spam-Probability: *(1|0\.[89]) ← bsfiler が、スパムの可能性を 0.8 以上とメールヘッダーに書き込んであれば、
$MAILDIR/.Junk/ ← そのメールを .Junk フォルダーに移動させる。

:wq ←保存して終了

2、スパムフィルターのインストールと設定



■ bsfilter のインストール
# yum install ruby ←bsfilter は Ruby を使用するため、先にインストールする。
# cd /tmp
# wget http://osdn.dl.sourceforge.jp/bsfilter/21887/bsfilter-1.0.15.tgz ←/tmpディレクトリーにダウンロード。2006年11月中旬現在のバージョンは1.0.15が最新。
# tar zxvf bsfilter-1.0.15.tgz ←展開。
# cp bsfilter-1.0.15/bsfilter/bsfilter /usr/local/bin ←/usr/local/bin にコピー

■ spamassassin のインストール
# yum install spamassassin ← すでにインストールされていた。
# /etc/ini.d/spamassassin start
# /sbin/chkconfig spamassassin on
# exit

■ スパムフィルターの学習
$ EDITOR=vi crontab -e
no crontab for 一般ユーザー名 - using an empty one
crontab: installing new crontab
0 2 * * * /usr/bin/sa-learn --spam --dir $HOME/Maildir/.Junk/cur/ ←毎朝2時に、spamassassin が ./Junk/cur フォルダー(既読)のメールをスパムと学習する。
0 3 * * * /usr/bin/sa-learn --ham --dir $HOME/Maildir/cur/ ←毎朝3時に spamassassin が cur フォルダー(既読)のメールを安全なメールと学習する。
0 4 * * * /usr/local/bin/bsfilter --add-spam $HOME/Maildir/.Junk/cur/* ←毎朝4時に bsfilter が./Junk/cur フォルダー(既読)のメールをスパムと学習する。
0 5 * * * /usr/local/bin/bsfilter --add-clean $HOME/Maildir/cur/* ←毎朝5時に bsfilter が cur フォルダー(既読)のメールを安全なメールと学習する。
30 5 * * * /usr/local/bin/bsfilter --update ←毎朝5:30に bsfilter が学習データーベースをアップデートする。
:wq ←保存して終了
"/tmp/crontab.XXXX1a8W0q" 7L, 308C

ここまでの設定がうまくいっていると、メールヘッダーには以下のようなスパムフィルターの判定結果が挿入されている。そして各人の .procmailrc の設定に従って、スパムでないと判定されたメールは 一般ユーザー名/Maildir/new に、スパムと判定されたメールは 一般ユーザー名/Maildir/.Junk/new に送られる。

Return-Path: <root@e-sen.com>
X-Original-To: 一般ユーザー名@localhost
Delivered-To: 一般ユーザー名@localhost.e-sen.com
Received: by libretto.e-sen.com (Postfix, from userid 0)
id 71AF060038; Sun, 3 Dec 2006 19:31:06 +0900 (JST)
To: 一般ユーザー名@localhost.e-sen.com
Subject: This is test mail
Message-Id: <20061203103106.71AF060038@libretto.e-sen.com>
Date: Sun, 3 Dec 2006 19:31:06 +0900 (JST)
From: root@e-sen.com (root)
X-Spam-Checker-Version: SpamAssassin 3.0.6 (2005-12-07) on libretto.e-sen.com
X-Spam-Level:
X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.0.6
X-Spam-Flag: No
X-Spam-Probability: 0.000000


スパムメールと判定されたメールのヘッダーをみると以下の通り。結構学習を済ませた後に受信したメールであるが、名うてのスパムメールらしく、いろいろなブラックリストに名前が載っている。

X-Spam-Flag: Yes
X-Spam-Checker-Version: SpamAssassin 3.1.7 (2006-10-05) on libretto.e-sen.com
X-Spam-Level: ***********************************
X-Spam-Status: Yes, score=35.1 required=5.0 tests=BAYES_99,
DATE_IN_FUTURE_03_06,DNS_FROM_RFC_ABUSE,DNS_FROM_RFC_POST,
DRUGS_ANXIETY,DRUGS_ANXIETY_EREC,DRUGS_ANXIETY_OBFU,DRUGS_ERECTILE,
DRUGS_ERECTILE_OBFU,DRUGS_SLEEP,DRUGS_SLEEP_EREC,RCVD_IN_DSBL,
RCVD_IN_XBL,URIBL_JP_SURBL,URIBL_OB_SURBL,URIBL_SBL,URIBL_SC_SURBL autolearn=spam version=3.1.7
X-Spam-Report:
* 2.0 DATE_IN_FUTURE_03_06 Date: is 3 to 6 hours after Received: date
* 3.5 BAYES_99 BODY: Bayesian spam probability is 99 to 100%
* [score: 1.0000]
* 0.2 DNS_FROM_RFC_ABUSE RBL: Envelope sender in abuse.rfc-ignorant.org
* 2.6 RCVD_IN_DSBL RBL: Received via a relay in list.dsbl.org
* [<http://dsbl.org/listing?125.135.15.172>]
* 3.9 RCVD_IN_XBL RBL: Received via a relay in Spamhaus XBL
* [125.135.15.172 listed in sbl-xbl.spamhaus.org]
* 1.7 DNS_FROM_RFC_POST RBL: Envelope sender in
* postmaster.rfc-ignorant.org
* 1.6 URIBL_SBL Contains an URL listed in the SBL blocklist
* [URIs: vaseruinhdnefgungandesin.com]
* 4.1 URIBL_JP_SURBL Contains an URL listed in the JP SURBL blocklist
* [URIs: vaseruinhdnefgungandesin.com]
* 3.0 URIBL_OB_SURBL Contains an URL listed in the OB SURBL blocklist
* [URIs: vaseruinhdnefgungandesin.com]
* 4.5 URIBL_SC_SURBL Contains an URL listed in the SC SURBL blocklist
* [URIs: vaseruinhdnefgungandesin.com]
* 2.4 DRUGS_ERECTILE_OBFU Obfuscated reference to an erectile drug
* 0.5 DRUGS_ERECTILE Refers to an erectile drug
* 1.7 DRUGS_ANXIETY_OBFU Obfuscated reference to an anxiety control drug
* 0.4 DRUGS_ANXIETY Refers to an anxiety control drug
* 0.0 DRUGS_SLEEP Refers to a sleep aid drug
* 2.7 DRUGS_SLEEP_EREC Refers to both an erectile and a sleep aid drug
* 0.2 DRUGS_ANXIETY_EREC Refers to both an erectile and an anxiety drug
(途中省略)
Subject: [SPAM] Gibson and Tinseltown have been locked in an awkward dance
Date: Sat, 16 Dec 2006 11:11:59 -0540
Message-ID: <01c72103$0142c500$6c822ecf@cerate>
MIME-Version: 1.0
Content-Type: text/plain;
charset="windows-1250"
Content-Transfer-Encoding: 7bit
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1478
Importance: Normal
X-Spam-Prev-Subject: Gibson and Tinseltown have been locked in an awkward dance
X-Spam-Probability: 0.998601


■ procmail.log の肥大化を防止

ある時、どうもメールを取りこぼしているような気がする・・・これが一般ユーザーへの配信不能を意味するのか・・・メールには届けられなかったファイル(これもテキスト形式のメールだが。)が添付されている。postmaster に聞けっていわれても、このサイトではすべて自分。なんとかじぶんで解決しなければ・・・
まだ推測の域を出ないのだが、大量のスパムメールの配送をやっているうちに、procmail.log が肥大化しているのが原因のような気がする。
This is the Postfix program at host libretto.e-sen.com.
I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster
If you do so, please include this problem report. You can delete your own text from the attached returned message.
The Postfix program
<一般ユーザー名@e-sen.com>: Command time limit exceeded: "/usr/bin/procmail"

はっきりしないが・・・とりあえず plocmail.log をローテーションするよう設定して様子を見ることにした。

# vi /etc/logrotate.d/procmail_一般ユーザー名
/home/一般ユーザー名/Maildir/procmail.log {
rotate 7
size 100k
missingok
daily
noolddir
}
:wq
【参考ページ】

ウィルスフィルターの設定
メールの基本的な設定
CentOS 4.4 のトップ