ClamAVはOSSのアンチウィルスソフトです。有償のソフトを買うお金が勿体ないと思う場合に真っ先に浮かぶソフトです。2024/3現在で最新バージョンは1.0.5です。早速インストールを行います。
# dnf install clamav clamav-data clamav-devel clamav-filesystem clamav-update clamd |
インストールが終われば定義ファイルの更新を行います。定義ファイル更新の設定ファイルを編集します。以下は編集箇所です。
# vi /etc/freshclam.conf # アップデートログファイルの指定 UpdateLogFile /var/log/freshclam.log # ログファイルサイズの最大を2Mに指定 LogFileMaxSize 2M # ログに時刻を記載 LogTime yes # アップデート時のアカウントを指定 DatabaseOwner clamupdate # 1日に24回(1時間おきに)チェックする Checks 24 # 定義ファイルをアップデートしたらclamdに通知し反映する。 NotifyClamd /etc/clamd.d/scan.conf |
上で指定したログファイルが予めないとエラーがおきますので、作成後に定義ファイルを最新に更新します。
# touch /var/log/freshclam.log # chown clamupdate /var/log/freshclam.log # freshclam <省略> Tue Mar 26 16:01:24 2024 -> Database test passed. Tue Mar 26 16:01:24 2024 -> daily.cld updated (version: 27225, sigs: 2056578, f-level: 90, builder: raynman) Tue Mar 26 16:01:24 2024 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr) Tue Mar 26 16:01:24 2024 -> bytecode database available for update (local version: 334, remote version: 335) Current database is 1 version behind. Downloading database patch # 335... Time: 0.1s, ETA: 0.0s [========================>] 836B/836B Tue Mar 26 16:01:24 2024 -> Testing database: '/var/lib/clamav/tmp.39fd15ea85/clamav-24b73e6a28cede702ecf714b2ee75966.tmp-bytecode.cld' ... Tue Mar 26 16:01:24 2024 -> Database test passed. Tue Mar 26 16:01:24 2024 -> bytecode.cld updated (version: 335, sigs: 86, f-level: 90, builder: raynman) |
あとはデーモンとして以降、自動更新するようにclamav-freshclamを起動します。
# systemctl enable clamav-freshclam # systemctl start clamav-freshclam |
ウィルス定義更新の設定は以上で完了です。
続いてウィルススキャナーの設定を行います。
# vi /etc/clamd.d/scan.conf # ログ関連に関わる設定 LogFile /var/log/clamd.scan LogFileMaxSize 2M LogTime yes LogSyslog no # ソケットに関する設定。意外と重要でこれを設定しないとオンアクセスが動かない LocalSocket /run/clamd.scan/clamd.sock LocalSocketGroup virusgroup LocalSocketMode 660 # スキャンはrootで実行 #User clamscan # 対象外とするディレクトリを指定 ExcludePath ^/proc/ ExcludePath ^/sys/ |
実際にスキャナーを起動します。
# systemctl enable clamd@scan # systemctl start clamd@scan |
ウィルス定義ファイルを読み込む関係上、起動に数分間かかることがあります。
なお、このデーモンは起動したからリアルタイムプロテクションが働くわけではなく、以下のclamdscanで手動スキャンする場合に定義ファイルを読み込まなくも良いようにするためのものなので、そのあたりを勘違いされないように。手動でウィルススキャンする場合は以下のようなコマンドで実行します。
# clamdscan -c /etc/clamd.d/scan.conf /search_dir ----------- SCAN SUMMARY ----------- Infected files: 0 Time: 0.314 sec (0 m 0 s) Start Date: 2024:03:28 14:00:12 End Date: 2024:03:28 14:00:13 |
このコマンドには主に以下のオプションがあります。いきなり削除というのは行わずにまず隔離(移動)というのが一般的かと思います。また最後の/search_dirはオプションでこれを指定しない場合はカレントディレクリを起点とします。
# 感染したファイルを表示する # clamdscan -c /etc/clamd.d/scan.conf --infected /search_dir # 感染ファイルを削除する # clamdscan -c /etc/clamd.d/scan.conf --remove /search_dir # 感染ファイルを指定ディレクトリに移動する # clamdscan -c /etc/clamd.d/scan.conf --move=/move_dir /search_dir # 感染ファイルを指定ディレクトリにコピーする # clamdscan -c /etc/clamd.d/scan.conf --copy=/copy_dir /search_dir |
これらのコマンドをシェルにまとめて定期的にフルスキャンを行うことが可能です。以下のシェルスクリプトを頂きました。これをcronに登録しておけば/以下全てのディレクトリをフルスキャンでき、ウィルスがあれば/tmpに該当ファイルを移動しつつ、rootにメール通知という動きになります。メール通知のためのs-nailというパッケージをインストールします。
# dnf install s-nail #!/bin/bash # 設定ファイル CONFIG=/etc/clamd.d/scan.conf # ウィルス通知先 MAILFROM=hoge@hoge.co.jp MAILTO=hoge@hoge.co.jp # スキャン実行 # ※ウイルス検知時は隔離ディレクトリへ隔離 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} | "[WARNING][`hostname`] Virus Alert" -S mta=smtp://xx.xx.xx.xx:25 -S smtp-auth=none -S v15-compat=yes -S from=$MAILFROM $MAILTO fi |
商用版みたいにリアルタイムプロテクションを有効にし、ウイルスが見つかったときにはそれをメール通知する仕組みも合わせて構築します。
これのデーモンはclamonaccと呼ばれるものですが、専用の設定ファイル等があるわけではなく、/etc/clamd.d/scan.confを編集することになります。
まずカーネルがこれに対応しているかチェックします。以下のようにFANOTIFYがyとなっていればOKです。
# cat /boot/config-* | grep FANOTIFY CONFIG_FANOTIFY=y CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y |
次にウィルスを検知したときに呼び出すスクリプトを予め用意しておきます。
# vi virusevent.sh #!/bin/bash MAILTO=<mailaddress> MAILFROM=<mailfrom> # メッセージの生成 message="Virus Found: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME" # メッセージをメール送信 echo "$message"| mail -s "[WARNING][`hostname`] Virus Alert" -S mta=smtp://xx.xx.xx.xx:25 -S smtp-auth=none -S v15-compat=yes -S from=$MAILFROM $MAILTO |
ファイルを保存したら実行権限を付与しておきます。
# chmod 755 virus_event.sh |
リアルタイムスキャンの設定の追加を行います。
# vi /etc/clamd.d/scan.conf # ウィルスを検知したときに呼び出すスクリプト VirusEvent /root/virus_event.sh # リアルタイムスキャンの対象とするディレクトリを指定。複数可だが/は不可 OnAccessIncludePath /home # リアルタイムスキャン対象としたディレクトリの中で対象外としたいディレクトリの指定 OnAccessExcludePath /home/user1 # ファイルの移動や作成のタイミングもスキャンを行う OnAccessExtraScanning yes # rootプロセスはスキャン対象外とする OnAccessExcludeRootUID yes # 感染ファイルを開いたり実行したりする動作をブロックする OnAccessPrevention yes # これを入れないとERROR: ClamCom: TIMEOUT while waiting on socket (recv)になる OnAccessExcludeRootUID yes |
clamd@scanを再起動しclamonaccを起動します。
# systemctl restart clamd@scan # systemctl enable clamonacc # systemctl start clamonacc # systemctl status clamonacc ● clamav-clamonacc.service - ClamAV On-Access Scanner Loaded: loaded (/usr/lib/systemd/system/clamav-clamonacc.service; enabled; preset: disabled) Active: active (running) since Fri 2024-03-29 14:33:35 JST; 7min ago Docs: man:clamonacc(8) man:clamd.conf(5) https://docs.clamav.net/ Main PID: 257445 (clamonacc) Tasks: 8 (limit: 96807) Memory: 3.9M CPU: 12ms CGroup: /system.slice/clamav-clamonacc.service mq257445 /usr/sbin/clamonacc -F --config-file=/etc/clamd.d/scan.conf Mar 29 14:33:35 alma9 systemd[1]: Started ClamAV On-Access Scanner. Mar 29 14:33:35 alma9 clamonacc[257445]: ClamInotif: watching '/home' (and all sub-directories) Mar 29 14:33:35 alma9 clamonacc[257445]: ClamInotif: extra scanning on inotify events enabled |
テストで本当にウィルスを検知して通知がくるか試してみます。eicarをダウンロードしてオンアクセス対象のディレトリに移動してみます。
# wget https://secure.eicar.org/eicar.com.txt # mv eicar.com.txt /home # cat /var/log/message <省略> clamonacc[258042]: /home/eicar.com.txt_1: Win.Test.EICAR_HDB-1 FOUND |
上記のような出力がでていたらOKです。またメールが飛んでくるもの確認してみてください。
参考URL
https://centossrv.com/clamav.shtml
https://inaba-serverdesign.jp/blog/20231122/clamav-realtime-scan-v10.html
https://www.infocircus.jp/2019/10/05/centos-7-virusscan-clamav/