« Solaris9にapache 2.0.49をインストール | トップページ | 航空宇宙工学実験 »

2004年4月13日 (火曜日)

procmail / bsfilter / clamav の連携

(2005年3月25日 更新しました)

私の、ウィルスとSPAM対策を紹介します。これでウィルスもSPAMも、サーバー上でほとんどブロックできます。

●利用プログラム
以下の、メールサーバー上で動くプログラムを使います。すべてオープンソースです。
自動振り分け:procmail (日本語での紹介)
ウィルス判定:Clam Antivirus (日本語での紹介)
SPAM判定:bsfilter

●動作環境
職場のメールサーバー(Solaris8/x86)上で動かしています。
procmailはすでに /usr/local/bin にインストールされていました。
clamavとbsfilterは自分だけ使うので、$HOME/binにインストールしました。何人かで使うようなら、これらも /usr/local/bin に入れればよいでしょう。下記のレシピ内のインストールパスの表記は、あなたのインストールパスに合わせて修正してください。
また、私は自分のメールを検査するだけなので"clamscan"をその都度起動するような使い方にしましたが、処理量が多い環境なら、"clamdscan"を常駐させて使ったほうが早いそうです。

●隔離用ディレクトリ
見ての通り、SPAM用/ウィルス用/即時削除 のディレクトリを定義しています。お好みで定義してください。
誤認識があった場合に、拾い出して読んだり、bsfilterの再学習に使いやすいよう、1通ずつ別ファイルに保存するようにしてます。

●procmail用レシピ(設定ファイル)


$HOME/.procmailrc
SHELL=/bin/sh
LOGFILE=$HOME/procmail/`date +log%Y%m%d`
SPAM=$HOME/procmail/spam/
VIRUS=$HOME/procmail/virus/
NULL=/dev/null
#
# Clam Antivirus
:0 HB
* ! ? $HOME/bin/clamscan -m --quiet -
$VIRUS  ($NULLでもよいだろう)
#
# bsfilter preprocess
:0 fw
| $HOME/bin/bsfilter -a --pipe --insert-probability
#
# Safe List
:0
* ^From:.*(ここにSPAMと誤認される可能性があるが、そうでないドメインを、OR演算子でつないで列挙)
$DEFAULT
#
# bsfilter
:0
* ^X-Spam-Probability: *1\.0
$SPAM



●隔離したメールのレポート
ウィルスやSPAMと誤認して削除したメールがあると困るので、procmailのログの抜粋レポートを作り、自分宛にメールして確認します。このためのシェル・スクリプトを一日一回、前日のログに対して実行します。

$HOME/procmail/report
#! /bin/sh
LOGDIR=$HOME/procmail
LOG=spamlog
if [ -d $LOGDIR ]; then
  cd $LOGDIR
  cp /dev/null $LOG
  chmod 600 $LOG
  echo "Subject: Procmail report" > $LOG
  echo "Content-Type: text/plain;" >> $LOG
  echo >> $LOG
  LOG0=`date +log%Y%m%d`
  if [ ! -f $LOG0 ]; then
    cp /dev/null $LOG0
    chmod 600 $LOG0
  fi
  LOG1=`ls -t log*|head -2|tail -1`
  if [ -f $LOG1 ]; then
    echo "##### Virusと判断されたメール #####" >> $LOG
    /usr/local/bin/grep -B 2 '^  Folder: .*/virus' $LOG1 >> $LOG
    echo "##### SPAMと判断されたメール #####" >> $LOG
    /usr/local/bin/grep -B 2 '^  Folder: .*/spam' $LOG1 >> $LOG
  fi
  /usr/local/bin/nkf -m $LOG|mail あなたのメールアドレス
fi

Virus誤認は今まで経験していません。
SPAMはbsfilterの学習が進むまでは誤認してしまいます。SPAMでないメールが誤認で隔離されていたら、そのファイルを
bsfilter --add-clean --sub-spam ファイル名
として「SPAMではないよ」と、学習させる必要があります。
そして、Outlook Expressを使っている場合、隔離されていたメールを、FTPでローカルにダウンロードしてから、受信トレイにドラッグ&ドロップすれば、通常に受信したように扱えます。

●crontabで自動更新
crontabで下記の作業を自動で行わせます。作業時刻や時間間隔、ゴミの保存期間の設定はお好みで。
・隔離レポートをメール送信
・古いprocmailのログを削除
・古いVirusメールを削除
・古いSPAMメールを削除
・clamavのウィルス定義ファイルを更新


crontab
10 0 * * * $HOME/procmail/report
0 1 * * * find $HOME/procmail -name 'log*' -ctime +7 -type f -exec rm {} \;
0 8 * * * find $HOME/procmail/virus/new/ -ctime +7 -type f -exec rm {} \;
0 9 * * * find $HOME/procmail/spam/new/ -ctime +14 -type f -exec rm {} \;
30 * * * * $HOME/bin/freshclam --quiet



●あとがき
以上、紹介しました方法は、UNIXの中級程度の知識があれば、一般ユーザー権限で導入しやすいものだと思います。さらに、サーバーのadmin権限を持っていて、全員のメールをウィルスチェックするよう設定したいなら、clamavをprocmailから呼び出すよりも、sendmailと直接連携させて使う方法がよいでしょう。(参考:津田ふみかの日記
最後に、当然ですが、これを参考にした結果、大事なメールを失ったとしても責任は負えませんので、ご了承ください。


ここを紹介していただいているページへのリンク

|

« Solaris9にapache 2.0.49をインストール | トップページ | 航空宇宙工学実験 »

パソコン・インターネット」カテゴリの記事

コメント

この記事、多数のVirus/SPAM対策ページからリンクしていただいているので、保存版として管理・更新してゆくことにします。それに伴い、過去の記事からの流れではなく、独立した記事として読めるように全面的に書き改めました。

また、当初公開したレシピでは
* ? $HOME/bin/clamscan -m --quiet - ;test $? = "1"
としていましたが、これを参考に改良されたレシピを紹介しているページを見て、あたまに否定演算子をつけて
* ! ? $HOME/bin/clamscan -m --quiet -
とより簡潔に書けることが分かりました。

投稿: ごんざぶろう | 2004年11月29日 (月曜日) 19:37

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/23831/434914

この記事へのトラックバック一覧です: procmail / bsfilter / clamav の連携:

» spam, antivirusとか [LAN板とソレ以外の日々]
どこかのリストに登録されてしまったのか、異常にspamやvirusが届くようになってきたので何らかの対策を…(;´Д`)ということで、clamavと bsfil... [続きを読む]

受信: 2004年6月13日 (日曜日) 03:09

» find の応用 [BooLog]
ごんざぶログ: procmail / bsfilter / clamav の連携 findを使った、「古いログを削除する方法」が紹介されている。これいいなあ。あまりfindを使わないから知らなかったけど便利。... [続きを読む]

受信: 2005年12月23日 (金曜日) 06:46

« Solaris9にapache 2.0.49をインストール | トップページ | 航空宇宙工学実験 »