トップ 一覧 検索 ヘルプ RSS ログイン

ClamAVインストール_bak_20070503の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!概要
オープンソースのアンチウイルスソフトClamAVのインストール手順です。ClamAVをSpamAssassinから呼び出して使えるようにしてみます。

!!!インストール
!!GMP
GMPはウイルス定義ファイルの検証に使用されます。必須ではありませんがインストールしておきます。

http://www.swox.com/gmp/ からソースコードをダウンロードし、適当なディレクトリに展開します。
 $ tar zxvf gmp-4.2.1.tar.gz
 $ cd gmp-4.2.1

コンパイルしてインストールします。 
 $ ./configure
 $ make 
 $ make check
 # make install

!!ClamAV
http://www.clamav.net/ からソースコードをダウンロードし、適当なディレクトリに展開します。
 $ tar zxvf clamav-0.88.7.tar.gz
 $ cd clamav-0.88.7

コンパイルしてインストールします。 デフォルトでは/usr/local以下にインストールされます。
 $ ./configure LDFLAGS='-L/usr/local/lib -lgmp'
 $ make
 $ make check
 # make install

ユーザとグループを作成します。
 # groupadd clamav
 # useradd -g clamav -s /bin/false clamav

ログ出力用のディレクトリを作ります。
 # mkdir /var/log/clamav
 # chown clamav:clamav /var/log/clamav

!!!設定

!!clamd.conf
/usr/local/etc/clamd.confの以下の部分を修正します。
 8c8
 < Example
 ---
 > #Example
 14c14
 < #LogFile /tmp/clamd.log
 ---
 > LogFile /var/log/clamav/clamd.log
 34c34
 < #LogTime
 ---
 > LogTime
 57c57
 < #PidFile /var/run/clamd.pid
 ---
 > PidFile /var/log/clamav/clamd.pid
 144c144
 < #User clamav
 ---
 > User clamav



!!freshclam.conf
/etc/local/etc/freshclam.confの以下の部分を修正します。
 9c9
 < Example
 ---
 > #Example
 18c18
 < #UpdateLogFile /var/log/freshclam.log
 ---
 > UpdateLogFile /var/log/clamav/freshclam.log
 35c35
 < #PidFile /var/run/freshclam.pid
 ---
 > PidFile /var/log/clamav/freshclam.pid
 85c85
 < #NotifyClamd
 ---
 > NotifyClamd


!!!起動
!!ClamAVデーモン起動
ClamAVデーモン(clamd)を起動します。
 # /usr/local/sbin/clamd

OS起動時に自動で起動させるためにはrcスクリプトを用意する必要があります。rcスクリプトのサンプルを載せておきます。
 #!/sbin/sh
 
 PATH=/usr/local/sbin:$PATH
 PIDFILE=/var/log/clamav/clamd.pid
 PROG=clamd
 
 ECHO=/usr/ucb/echo
 
 case "$1" in
 start)
     $ECHO -n "starting $PROG ... "
     $PROG && $ECHO "[ OK ]" || $ECHO "[ NG ]"
     ;;
 stop)
     $ECHO -n "stopping $PROG ... "
     kill `cat $PIDFILE` && $ECHO "[ OK ]" || $ECHO "[ NG ]"
     ;;
 restart)
     $0 stop
     sleep 3
     $0 start
     ;;
 reload|refresh)
     $ECHO -n "refreshing $PROG ... "
     kill -HUP `cat $PIDFILE` && $ECHO "[ OK ]" || $ECHO "[ NG ]"
     ;;
 *)
     echo "Usage: $0 { start | stop | restart | refresh }"
     exit 1
     ;;
 esac
 exit 0


!!ウイルス定義ファイル更新
freshclamコマンドでウイルス定義ファイルの更新を行います。
 # /usr/local/bin/freshclam
 ClamAV update process started at Mon Jan  8 00:11:19 2007
 Downloading main.cvd [*]
 main.cvd updated (version: 42, sigs: 83951, f-level: 10, builder: tkojm)
 Downloading daily.cvd [*]
 daily.cvd updated (version: 2418, sigs: 2154, f-level: 9, builder: sven)
 Database updated (86105 signatures) from database.clamav.net (IP: 203.178.137.175)
 Clamd successfully notified about the update.

