ネット上で調べてみると、
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 # ClamAVによるウイルススキャンスクリプト clamscan.sh # ウイルススキャンを実行し、ウイルスを検知したときのみ、 # 指定した宛先にアラートメールを送信する。 # 誤検知もあり得るため、検知しても駆除(削除)は実施しない。 # # スキャンの実行前には、ClamAVプログラムおよびウイルス定義を # アップデートする。 # # スキャンの除外対象ディレクトリ、ファイルは、${EXCLUDE_LIST_FILE} # ファイルに1行ずつ記載すること。ディレクトリの末尾には、/ をつける。 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} ######################################### # # 2. ウイルス定義の更新 # ######################################### echo "`date` Update Database start" >> ${LOGFILE} /usr/bin/freshclam 1>> ${LOGFILE} 2>&1 echo "`date` Update Database end" >> ${LOGFILE} ######################################### # # 3. ウイルススキャンの実施 # ######################################### 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} ######################################### # # 4. ウイルススキャンの実行 # ######################################### /usr/bin/clamscan \ --max-filesize=${MAX_FILESIZE} --max-scansize=${MAX_SCANSIZE} \ --infected --recursive ${excludeopt} / 1> ${LATEST_SCAN_RESULT} 2>> ${LOGFILE} # get the value of "Infected lines" 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
これで指定した時間にスキャンされ、レポートメールが届く。
リアルタイムスキャン(今回は設定しないが、参考までに。)
デフォルトでは、リアルタイムスキャン(オンアクセススキャン)が適応されていないので
必要ならば適用する必要がある。
しかしこの設定が結構曲者。
clamdのバージョンが0.102.0未満と0.102.0以上で設定方法が違う。
[0.102.0未満]
如是我聞 - a blog about life and tech
Ubuntu 18.04 で ClamAV オンアクセススキャンを使ってみる – Yut@rommx.com
ClamAVのオンアクセススキャンについて - Tbpgr Blog
[0.102.0以上]
Ubuntu16.04LTSにClamAV0.102.1を入れてon access scanning も有効にする | 我輩はイヌである
バージョンの確認方法
$ clamd -V
テスト
無害のテスト用のウイルスを以下のようにダウンロード可能。
※上記スクリプトでは、「/var」内がスキャン対象なので、「/var」以下にダウンロード
$ wget http://www.eicar.org/download/eicar_com.zip -O /var/eicar_com.zip
すぐにテストしたければ、直接スクリプトを実行すればよい。
$ ./etc/cron.hourly/clamscan_hourly
[参考]
Configure Clamav for daily system scans and email notification on Debian
ClamAVによる定期ウイルススキャンの設定 | 稲葉サーバーデザイン
Automate ClamAV to Perform Daily System Scan and Send Email Notifications on Linux | Lisenet.com :: Linux | Security | Networking
【Ubuntu 18.04/16.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する | The modern stone age.