« ThinkITでPHP開発手法の連載の第7回目が掲載されました | メイン | 携帯で使える無料のメーリス「sugu.CC(ベータ版)」を公開しました »

ベンチャー流のスパムメール対策術(前編)
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

先週まで風邪や雨の多い日が続いていてなかなか自転車通勤ができませんでしたが、今日から自転車通勤を再開したnaoyaです。

今日は、僕がメールサーバを新しく構築するにあたって新たにスパム対策を施したので、その内容について紹介します。

まず、メールサーバですが、次のようなオープンソースソフトウェアで構成されています。

それぞれ yum で最新版をインストールしていました。さらにウノウではメーリングリストを使っているのですが、メーリングリストの配送プログラムには mailman を使っています。mailman も yum で最新版をインストールしました。

さてスパムメールですが、よくメーリングリスト宛にたくさん送られてくるのに対して個人宛にはまったく送られてきません。

そこで、メーリングリストプログラムでメールの配送前にスパム対策を施そうと、まずはオープンソースで使えるスパムフィルターを探してみました。

次の三つのスパムフィルターが見つかりました。

それぞれのスパムフィルターの特徴は、次の通りです。

SpamAssassin

おそらく世界で一番有名なスパムフィルターだと思います。Perl で書かれており、デーモンとしても動作します。

bsfilter

Ruby で書かれているスパムフィルター。作者が日本人のため、日本語に標準で対応しています。

bogofilter

C 言語で書かれているスパムフィルター。C 言語のため高速に動作する。

すべてのスパムフィルターを使うとメールの配送が遅れてしまう予感がしたので、まずはどのスパムフィルターを使うと効果的か自分のメール環境で試してみました。

それぞれのスパムフィルターを試すために、インストールと設定をしました。

SpamAssassin

  1. # yum -y install spamassassin
  2. 設定ファイル (/etc/mail/spamassassin/local.cf) を日本語対応のファイルに置き換える(*1)
  3. # chkconfig spamassassin on
  4. # /etc/init.d/spamassassin start

(*1) Tokyo Linux Entertainment Community様にて配布されている定義ファイルが便利です。

bsfilter

パッケージはないため、ホームページから最新版をダウンロードして展開します。

bogofilter

日本語に対応させるため、kakasi もあわせてインストールします。

  1. # yum install bogofilter
  2. # yum install kakasi


スパムフィルターをインストールしてたら、まず行うのは Ham& Spam メールの学習です。
スパムフィルターの学習を手動で毎回行うのは面倒のため、次のようなシェルスクリプトを作って cron で深夜 0 時に毎日実行するようにしました。
なお、下記のシェルスクリプトでは、MailDir 形式で spam ディレクトリにスパムメールが存在して、cur ディレクトリ(つまり Inbox)に通常のメールがある前提で作成されていますので注意してください。

#!/bin/sh
BGFILTER=/usr/bin/bogofilter
BSFILTER=/opt/bsfilter/bsfilter/bsfilter
SALEARN=/usr/bin/sa-learn
MAILDIR=$HOME/Maildir

# spam
echo "spam for bogofilter..."
find $MAILDIR/.spam/cur -name "*" -type f -exec nkf -Z -m -j {} \; | kakasi -w | $BGFILTER -Nsv
echo "spam for bsfilter..."
$BSFILTER -sv $MAILDIR/.spam/cur/*
echo "spam for SpamAssasin..."
$SALEARN --spam $MAILDIR/.spam/cur

echo ""

# not spam
echo "ham for bogofilter..."
find $MAILDIR/cur -name "*" -type f -exec nkf -Z -m -j {} \; | kakasi -w | $BGFILTER -Snv
echo "ham for bsfilter..."
$BSFILTER -cv $MAILDIR/cur/*
echo "ham for SpamAssasin..."
$SALEARN --ham $MAILDIR/cur

# update database
$BSFILTER -u

このシェルスクリプトを約2週間ほど自動実行して Ham& Spam メールの学習を行いました。 この状態で、やっとどのスパムフィルターが効果的か試験をすることにしたのですが、長くなってきましたので、続きは後編で書きたいと思います。

後編では、スパムフィルターを試した結果と mailman でのスパム対策方法について書きたいと思います。

トラックバック

このエントリーのトラックバックURL:
http://www.unoh.net/mt32/mt-tb.cgi/841

コメント

すべてのメールをgmailへ転送しスパムフィルタを通して元のアカウントへ転送、ってのはどうですか。なにげに最強ですよ。え?そんな信用できないサービス使えないって?

コメントありがとうございます。
たしかに gmail のスパムフィルターは優秀なので、その選択も考えました。しかし、仕事上のすべてのメールを gmail 経由するのはなんとなくいやだったので、自社のメールサーバで簡潔させる方法を選択しました。

コメントを投稿


画像の中に見える文字を入力してください。