!!!概要 オープンソースのアンチウイルスソフト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ヘッダをチェックすることでウイルスと判定されたことが分かります。 !!!リンク *[ClamAV|http://www.clamav.net/] - 公式 *[CustomPlugins - Spamassassin Wiki|http://wiki.apache.org/spamassassin/CustomPlugins]