トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

ClamAVインストール

概要

オープンソースのアンチウイルスソフト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.90.2.tar.gz
$ cd clamav-0.90.2

コンパイルしてインストールします。 デフォルトでは/usr/local以下にインストールされます。

$ ./configure --enable-experimental LDFLAGS="-L/usr/local/lib -R/usr/local/lib" \
  CPPFLAGS="-I/usr/local/include"
$ 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 yes
---
> LogTime yes
57c57
< #PidFile /var/run/clamd.pid
---
> PidFile /var/log/clamav/clamd.pid
145c145
< #User clamav
---
> User clamav

 freshclam.conf

/etc/local/etc/freshclam.confの以下の部分を修正します。

8c8
< Example
---
> #Example
17c17
< #UpdateLogFile /var/log/freshclam.log
---
> UpdateLogFile /var/log/clamav/freshclam.log
34c34
< #PidFile /var/run/freshclam.pid
---
> PidFile /var/log/clamav/freshclam.pid
95c95
< #NotifyClamd /path/to/clamd.conf
---
> NotifyClamd /usr/local/etc/clamd.conf

起動

 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-x.xx.x/test/clam.cab: ClamAV-Test-File FOUND
/usr/local/src/clamav-x.xx.x/test/clam.exe: ClamAV-Test-File FOUND
/usr/local/src/clamav-x.xx.x/test/clam.zip: ClamAV-Test-File FOUND
/usr/local/src/clamav-x.xx.x/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ヘッダをチェックすることでウイルスと判定されたことが分かります。

リンク

最終更新時間:2007年05月03日 12時53分50秒