ネット上で調べてみると、
clamscanとclamdscanの違いなどをまずは把握する必要がある。
ClamAV(R)でスキャンしてみる | カメノドットコム
自分の場合、頻繁にスキャンする用途ではなく、
1時間に1回の頻度でスキャンし、レポートメールを受け取れれば
それで良いので以下のように環境を構築した。
※前提として、メールは環境は別途構築済み(Postfix + mailutils)
後述するがリアルタイムスキャンの機能がclamavにもあるが、
メモリリソースを結構消費するので、メモリ消費が少ない時間帯を狙って
実行できるように設定する。
その設定方法は主に以下のサイトを参考にして作成する。(すごい役に立つ内容で感謝!)
ClamAVによる定期ウイルススキャンの設定 | 稲葉サーバーデザイン
1)インストール
$ apt install -y clamav
昔の記事をみるとclamav以外にもclamav-daemonやclamav-freshclamを別途インストールするような
記載がある記事もあるが、
上記だけで、clamav-daemonやclamav-freshclamもインストールされる。
ClamavNet
インストールした時点で、自動でウイルス定義ファイルの更新を行うデーモン(clamav-freshclam)が動いている。
手動で行う場合は、freshclamコマンドを打つ。
https://www.clamav.net/documents/signature-testing-and-management#freshclam
$ freshclam
ちなみにデフォルトだと、clamav-freshclamサービスが動作しているため
そのままfreshclamコマンドを打つと、「/var/log/clamav/freshclam.log is locked by another process」というエラーがでるので
一度サービスを止めてからコマンドを打つ。
$ sudo service clamav-freshclam stop
$ sudo freshclam
$ sudo service clamav-freshclam start
スキャンテスト
[オプション]
- r・・・サブディレクトリごと再帰的に検査
- i・・・ウイルスに感染したファイルのみを出力
システム全体のスキャン(ウイルスは削除しない)
$ clamscan -ri /
ホームディレクトリのみ
$ clamscan -ri /home
ウイルスを発見しだい削除
$ clamscan --remove -ri /home
ウイルスを発見したら他のディレクトリに移す
$ clamscan --move=DIRECTORY -ri /home
2)スキャンレポートメールスクリプトの作成
$ vim /etc/cron.d/clamscan
以下のサイトを参考に改造してものを使用。
ClamAVによる定期ウイルススキャンの設定 | 稲葉サーバーデザイン
スクリプト内の以下の変数は環境に応じて設定要
EXCLUDE_LIST_FILE="/etc/clamav/scanvirus_exclude_list.txt
EMAIL_FROM
EMAIL_TO
誤検知を防ぐために、スキャン結果のみを通知する仕組みにしている。
/etc/clamav/scanvirus_exclude_list.txt
/sys/
/proc/
/dev/
/etc/clamav/clamscan.sh
#!/bin/bash
EXCLUDE_LIST_FILE="/etc/clamav/scanvirus_exclude_list.txt"
LOGFILE="/var/log/clamav/scanlog/clamav-$(date +'%Y-%m-%d_%H:%M:%S').log"
LATEST_SCAN_RESULT="/var/log/clamav/scanresult.txt"
MAX_FILESIZE=200M
MAX_SCANSIZE=200M
EMAIL_FROM=from@example.com
EMAIL_TO=to@example.com
export LANG=C
echo "===== Scan Virus =====" >> ${LOGFILE}
echo "`date` Update Database start" >> ${LOGFILE}
/usr/bin/freshclam 1>> ${LOGFILE} 2>&1
echo "`date` Update Database end" >> ${LOGFILE}
echo "`date` Do Scan Virus start" >> ${LOGFILE}
while read LINE
do
if [ $(echo "${LINE}"|grep \/$) ]; then
i=`echo ${LINE}|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
excludeopt="${excludeopt} --exclude-dir=^${LINE}"
else
excludeopt="${excludeopt} --exclude=^${LINE}"
fi
done < ${EXCLUDE_LIST_FILE}
echo "excludeopt: ${excludeopt}" >> ${LOGFILE}
/usr/bin/clamscan \
--max-filesize=${MAX_FILESIZE} --max-scansize=${MAX_SCANSIZE} \
--infected --recursive ${excludeopt} / 1> ${LATEST_SCAN_RESULT} 2>> ${LOGFILE}
MALWARE=$(tail "$LOGFILE"|grep Infected|cut -d" " -f3);
if [ "$MALWARE" -ne "0" ];then
cat ${LATEST_SCAN_RESULT} | mail -s "Virus Found in `hostname`" -a "From: ${EMAIL_FROM}" -r ${EMAIL_FROM} ${EMAIL_TO}
fi
cat ${LATEST_SCAN_RESULT} >> ${LOGFILE}
echo "`date` Do Scan Virus end" >> ${LOGFILE}
ex) 毎日17:00時に動作する設定
/etc/cron.d/clamscan
drwxr-xr-x 2 root root 4096 Mar 17 20:51 ./
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
# 分 時 日 月 曜日 ユーザー コマンド
0 17 * * * root cd /etc/clamav/ && ./clamscan.sh
あとは実行権限を付与するだけ。
$ chmod 0755 /etc/cron.d/clamscan
これで指定した時間にスキャンされ、レポートメールが届く。