D.

ClamAV の開発版を利用する。

オープンソースアンチウイルスソフトウェアである ClamAVDebian GNU/Linux の stable から削除された。
http://lists.debian.org/debian-security/2009/10/msg00037.html


リポジトリは、かつては SVN だったが現在では git に移行している。
http://www.clamav.net/download/sources


常に開発版の最新のソースコードを利用することにした。

test -d install_clamav || mkdir install_clamav
cd install_clamav
git clone git://git.clamav.net/git/clamav-devel
cd clamav-devel
./configure
make
sudo make install
sudo vim /usr/local/etc/freshclam.conf /usr/local/etc/clamd.conf
sudo chmod 700 /usr/local/etc/freshclam.conf
sudo cp /usr/local/etc/freshclam.conf /usr/local/etc/freshclam.conf.base
sudo cp /usr/local/etc/clamd.conf /usr/local/etc/clamd.conf.base
sudo freshclam
cd ..
test -d /usr/local/src/security/clamav && sudo rm -rf /usr/local/src/security/clamav
test -d /usr/local/src/security/clamav-devel && sudo rm -rf /usr/local/src/security/clamav-devel
test -d /usr/local/src/security || sudo mkdir -p /usr/local/src/security
case $OSTYPE in
  *darwin*)
    sudo cp -R clamav-devel /usr/local/src/security
    sudo chown -R root:wheel /usr/local/src/security/clamav-devel
    sudo chown root:wheel /usr/local/src/security
    sudo chown root:wheel /usr/local/src
    ;;
  *)
    sudo cp -a clamav-devel /usr/local/src/security
    sudo chown -R root:root /usr/local/src/security/clamav-devel
    sudo chown root:root /usr/local/src/security
    sudo chown root:root /usr/local/src
    ;;
esac
rm -rf clamav-devel/
cd ..
rm -rf install_clamav/


あとは cron で定期的にアップグレードとスキャンを実行する。 $EXCLUDEFILE にはスキャン対象外のディレクトリを羅列しておく。

TARGETDIRS="/"
LOGFILE=/var/log/clamscan.log
EXECDIR=${0%/*}
EXCLUDEFILE=$EXECDIR/clamscan_exclude
cd /usr/local/src/security/clamav-devel
git pull
make clean
./configure
make
make install
test -f /usr/local/etc/freshclam.conf.base && cp /usr/local/etc/freshclam.conf.base /usr/local/etc/freshclam.conf
test -f /usr/local/etc/clamd.conf.base && cp /usr/local/etc/clamd.conf.base /usr/local/etc/clamd.conf
chmod 700 /usr/local/etc/freshclam.conf.base
chmod 700 /usr/local/etc/freshclam.conf
freshclam
if [ -s $EXCLUDEFILE ]; then
    for i in `cat $EXCLUDEFILE`
    do
        if [ $(echo "$i"|grep \/$) ]; then
            i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
            OPTS="${OPTS} --exclude-dir=$i"
        else
            OPTS="${OPTS} --exclude=$i"
        fi
    done
fi
for dir in $TARGETDIRS
do
    echo "clamscan ${dir} ${OPTS} -r -i -l ${LOGFILE}"
    clamscan ${dir} ${OPTS} -r -i -l ${LOGFILE}
done