クライアント端末のユーザディレクトリ(/home 以下)と一時ディレクトリ(/tmp)をClamAVでスキャンして、結果を管理者にメールする設定方法のメモ。
■ 検証環境
Ubuntu 10.04, 12.04
CentOS 6.5
■ スクリプトファイルの作成
水曜日、土曜日にはユーザディレクトリと一時ディレクトリをスキャン。
その他の日には、一時ディレクトリのみスキャン。
画像サムネイルが格納されている .thumbnail ディレクトリは対象外にする。
/usr/local/sbin/clam-bootscan
#!/bin/bash strDay=`LANG=C;date +%a` if [ $strDay == "Wed" -o $strDay == "Sat" ] then clamscan -r -i --exclude-dir=.thumbnail /home /root /tmp > /var/log/clamav/clamav.log else clamscan -r -i --exclude-dir=.thumbnail /tmp > /var/log/clamav/clamav.log fi cat /var/log/clamav/clamav.log | mail -s "clamav scan report" root@localhost
ファイル保存後に、chmodで実行属性を与える。
このスクリプトでは、1日に何度も再起動すれば、都度スキャンが始まるため、実際は次のようなスクリプトを利用する。
#!/bin/bash # 今日の00:01の一時ファイル(時刻比較用)を作る rm -f /var/tmp/today.tmp 1> /dev/null 2>&1 touch -d 0001 /var/tmp/today.tmp 1> /dev/null 2>&1 # ログファイル(最終スキャン時刻参照)が無い場合は作成する # タイムスタンプは今日の00:00 if test ! -f /var/log/clamav/clamav.log then touch -d 0000 /var/log/clamav/clamav.log 1> /dev/null 2>&1 fi # 時刻比較用ファイルとログファイルのタイムスタンプ比較を # 行なって、最終スキャンが昨日以前であれば、処理実行する if test /var/tmp/today.tmp -nt /var/log/clamav/clamav.log then # 週に1回(土曜日)と、それ以外の日で異なった処理を行う strDay=`LANG=C;date +%a` # if [ $strDay == "Wed" -o $strDay == "Sat" ] if [ $strDay == "Sat" ] then # フルスキャン clamscan -r -i --exclude-dir=.thumbnail --exclude-dir=/usr/share/doc --exclude-dir=/usr/share/fonts /home /root /tmp /usr /sbin /etc /bin /boot > /var/log/clamav/clamav.log else # ユーザディレクトリ以下のみ簡易スキャン clamscan -r -i --exclude-dir=.thumbnail /home /tmp /etc /bin /sbin /boot > /var/log/clamav/clamav.log fi # 結果をメール送信する cat /var/log/clamav/clamav.log | mail -s "clamav scan report (s5350-CentOS-6)" root@localhost fi # 一時ファイル(時刻比較用)を削除する rm -f /var/tmp/today.tmp 1> /dev/null 2>&1
■ crontabに登録
rootで実行するように、sudoもしくは、rootにログオンした状態でcrontabを編集する。
# sudo crontab -e
# m h dom mon dow command
@reboot /usr/local/bin/clam-bootscan
■ 送られてくるメールの例
Return-Path: <root@example.com>
Received: from ubuntu (mail.example.com [111.111.111.111])
(authenticated bits=0)
by mail.example.com (8.14.3/8.14.3) with ESMTP id o5JBWEtZ099213
for <admin@example.com>; Sat, 19 Jun 2010 20:32:14 +0900 (JST)
(envelope-from root@example.com)
Received: by ubuntu (Postfix)
id 6955C97009; Sat, 19 Jun 2010 20:32:14 +0900 (JST)
Delivered-To: root@localhost
Received: by s5350-ubuntu (Postfix, from userid 0)
id 508CE9700E; Sat, 19 Jun 2010 20:32:14 +0900 (JST)
Subject: clamav scan report
To: <root@example.com>
X-Mailer: mail (GNU Mailutils 2.1)
Message-Id: <20100619113214.508CE9700E@ubuntu>
Date: Sat, 19 Jun 2010 20:32:14 +0900 (JST)
From: root@example.com (root)
/home/user/デスクトップ/eicar.com.txt: Eicar-Test-Signature FOUND
----------- SCAN SUMMARY -----------
Known viruses: 800696
Engine version: 0.96.1
Scanned directories: 1371
Scanned files: 4329
Infected files: 2
Data scanned: 347.13 MB
Data read: 450.27 MB (ratio 0.77:1)
Time: 46.108 sec (0 m 46 s)
Received: from ubuntu (mail.example.com [111.111.111.111])
(authenticated bits=0)
by mail.example.com (8.14.3/8.14.3) with ESMTP id o5JBWEtZ099213
for <admin@example.com>; Sat, 19 Jun 2010 20:32:14 +0900 (JST)
(envelope-from root@example.com)
Received: by ubuntu (Postfix)
id 6955C97009; Sat, 19 Jun 2010 20:32:14 +0900 (JST)
Delivered-To: root@localhost
Received: by s5350-ubuntu (Postfix, from userid 0)
id 508CE9700E; Sat, 19 Jun 2010 20:32:14 +0900 (JST)
Subject: clamav scan report
To: <root@example.com>
X-Mailer: mail (GNU Mailutils 2.1)
Message-Id: <20100619113214.508CE9700E@ubuntu>
Date: Sat, 19 Jun 2010 20:32:14 +0900 (JST)
From: root@example.com (root)
/home/user/デスクトップ/eicar.com.txt: Eicar-Test-Signature FOUND
----------- SCAN SUMMARY -----------
Known viruses: 800696
Engine version: 0.96.1
Scanned directories: 1371
Scanned files: 4329
Infected files: 2
Data scanned: 347.13 MB
Data read: 450.27 MB (ratio 0.77:1)
Time: 46.108 sec (0 m 46 s)