clamvインストール

clamvインストール

無料のウイルスソフトclamvを導入する

インストール

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

設定

cp /etc/clamd.d/scan.conf{,.org}
vi /etc/clamd.d/scan.conf
#LogFile /var/log/clamd.scan
↓
LogFile /var/log/clamd.scan

#LogFileMaxSize 2M
↓
LogFileMaxSize 2M

#LogTime yes
↓
LogTime yes

#LogRotate yes
↓
LogRotate yes

#LocalSocket /run/clamd.scan/clamd.sock
↓
LocalSocket /run/clamd.scan/clamd.sock

#FixStaleSocket yes
↓
FixStaleSocket yes

#ExcludePath ^/proc/
↓
ExcludePath ^/proc/

#ExcludePath ^/sys/
↓
ExcludePath ^/sys/

User clamscan
↓
User root

freshclamの設定

scan.conf編集直後にサービス起動しようとすると、エラーが発生した(No supported database filesといったエラーが出ていた)
freshclamが怪しいと思い、freshclam実施後に再度起動を試みたところ
無事起動したのでサービス起動前にfreshclamを実施する

cp /etc/freshclam.conf{,.org}
vi /etc/freshclam.conf
#UpdateLogFile /var/log/freshclam.log
↓
UpdateLogFile /var/log/freshclam.log

#LogFileMaxSize 2M
↓
LogFileMaxSize 2M

#LogTime yes
↓
LogTime yes

#LogRotate yes
↓
LogRotate yes

#DatabaseOwner clamupdate
↓
DatabaseOwner root

#DatabaseMirror database.clamav.net ←ウィルス定義ファイルのダウンロード先
↓
DatabaseMirror db.jp.clamav.net

#NotifyClamd /path/to/clamd.conf ←ウイルス定義ファイル更新をclamdに通知
↓
NotifyClamd /etc/clamd.d/scan.conf
freshclam

サービスの起動と自動起動

systemctl enable clamd@scan
systemctl start clamd@scan

試しにスキャン

スキャンテスト

clamscan --infected --remove --recursive

----------- SCAN SUMMARY -----------
Known viruses: 8748947
Engine version: 0.103.0
Scanned directories: 9
Scanned files: 16
Infected files: 0
↑0になっていることを確認


テスト用ウイルスをダウンロード

wget http://www.eicar.org/download/eicar.com


再度スキャン

clamscan --infected --remove --recursive

/tmp/eicar.com: Win.Test.EICAR_HDB-1 FOUND
↑エイカーファイルが検知されることを確認
/tmp/eicar.com: Removed.
↑エイカーファイルが駆除されることを確認

----------- SCAN SUMMARY -----------
Known viruses: 8748947
Engine version: 0.103.0
Scanned directories: 9
Scanned files: 2
Infected files: 1
↑検知結果が先ほどの0から1に代わっていることを確認

自動定期実行スキャンスクリプトの作成

vi /etc/cron.daily/clamdscan
#!/bin/bash

# 設定ファイル
CONFIG=/etc/clamd.d/scan.conf

# スキャン実行
# ※ウイルス検知時は隔離ディレクトリへ隔離
CLAMSCANLOG=`mktemp`
QUARANTINEDIR=/tmp/clamdscan-quarantinedir-$(date +%Y%m%d)
mkdir -p ${QUARANTINEDIR}
clamdscan -c ${CONFIG} --move=${QUARANTINEDIR} / > ${CLAMSCANLOG} 2>&1

# ウイルス検知時のみroot宛にメール通知
if [ -z "$(grep FOUND$ ${CLAMSCANLOG})" ]; then
    rm -rf ${QUARANTINEDIR}
else
    grep -A 1 FOUND$ ${CLAMSCANLOG} | mail -s "Virus Found in `hostname` => ${QUARANTINEDIR}" root
fi

# スキャンログをシスログに出力
cat ${CLAMSCANLOG} | logger -t $(basename ${0})
rm -f ${CLAMSCANLOG}


スクリプト実行権限付与

chmod +x /etc/cron.daily/clamdscan


スキャン除外設定

echo ExcludePath ^/tmp/clamdscan-quarantinedir-.*/ >> /etc/clamd.d/scan.conf
↑ウイルス隔離ディレクトリをスキャン対象外にする


除外設定反映

systemctl restart clamd@scan

まとめ

clamを使う際にスペック不足でサービス起動できないことも多く、今回の構築でも不安だった。サービスを起動直後のメモリの使用率を確認すると、availableが案の定非常に少なくなっていたので不安だったが、一定時間経過後に確認すると負荷が大幅に下がっていることが確認できたので安心した。(起動時にウイルス定義を読み込むためだと思う)

★サービス起動直後

free -mh
              total        used        free      shared  buff/cache   available
Mem:          808Mi       689Mi        59Mi       0.0Ki        59Mi        28Mi


★一定時間経過後

free -mh
              total        used        free      shared  buff/cache   available
Mem:          808Mi        57Mi       686Mi       0.0Ki        64Mi       657Mi


スキャン除外設定は今後運用していきながら適宜増やしていく予定


参考

https://aulta.co.jp/archives/7671
https://centossrv.com/clamav.shtml