bsfilterを使用したスパム対策

自宅のスパムメール対策として、エンベローブの送信者ドメインや、本文の禁止文字を指定して拒否をしていますが、スパム業者はドメインを頻繁に更新してくるためいたちごっこになります。そこで、bsfilterと言うベイジアンスパムフィルタを導入しました。

bsfilterとは

bsfilterはスパムに多く含まれる単語の統計をとり、 受信したメールがスパムかどうかを判定するアプリケーションです。一般では、外部のプロバイダメールをfetchmailで受信する際にbsfilterを使用する人が多いですが、家は自前でSMTPサーバを運用していますので、postfixと連携させて動作させています。
導入時のインストールのメモを誤って消してしまったので、設定が漏れているかもしれませんが、以下に覚えている限り記載します。

bsfilterの導入

まず、bsfilterのインストールですが、例のごとくFreeBSDのportsでインストールしました。bsfilterのインストーラは「/usr/ports/mail/bsfilter/」にあります。

  • bsfilterユーザの作成

bsfilterを実行するために、bsfilterユーザを作成します。

# cat /etc/passwd | grep bsfilter
 
bsfilter:*:XXXXX:XXX:User &:/var/lib/bsfilter:/usr/sbin/nologin
 

  • master.cfの修正

受信したメールをbsfilterのwrapperに渡す設定です。青色の箇所をコメントアウトして、赤色の箇所を追加しました。

# cat /usr/local/etc/postfix/master.cf
 
#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ===============================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ===============================================
#smtp    inet  n     -     n     -     -     smtpd
smtp      inet  n     -     n     -     -     smtpd -o content_filter=bsfilter:dummy
bsfilter   unix  -     n    n     -     -     pipe flags=Rq user=bsfilter argv=/usr/local/bin/bswrapper.sh -f ${sender} -- ${recipient}
 

  • bsfilter.confの作成

bsfilterの設定ファイルです。スコア0.4以上でスパム判定するように設定します。

# cat /usr/local/etc/bsfilter.conf
 
homedir /var/lib/bsfilter
spam-cutoff 0.4
pipe
insert-flag
insert-probability

ここまで設定が完了したら、設定を反映させるためpostfixの再起動をしてください。
 

スパムデータベースの作成

bsfilterの導入時点では、bsfilterはスパムに対して何も学習していないため、白黒を判断できません。そのため、スパムメールとスパムでないメールをbsfilterに学習させてやる必要があります。
学習時ですが、コマンドはbsfilterユーザで実行してください。もしrootユーザで実行した場合、権限によりスパムデータベースの更新が出来なくなります。後、スパムメールの学習をした際はアップデートを忘れないでください。

■スパムメールの登録方法
# sudo -u bsfilter /usr/local/bin/bsfilter --config-file /usr/local/etc/bsfilter.conf -s spam032
 
■スパムでないメールの登録方法
# sudo -u bsfilter /usr/local/bin/bsfilter --config-file /usr/local/etc/bsfilter.conf -c white032
 
■スパムデータベースのアップデート
# sudo -u bsfilter /usr/local/bin/bsfilter --config-file /usr/local/etc/bsfilter.conf -u
 
■スパムの確認
# sudo -u bsfilter /usr/local/bin/bsfilter --config-file /usr/local/etc/bsfilter.conf spam032

 

SPAMと判別されたメール

実際の受信メールのヘッダ部分です。bsfilterを通すことで「X-Spam-Flag」と「 X-Spam-Probability」が追加されます。bsfilterに学習させているメールの数が少ないと、完全なスパムでも0.5前後のポイントにしかなりません。学習はそれなりに数が多いほうが良いです。

To: <xxxxx@or2.to>
X-Priority: 1
Subject: ◇◆◇◆◇◆◇◆ 夜のお供に  ◆◇◆◇◆◇◆◇   
From: "■満足度100%■" <zune-zune@hotmail.com> 
Message-Id: <3VTb2Bo.3IJab09o@uZSWd4MyExg45cM1i>
Reply-To: <zune-zune@hotmail.com>
Date: Sat, 17 Sep 2011 07:34:56 +0900
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
X-MSMail-Priority: High
Mime-Version: 1.0
Content-Type: text/plain; charset=Shift-JIS
X-Spam-Flag: Yes
X-Spam-Probability: 0.498481

 

SPAM判定したメールの拒否設定

メールヘッダから拒否する文字列を検索して拒否する設定です。「X-Spam-Flag: Yes」がヘッダに存在した場合メールを拒否します。bsfilterを導入することによりpostfixは外部からのメールを2回受信するような動きをします。1回目のメールは外部から受信で、2回目はbsfilterから受信です。ここでは2回目の受信時に判断しています。

# cat  /usr/local/etc/postfix/main.cf
(途中省略)
header_checks = regexp:/usr/local/etc/postfix/header_checks
 
# cat /usr/local/etc/postfix/header_checks
/^X-Spam-Flag: Yes/     REJECT

 

関連記事

人気記事のランキング

トラックバックURL

このエントリーのトラックバックURL:
http://or2.to/mt/mt-tb-mt.cgi/66

コメントする