とりぴよ日記

最近あった出来事やプログラミング・ガジェット・インフラの話

raspberry pi 3にclamavを導入する

最近、raspberry piのセキュリティが気になって色々と設定しているのですが、今回はclamavの設定を書きます。ドキュメントなど読むと、clamavには2種類の動かし方があるようです。

1. scanのときにプロセスを立ち上げる方法
2. デーモンを立ち上げておく方法

1の方法でファイルをscanするときは、clamscanコマンド。2の方法でファイルをscanするときは、clamdscanコマンドを利用します。この2種類のコマンドを比較すると、scanの速度に違いがありました。
(ちなみに、自分が見つけた中では公式のサイトのpdfドキュメントが一番詳しく記載されていました。https://github.com/vrtadmin/clamav-faq/raw/master/manual/clamdoc.pdf


raspberry pi 3上で732個のファイル(ファイルの合計の大きさは2.4GB)のscanを比較した場合

clamscan: 3min19sec
clamdscan: 2min9sec


デーモンを立ち上げていると、一定のメモリ量が常に消費されてしまいますが、scan時のパフォーマンスはデーモンモードのほうが良さそうです。一番避けたい設定はclamdをデーモンで立ち上げているのに、scanはclamscanで実行している場合です。こうすると、scan時にメモリを追加で消費することになってしまい、scanのスピードも遅くなります。
www.riscascape.net


clamavは、指定されたファイルをscanして、データベースに登録されたウイルス署名と一致したファイルがないかどうか確認します。ですので、ウイルス署名のデータベース情報は定期的に更新される必要があります。freshclamコマンドはインターネットら最新のウイルス署名情報を取得してくれます。freshclamにもデーモンモードがあり、デーモンで起動していると、定期的にウイルス署名情報を取得するようです。

以上を踏まえて、自分の場合は、以下のようにraspberry piclamavを設定しました。これで、webコンテンツ以下のファイルに対して毎日深夜の時間帯にスキャンをかけ、virusが検知されたらslackに通知されるようになります。

1. install clamav

apt-get update
apt-get install clamav clamav-daemon

2. update virus definition database

freshclam

3. create script file (hooks.slack.com のURLは適宜変更)

cd /root
vi virusscan.sh
------------------------------------------------
#!/bin/bash
PATH=/usr/bin:/bin

# virus scan
CLAMSCANTMP=`mktemp`
TIME=`date`
MESSAGE="Virus is detected!!: ${TIME}"
clamdscan /var/www/html/data > $CLAMSCANTMP 2>&1

# report slack
grep FOUND$ $CLAMSCANTMP && \
curl -X POST --data-urlencode 'payload={"channel": "#alerts", "username": "alerts", "text": "'"${MESSAGE}"'", "icon_emoji": ":dog:"}' https://hooks.slack.com/services/XXXXXXXX/XXXXXXXX/XXXXXXXX
rm -f $CLAMSCANTMP
------------------------------------------------
chmod 700 virusscan.sh

4. set cron job

crontab -e
------------------------------------------------
00 04 * * * sh /root/virusscan.sh
------------------------------------------------


ドキュメントを読むと、以下のコマンドがあったのでメモも兼ねて記載しておきます。

clamconf

  • clamavの設定情報を表示する
root@raspberrypi:~# clamconf | head
Checking configuration files in /etc/clamav

Config file: clamd.conf
-----------------------
LogFile = "/var/log/clamav/clamav.log"
StatsHostID = "auto"
StatsEnabled disabled
StatsPEDisabled = "yes"
StatsTimeout = "10"
LogFileUnlock disabled

clamtop

  ClamdTOP version 0.99.2   Mon Jul 17 23:41:19 2017
NO CONNTIME LIV IDL QUEUE  MAXQ   MEM HOST           ENGINE DBVER DBTIME
 1 00:00:14   1   0     0     0  471M local          0.99.2 23571 2017-07-17 17h
Details for Clamd version:  ClamAV 0.99.2/23571/Mon Jul 17 17:08:59 2017
Primary threads: live   1 idle   0 max  12                                                                                                  ┌───────────────────────────────────────┐
 [|||                                 ]                                                                                                     │Mem:  heap    1M mmap    0M unused   0M│
Queue:     0 items      0 max                                                                                                               │Libc: used    1M free    0M total    1M│
 [                                    ]                                                                                                     │Pool: count    1 used  470M total  470M│
                                                                                                                                            │[||||||||||||||||||||||||||||||||||||] │
                                                                                                                                            └───────────────────────────────────────