19 June 2010

(Linux) ClamAVで起動時スキャン、結果のメール送信

クライアント端末のユーザディレクトリ(/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)