- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!概要
オープンソースのアンチウイルスソフト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]