開発者でも何でもない素人によるサイト

Raspberry Pi 2用Ubuntu Server clamavの設定

  • このエントリーをはてなブックマークに追加

すでにchkrootkitを導入しているので、あわせてclamavをインストールしたいと思います。

動作確認こそしていませんが、Raspbianもほとんど共通の作業で設定できると思います。

clamavのインストール

以下のコマンドでインストールします。

なお、clamav-daemonもインストールしてデーモン化したかったのですが、ラズパイのメモリだと厳しいようです。

sudo apt install clamav

freshclamのエラー防止のためlog設定変更

デフォルト設定だと、freshclam(ウイルス定義更新)の際にログ関係でエラーが起こりやすいです。

Ubuntuだと、インストール後しばらくは良かったのですが、ログロテートされたあとにうまく動作しなくなりました。ちなみにRaspbianでは最初から動作しませんでした。

したがって、ログロテートの設定を変えておきます。

sudo vi /etc/logrotate.d/clamav-freshclam
...
create 640 clamav clamav
...

ウイルス定義の更新

書き換えたら、ウイルス定義の更新をします。

sudo freshclam
...
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.99 Recommended version: 0.99.2
...
Database updated (4568347 signatures) from db.local.clamav.net (IP: 27.96.54.66)
ERROR: NotifyClamd: Can't find or parse configuration file /etc/clamav/clamd.conf

バージョンが古いと怒られますが、問題ありません。もし更新実行できなければ、

sudo rm /var/log/clamav/freshclam.log
sudo touch /var/log/clamav/freshclam.log
sudo chown clamav:clamav /var/log/clamav/freshclam.log

で一旦、ログファイルを削除・再作成して再度実行してください。

また、更新時の最後のエラーは、clamd.confが無いと言っているので、freshclamの設定を書き換えます。

sudo vi /etc/clamav/freshclam.conf
...
# 以下をコメントアウト
#NotifyClamd /etc/clamav/clamd.conf
...

これで問題なく更新できます。

(本当は使わなくてもclamav-daemonを入れたほうが良いかもしれない…)

cron用のシェルスクリプトを作成

検索すると、ウイルス検出時にメールを送るスクリプトがたくさん引っかかると思いますが、自分の環境だとエラーが出てうまく実行できませんでした。

したがって、それらのサイトを参考にしつつ、新たにシェルスクリプトを作成しました。(mailコマンドが使える必要があります。)

正常時・エラー発生時・ウイルス発見時のいずれの場合もメールを送りますが、それらはメールのタイトルですぐ判別できます。

また、誤検知の場合を考慮して、自動でウイルスを削除しません。もしウイルス発見メールが届いたら、確認して自ら削除するか、clamscanの後に「–remove」オプションを付けて自動削除するようにしてください。

シェルスクリプトを作り慣れないので、おかしいところがあるかもしれませんが、ウイルス発見時・エラー時・正常時のすべてをテストして、メールが届くどころまでの動作を確認しています。

vi clamav-dailyscan
#!/bin/bash
# clamavを定期的に実行するスクリプト

# /proc,/sys,/runを除外してスキャンして、一時ファイルに出力
clamtemp=`mktemp`
clamtemperror=`mktemp`
clamscan -r / --exclude-dir="proc|sys|run" 1> $clamtemp 2> $clamtemperror

# ウイルスが見つかったか判定してrootにメール、エラーがあったらそれも通知
# ウイルスが見つかった場合、ウイルスのパスと、サマリーをメール
if [ -n "$(grep FOUND $clamtemp)" ]; then
        sed -e '/OK/d' -e '/Empty file/d' -e '/Excluded/d' -e '/Symbolic link/d' $clamtemp | mail -s "ウイルス発見!" root 
# エラーがあった場合、エラー出力をメール
elif [ -n "$(cat $clamtemperror)" ]; then
        cat $clamtemperror | mail -s "ウイルススキャンのエラー" root
# 正常に完了すれば以下の文章をメール
else
        echo "ウイルスは見つかりませんでした" | mail -s "ウイルススキャン正常完了" root
fi

# 一時ファイルを削除
rm -f $clamtemp $clametemperror

作成したら所有者をrootにして実行権限を与えます。

sudo chown root:root
sudo chmod 751 clamav-dailyscan

clamav本体と、シェルスクリプトの動作確認

作成したら、試しに実行してみます。

sudo ./clamav-dailyscan

時間がかかると思いますが、しばらくして正常完了のメールが届けばOKです。

また、clamscanコマンド周辺を弄って(存在しないディレクトリを指定するなど)エラーメールが届けば、エラー時にちゃんとメールが来るはずです。

最後にclamavそのものの動作確認も兼ねて、実害のないサンプルウイルスをダウンロードして、上記のシェルスクリプトを実行します。

wget http://files.trendmicro.com/products/eicar-file/eicar.com
sudo ./clamav-dailyscan

下のようなウイルス発見メールが届けばOKです。

件名: ウイルス発見!
送信日時: 2016/06/27 午後0:28
差出人: root@server4beginners.com
宛先: root@server4beginners.com
Cc:

/tmp/eicar.com: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------
Known viruses: 4562953
Engine version: 0.99
Scanned directories: 14661
Scanned files: 73965
Infected files: 1
Data scanned: 2070.11 MB
Data read: 1877.74 MB (ratio 1.10:1)
Time: 1457.705 sec (24 m 17 s)

cronに設定

シェルスクリプトが問題なく動作することが確認できたら、cronで定期的に実行させます。

sudo mv clamav-dailyscan /etc/cron.daily

ここでは毎日実行するようにcron.dailyに移しましたが、ラズパイに結構負担がかかるので、cron.weeklyに移すか、crontabで詳しく設定しても良いかと思います。