/usr/local/share/clamav/以下のmain.cvdとdaily.cvdが更新されます。
自動的に更新を行うにはcronに登録するか、-dオプションを付けてデーモンモードで実行します。デーモンモードで実行する場合のrcスクリプトのサンプルを載せておきます。

 #!/sbin/sh
 
 PATH=/usr/local/bin:$PATH
 PIDFILE=/var/log/clamav/freshclam.pid
 PROG=freshclam
 
 ECHO=/usr/ucb/echo
 
 case "$1" in
 start)
     $ECHO -n "starting $PROG ... "
     $PROG -d && $ECHO "[ OK ]" || $ECHO "[ NG ]"
     ;;
 stop)
     $ECHO -n "stopping $PROG ... "
     kill `cat $PIDFILE` && $ECHO "[ OK ]" || $ECHO "[ NG ]"
     ;;
 restart)
     $0 stop
     sleep 3
     $0 start
     ;;
 reload|refresh)
     $ECHO -n "refreshing $PROG ... "
     kill -HUP `cat $PIDFILE` && $ECHO "[ OK ]" || $ECHO "[ NG ]"
     ;;
 *)
     echo "Usage: $0 { start | stop | restart | refresh }"
     exit 1
     ;;
 esac
 exit 0
!!動作テスト
ClamAVのソースにテスト用のダミーウイルスファイルが付属していますのでこれをスキャンしてみます。

 $ /usr/local/bin/clamdscan test/
 /usr/local/src/clamav-0.88.7/test/clam.cab: ClamAV-Test-File FOUND
 /usr/local/src/clamav-0.88.7/test/clam.exe: ClamAV-Test-File FOUND
 /usr/local/src/clamav-0.88.7/test/clam.zip: ClamAV-Test-File FOUND
 /usr/local/src/clamav-0.88.7/test/clam.exe.bz2: ClamAV-Test-File FOUND
 
 ----------- SCAN SUMMARY -----------
 Infected files: 4
 Time: 0.040 sec (0 m 0 s)

上記のような感じでウイルスが検出されれば正常に動作しています。

なお、clamscanというコマンドもありますがこちらはスタンドアロンで動作するのでclamdが動作している必要はありません。ただし、デーモンを使わないぶん遅いです。可能ならclamdscanを使いましょう。


!!!SpamAssassinとの連携
SpamAssassinからClamAVを呼び出すためにClamAVPluginを導入します。

!!File::Scan::ClamAV
PerlモジュールFile::Scan::ClamAVをインストールします。

http://search.cpan.org/~cfaber/File-Scan-ClamAV/lib/File/Scan/ClamAV.pm からソースをダウンロードし、適当なフォルダに展開します。
 $ tar zxvf File-Scan-ClamAV-1.8.tar.gz
 $ cd File-Scan-ClamAV-1.8

コンパイルしてインストールします。
 $ perl Makefile.PL
 $ make
 $ make test
 # make install

!!ClamAVPlugin
http://wiki.apache.org/spamassassin/ClamAVPlugin にあるclamav.pmをPerlのライブラリパスに保存します。私はActivePerlを使用しているので/opt/ActivePerl-5.8/lib/site_perl/5.8.8/Mail/SpamAssassin/Plugin/ClamAV.pmとしました。

ファイルの一部を修正します。1行目の修正はパッケージ名の変更です。19行目の変更はTCPソケットではなくUNIXドメインソケットを使うための変更です。
 1c1
 < package ClamAV;
 ---
 > package Mail::SpamAssassin::Plugin::ClamAV;
 19c19
 <   my $clamav = new File::Scan::ClamAV(port => 3310);
 ---
 >   my $clamav = new File::Scan::ClamAV(port => '/tmp/clamd');

!!clamav.cf
clamav.cfというファイルを/etc/mail/spamassassinに以下に作成します。
 loadplugin Mail::SpamAssassin::Plugin::ClamAV
 full CLAMAV eval:check_clamav()
 describe CLAMAV Clam AntiVirus detected a virus
 score CLAMAV 10.0

!!動作テスト
ClamAVのソースのtestディレクトリに含まれるclam.exeをメールに添付して、SpamAssassinを通してみます。 ClamAVPluginが正しく動作していれば以下のようなヘッダが付加されます。
 X-Spam-Virus: Yes (ClamAV-Test-File) 

X-Spam-Virusヘッダをチェックすることでウイルスと判定されたことが分かります。
!!!リンク
*[ClamAV|http://www.clamav.net/]
*[CustomPlugins - Spamassassin Wiki|http://wiki.apache.org/spamassassin/CustomPlugins]