CentOS Stream 9 のウィルス対策にClam AntiVirusをインストール

さくらのVPSにCentOS Stream 9をインストールした覚書です。

今回は、Clam AntiVirusのインストールを行っていきたいと思います。
Clam AntiVirus はアンチウィルスソフトウェアです。

Webサイトから不特定多数の人がファイルをアップロードするような機能を付けるなら、ウィルスチェックも行ったほうが安心です。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2022-03-27
サーバさくらのVPS 2G
OSCentOS Stream 9
cat /etc/redhat-release
CentOS Stream release 9

Clam AntiVirusのインストール

epelからインストールします。

epelをまだ設定していない場合はこちら

dnf --enablerepo=epel install clamav clamav-scanner-systemd clamav-update

設定の変更

vi /etc/clamd.d/scan.conf
# をつけてコメントアウト
# Example

コメントを外す
LogFile /var/log/clamd.scan
LogFileMaxSize 2M
LogTime yes
LogRotate yes
LocalSocket /var/run/clamd.scan/clamd.sock
FixStaleSocket yes
ExcludePath ^/proc/
ExcludePath ^/sys/

変更
User root

コマンド集

# 手動起動
systemctl start clamd@scan

# 自動起動が有効か確認
systemctl list-unit-files | grep clamd*

# 自動起動にセット
systemctl enable clamd@scan

# 起動状況の確認
systemctl status clamd@scan

ウィルスデータベースの設定

vi /etc/freshclam.conf
# をつけてコメントアウト
# Example

コメントを外す
UpdateLogFile /var/log/freshclam.log
LogFileMaxSize 2M
LogTime yes
LogRotate yes

変更
DatabaseOwner root
DatabaseMirror db.jp.clamav.net
NotifyClamd /etc/clamd.d/scan.conf

手動でウィルスデータベースを更新

freshclam -u root

スキャンテスト

# スキャンテスト
clamscan --infected --remove --recursive

# テスト用ウィルスをダウンロード
cd /tmp
wget http://www.eicar.org/download/eicar.com
wget http://www.eicar.org/download/eicar.com.txt
wget http://www.eicar.org/download/eicar_com.zip
wget http://www.eicar.org/download/eicarcom2.zip

# もう一度、スキャンテスト
clamscan --infected --remove --recursive
# テスト用ウィルスがひっかかったことを確認できます。

# ディレクトリを指定してスキャン
clamscan --infected --remove --recursive /tmp

スキャンスクリプトの作成

cd
vi clamscan
#!/bin/bash

PATH=/usr/bin:/bin

# clamd update
dnf -y update clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd > /dev/null 2>&1

# excludeopt setup
excludelist=/root/clamscan.exclude
if [ -s $excludelist ]; then
for i in `cat $excludelist`
do
if [ $(echo "$i"|grep \/$) ]; then
i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
excludeopt="${excludeopt} --exclude-dir=^$i"
else
excludeopt="${excludeopt} --exclude=^$i"
fi
done
fi


# virus scan
CLAMSCANTMP=`mktemp`
clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \


# report mail send
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root
rm -f $CLAMSCANTMP
chmod +x clamscan

スキャン対象外の設定

vi /root/clamscan.exclude
/dev/
/etc/
/media/
/mnt/
/opt/
/proc/
/run/
/srv/
/sys/
/usr/
/var/

ディレクトリのときは末尾の / 必須

自動定期スキャン登録

crontab -e
MAILTO="cron@example.com"
0 * * * * /root/clamscan

バージョンを確認

clamscan --version

アップデート

freshclam -u root をすると次のようなエラーが出てるときや深夜のウィルススキャンに異常に時間が掛かるようになったとき


Sat May 13 23:23:16 2023 -> ClamAV update process started at Sat May 13 23:23:16 2023
Sat May 13 23:23:16 2023 -> ^Your ClamAV installation is OUTDATED!
Sat May 13 23:23:16 2023 -> ^Local version: 0.103.7 Recommended version: 0.103.8
Sat May 13 23:23:16 2023 -> DON'T PANIC! Read https://docs.clamav.net/manual/Installing.html
Sat May 13 23:23:16 2023 -> daily.cvd database is up-to-date (version: 26905, sigs: 2034567, f-level: 90, builder: raynman)
Sat May 13 23:23:16 2023 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Sat May 13 23:23:16 2023 -> bytecode.cvd database is up-to-date (version: 334, sigs: 91, f-level: 90, builder: anvilleg)
# 確認
dnf --enablerepo=epel list clamav

# 更新
dnf --enablerepo=epel update clamav

# ウィルスデータベースを更新
freshclam -u root

アップデート後はデータベース更新も正常になっていることを確認できます。

Sat May 13 23:31:35 2023 -> ClamAV update process started at Sat May 13 23:31:35 2023
Sat May 13 23:31:35 2023 -> daily.cvd database is up-to-date (version: 26905, sigs: 2034567, f-level: 90, builder: raynman)
Sat May 13 23:31:35 2023 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Sat May 13 23:31:35 2023 -> bytecode.cvd database is up-to-date (version: 334, sigs: 91, f-level: 90, builder: anvilleg)

深夜の /root/clamscan で2~3時間CPU振り切っていたのも、数分で完了するようになりました。
ということで、原因はバージョンが古いことでした。