とーますメモ

Ruby on Rails / Goなどの学習メモ

【ClamAV】Ubuntu16.04にClam AntiVirusを設定してみた

ネット上で調べてみると、色んなやり方があり困惑。。。

ClamAVを使用する際に、よく紹介されているパッケージ構成は
以下の3つのパッケージをインストールするやり方。

・clamav
・clamav-daemon(デーモンとして動作し、高速がスキャン可能)
・clamav-freahclam(ウイルス定義DBの更新。clamavをインストールすると自動で入ってるっぽい。)

上記の構成で色々と設定を試みてみたが、
どうしてもclamav-daemonが
よくわからないエラーで、動作しなかったため、clamav-daemonを使用する方法は諦めた。

自分の場合、頻繁にスキャンする用途ではなく、
1時間に1回の頻度でスキャンし、レポートメールを受け取れれば
それで良いので以下の構成で環境を構築した。

・clamavのみインストール(freshclamは一緒にインストールされる)
・スキャンを行いレポートメールを送信するスクリプトを作成する

※前提として、メールは環境は別途構築済み(Postfix + mailutils)

1)clamavのみインストール

$ apt install -y clamav

2)スキャンレポートメールスクリプトの作成

$ vim /etc/cron.hourly/clamscan_hourly

スクリプト内の以下の変数は環境に応じて設定要
・clamav_mail_from
・clamav_scan_email
・clamav_virus_isolation_directory

以下のスクリプト例では、「/var」のみを再帰的にスキャンしている。
またウイルスが発見された場合、削除するのではなく
clamav_virus_isolation_directory内に隔離している。

スキャン対象ディレクトリを変更する場合や、発見後に削除したい場合など
必要に応じて変更してほしい。

#!/bin/bash

LOGFILE="/var/log/clamav/clamav-$(date +'%Y-%m-%d_%H:%M:%S').log";
EMAIL_MSG="Please see the log file attached.";
EMAIL_FROM="{{ clamav_mail_from }}";
EMAIL_TO="{{ clamav_scan_email }}";
# DIRTOSCAN="/var/www /var/vmail";
DIRTOSCAN="/var";

for S in ${DIRTOSCAN}; do
 DIRSIZE=$(du -sh "$S" 2>/dev/null | cut -f1);

 echo "Starting a daily scan of "$S" directory.
 Amount of data to be scanned is "$DIRSIZE".";

 # clamscan -ri "$S" >> "$LOGFILE";
 clamscan -ri "$S" --move={{ clamav_virus_isolation_directory }} --exclude-dir=^{{ clamav_virus_isolation_directory }} >> "$LOGFILE";

 # get the value of "Infected lines"
 MALWARE=$(tail "$LOGFILE"|grep Infected|cut -d" " -f3);

 # if the value is not equal to zero, send an email
 if [ "$MALWARE" -ne "0" ];then
 # 
 # echo "$EMAIL_MSG" | mail -A "$LOGFILE" -s "Malware Found" -r "$EMAIL_FROM" "$EMAIL_TO";
 cat "$LOGFILE" | mail -s "Malware Found" -r "$EMAIL_FROM" "$EMAIL_TO";
 fi
done

exit 0


あとは実行権限を付与するだけ。

$ chmod 0755 /etc/cron.hourly/clamscan_hourly

これで毎時間スキャンされ、問題があった場合にメールが届く。

テスト

無害のテスト用のウイルスを以下のようにダウンロード可能。
※上記スクリプトでは、「/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.