Raspberry Pi 4でclamavのリアルタイムスキャンを設定する方法

clamav

約 11 分で読めます。

Raspberry Pi 4のアンチウィルスclamavでリアルタイムスキャンを設定して動かしてみました!

この前オンデマンド型を設定したけど、やはりリアルタイム型の方が安全だよね。
リアルタイムスキャンしてウィルス検出したらメールで通知するようにしたいな。

こんな疑問を解決します。

リアルタイムスキャンを設定する

オンデマンド型を設定してある前提で説明します。
オンデマンド型をまだ設定していないよ、という方はこちらをご確認下さい。

オンデマンド型と比べてリアルタイム型は下記のようなメリット・デメリットがあります。
 ・ウィルスを即時検出、対応できる
 ・CPUパワー、RAMを常時消費する

本稼働前に別microSDでテスト稼働させるなどして、見極めをすることをオススメします。

まずリアルタイムスキャンに必要なclamav-daemonを入れます。
これはclamavのデーモンを含んだパッケージです。

pi@raspberrypi:~ $ sudo apt install clamav-daemon

お次は設定ファイルの編集です。

# vimではなくnanoなどでもOK
sudo vim /etc/clamav/clamd.conf
# 以下clamd.confの内容
# rootで動かし、ディレクトリによらずスキャンできるようにする
# User clamav
User root
# ウィルス検出時に/etc/clamav/virusevent.d/以下にあるスクリプトを順次実行
VirusEvent /bin/run-parts --lsbsysinit /etc/clamav/virusevent.d/
# リアルタイムスキャン対象ディレクトリ
OnAccessIncludePath /home/pi
OnAccessIncludePath /var/www/html
# FANOTIFYによる監視を有効にするかどうか
OnAccessPrevention false
# clamav権限のファイルはスキップ
OnAccessExcludeUname clamav
# ウィルス感染ファイル移動先ディレクトリはスキャンしない
ExcludePath /opt/clamav/quarantine

OnAccessPreventionをtrueにすると、kernelの拡張機能であるFANOTIFYによる監視が動きます。

ですが、今は導入に以下の課題があり、入れることができません。
 ・Raspberry Pi OSのkernelはFANOTIFYが無効
 ・有効化したkernelで動かしてみたがclamonaccとclamdscanとの通信でエラーになる

これは今後トライしてみたいと思います。

2021/01/10
やってみました!
結果は↓にありますので、もし興味あればどぞ。

以下コマンドを実行、もしくはRaspberry Piを再起動するとclamdscanが動くと思います。

pi@raspberrypi:~ $ sudo systemctl restart clamav-daemon

clamdはclamdscanなどクライアントの要求に応じてウィルススキャンを行うプロセスです。

clamdscanはclamscanと同じ機能を持ちますが、clamscanが自プロセス内でウィルススキャンを行っていたのに対し、clamdscanはclamdにウィルススキャンを要求します。

clamdはウィルス定義を自メモリにロード完了しているため、clamscanでスキャンするのと違い非常に高速にスキャンを行えます。

ちなみにclamscanの場合は以下の通りとなります。
都度ウィルス定義を読み込むので、どうしても時間がかかってしまいます。

リアルタイムスキャンを実行する

お次はclamonaccを動かします。

clamonaccはリアルタイムでファイルの変更を検出し、ウィルススキャンをclamdに依頼する常駐プロセスです。

clamonaccはclamav-daemonをインストールしただけでは動きません。
自分で動かす必要があります。

serviceとして動かすための設定ファイルとスクリプトを作りました。

pi@raspberrypi:~ $ sudo nvim /etc/systemd/system/clamonacc.service

# 以下/etc/systemd/system/clamonacc.serviceの内容
[Unit]
Description=Clamav on access scan service
[Service]
After=clamav-daemon
ExecStart=/etc/systemd/system/clamonacc.sh
RemainAfterExit=yes
pi@raspberrypi:~ $ sudo nvim /etc/systemd/system/clamonacc.sh

# 以下/etc/systemd/system/clamonacc.shの内容
#!/bin/bash
while [ 0 != $( systemctl status clamav-daemon | grep -q 'Self checking' ; echo $? ) ];
do
        sleep 5;
done ;
/usr/bin/clamonacc --move=/opt/clamav/quarantine
pi@raspberrypi:~ $ sudo nvim /etc/clamav/virusevent.d/sendmail

# 以下/etc/clamav/virusevent.d/sendmailの内容
#!/bin/bash
MAIL_ADDRESS=abcde@hotmail.com
MAIL_CONTENTS="${CLAM_VIRUSEVENT_VIRUSNAME} is found in ${CLAM_VIRUSEVENT_FILENAME}"
/bin/echo ${MAIL_CONTENTS} | /usr/bin/mail -s 'Virus detected!' ${MAIL_ADDRESS}

動かしてみました。
前回と同様、テスト用ウィルスファイルをダウンロードします。
ファイルが自動的に移動されたのが確認できます!

pi@raspberrypi:~ $ wget http://www.eicar.org/download/eicar.com
--2020-11-17 10:51:19--  http://www.eicar.org/download/eicar.com
Resolving www.eicar.org (www.eicar.org)... 89.238.73.97
Connecting to www.eicar.org (www.eicar.org)|89.238.73.97|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 68 [application/x-msdownload]
Saving to: ‘eicar.com’
eicar.com                                              100%[=========================================================================================================================>]      68  --.-KB/s    in 0s      
2020-11-17 10:51:20 (3.39 MB/s) - ‘eicar.com’ saved [68/68]
pi@raspberrypi:~ $ ls
pi@raspberrypi:~ $ ls /opt/clamav/quarantine
eicar.com

メールもちゃんと来ています!

リアルタイムスキャンの懸念点

これでリアルタイムスキャンの設定が完了しました。
ですが、CPUとメモリをたくさん使うので注意が必要です。
↓はセットアップが終わってしばらく経過した後の状態です。

CPU使用率がだいたい30%から50%、メモリは合計1GB使っています。
メモリ2GBモデルだと少し心もとないですね、4GB版が欲しくなります…

終わりに

いかがでしたか。

CPU/メモリの課題はありますが、まずはこれでウィルス混入の心配を1つ解決できました!

続けてウェブアプリケーションファイアウォールの導入をしていきたいと思います!

Comments

タイトルとURLをコピーしました