【2026年5月26日時点の情報です】
Clam AntiVirus(ClamAV)は、Linuxで使える無料のウイルス対策ソフトです。サーバーの中に、ウイルスや不正なプログラムが置かれていないかを調べます。
このサーバーでは、Tripwire(ファイルの変更)、rkHunter(攻撃の痕跡)に加えて、ClamAVでウイルスを毎日チェックし、見つかったときだけメールで知らせるようにしています。
ClamAVのスキャン用のサービス(clamd)は、ウイルスの定義をメモリに読み込んでおくので、メモリを多く使います。私のサーバーでの使用量は約1.5GBです。
【2026年11月の追記】ここまでは、clamd を常に動かして、毎日サーバー全体を調べる形で書いています。2026年11月に見直して、ブログを動かしている仮想マシンでは clamd を止め、夜に /var/www・/home・/tmp だけを clamscan で調べる形に変えました(KVM のホストでは ClamAV をやめました)。見つけてもファイルは動かさず、メールで知らせるだけにしています。
1. ClamAVをインストールする
ClamAVもEPELにあります。EPELはTripwireの記事で使えるようにしています。
[root@almalinux ~]# dnf -y install clamav clamd clamav-freshclam ※ClamAV本体、スキャン用のサービス、定義ファイルの更新ツール
(途中省略)
インストール済み:
clamav-1.4.3-3.el9.x86_64 clamav-filesystem-1.4.3-3.el9.noarch clamav-freshclam-1.4.3-3.el9.x86_64
clamav-lib-1.4.3-3.el9.x86_64 clamd-1.4.3-3.el9.x86_64
完了しました!| パッケージ | 役割 |
|---|---|
| clamav | ウイルススキャンの本体 |
| clamd | スキャン用のサービス(常駐して、スキャンを速くする) |
| clamav-freshclam | ウイルス定義ファイルを更新するツール |
2. clamdを設定する
スキャン用のサービス(clamd)の設定ファイルを編集します。サーバー全体をスキャンできるようにrootで動かし、他のツールからclamdにつなぐためのソケットを有効にします。
[root@almalinux ~]# vi /etc/clamd.d/scan.conf ※clamdの設定ファイルを編集
# Run as another user (clamd must be started by root for this option to work)
# Default: don't drop privileges
#User clamscan ← 行の先頭に # を付ける(rootで動かして、すべてのファイルをスキャンできるようにする)
# Path to a local socket file the daemon will listen on.
# Default: disabled (must be specified by a user)
LocalSocket /run/clamd.scan/clamd.sock ← 行の先頭の # を外す3. ウイルス定義ファイルを最新にする
定義ファイルを更新したときに、clamdにも知らせて読み込み直させるように設定してから、最新の定義ファイルをダウンロードします。
[root@almalinux ~]# vi /etc/freshclam.conf ※定義ファイルの更新の設定ファイルを編集
# Send the RELOAD command to clamd.
# Default: no
#NotifyClamd /path/to/clamd.conf
NotifyClamd /etc/clamd.d/scan.conf ← 追加(更新したらclamdに知らせる)
[root@almalinux ~]# freshclam ※定義ファイルを最新にする
ClamAV update process started at Tue May 26 14:46:23 2026
daily database available for download (remote version: 28011)
(途中省略)
daily.cvd updated (version: 28011, sigs: 355458, f-level: 90, builder: svc.clamav-publisher)
(途中省略)
main.cvd updated (version: 63, sigs: 3287027, f-level: 90, builder: tomjudge)
(途中省略)
bytecode.cvd updated (version: 339, sigs: 80, f-level: 90, builder: nrandolp)この時点ではclamdをまだ起動していないので、最後に「NotifyClamd」に関するエラーが出ることがあります。定義ファイルの更新(updated)が表示されていれば問題ありません。
4. clamdと定義ファイルの自動更新を起動する
[root@almalinux ~]# systemctl enable --now clamd@scan ※clamdを起動して、自動起動も設定
[root@almalinux ~]# systemctl enable --now clamav-freshclam ※定義ファイルの自動更新を起動して、自動起動も設定clamav-freshclamを動かしておくと、定義ファイルが定期的に自動で更新されます。
5. ウイルスを検知できるか確かめる
まず、そのままスキャンしてみます(コマンドを実行したディレクトリがスキャンされます)。
[root@almalinux ~]# clamdscan -c /etc/clamd.d/scan.conf --remove ※ウイルスなしの場合
/root: OK
----------- SCAN SUMMARY -----------
Infected files: 0 ← ウイルスは見つからなかった
Time: 0.307 sec (0 m 0 s)次に、EICARという団体が公開している、ウイルス対策ソフトの動作確認用のテストファイルを使います。本物のウイルスではなく、害はありませんが、ウイルス対策ソフトはウイルスとして検知します。
[root@almalinux ~]# curl -O https://secure.eicar.org/eicar.com.txt ※テストファイルをダウンロード
[root@almalinux ~]# curl -O https://secure.eicar.org/eicar_com.zip ※ZIPに入ったテストファイル
[root@almalinux ~]# clamdscan -c /etc/clamd.d/scan.conf --remove ※ウイルスありの場合
/root/eicar.com.txt: Eicar-Test-Signature FOUND ← ウイルスを検知
/root/eicar.com.txt: Removed. ← 削除した
/root/eicar_com.zip: Eicar-Test-Signature FOUND ← ZIPの中も検知
/root/eicar_com.zip: Removed. ← 削除した
----------- SCAN SUMMARY -----------
Infected files: 2 ← 2つのウイルスを検知した–remove を付けると、見つけたファイルを削除します。テストファイルもこれで片付きます。
6. 毎日自動でスキャンする
毎日、サーバー全体をスキャンして、ウイルスを見つけたときだけ、隔離したうえでroot宛てにメールで知らせるスクリプトを作ります。/etc/cron.daily/ に置くと、毎日1回自動で実行されます。
[root@almalinux ~]# 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}
[root@almalinux ~]# chmod +x /etc/cron.daily/clamdscan ※実行できるようにするスキャンしない場所も設定します。隔離用のディレクトリと、/proc や /sys のような、ファイルの形をしたシステムの情報(本物のファイルではない)は、スキャンから外しておきます。
[root@almalinux ~]# echo ExcludePath ^/tmp/clamdscan-quarantinedir-.*/ >> /etc/clamd.d/scan.conf ※隔離用のディレクトリをスキャンしない
[root@almalinux ~]# echo ExcludePath ^/proc/ >> /etc/clamd.d/scan.conf ※/proc をスキャンしない
[root@almalinux ~]# echo ExcludePath ^/sys/ >> /etc/clamd.d/scan.conf ※/sys をスキャンしない
[root@almalinux ~]# systemctl restart clamd@scan ※clamdを再起動して設定を反映私はこれまでに通知が来たことはありません。
まとめ
ClamAVを入れて、定義ファイルを自動で更新しながら、毎日サーバー全体をスキャンし、ウイルスを見つけたときだけメールで知らせるようにしました。
ポイントは、clamdの設定(/etc/clamd.d/scan.conf)を先に済ませてから、定義ファイルの更新と起動を行うことです。また、clamdはメモリを多く使うので、メモリに余裕のあるサーバーで動かしましょう。
Tripwire、rkHunter、ClamAVの3つで、ファイルの変更・攻撃の痕跡・ウイルスを毎日見張れるようになりました。



コメント