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と直接連携させて使う方法がよいでしょう。(参考:津田ふみかの日記)
最後に、当然ですが、これを参考にした結果、大事なメールを失ったとしても責任は負えませんので、ご了承ください。
ここを紹介していただいているページへのリンク
- ClamAVのページ
- 躁鬱日記 (2004/04/20)
「今日のFreeBSD」
- LAN板とソレ以外の日々 (2004/06/13)
「spam, antivirusとか」
- Yuki's Linux memo (2004/07/01)
「Clam Antivirusを使う」
- 汚し飯 (2004/07/08)
「[spam]memo」
- Tokyo Linux Entertainment Community (2004/07/08)
「spamassassin を fetchmail から利用する方法」
- k3c の日記 (2004/11/26)
- 知識の泉水。 (2005/07/28)「cenOS-postfix」
- ChangeLog(2006/05/05)「clamav で参考になるサイト」
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- 四則演算で10を作る(2016.07.20)
- ResearchGate(2015.12.30)
- PowerPoint操作のTIPS (PowerPoint 2013に改訂)(2014.05.22)
- プログラミン×宇宙兄弟 コンテスト(2013.10.23)
- Facebook(2011.10.05)
コメント
この記事、多数のVirus/SPAM対策ページからリンクしていただいているので、保存版として管理・更新してゆくことにします。それに伴い、過去の記事からの流れではなく、独立した記事として読めるように全面的に書き改めました。
また、当初公開したレシピでは
* ? $HOME/bin/clamscan -m --quiet - ;test $? = "1"
としていましたが、これを参考に改良されたレシピを紹介しているページを見て、あたまに否定演算子をつけて
* ! ? $HOME/bin/clamscan -m --quiet -
とより簡潔に書けることが分かりました。
投稿: ごんざぶろう | 2004年11月29日 (月曜日) 19:37