[PR] 本記事にはプロモーションが含まれています。

Clam AntiVirus(ウイルス対策ソフト)|AlmaLinux 9に入れて、毎日自動でスキャンする設定

自宅サーバー構築
➔ 自宅サーバー構築メモの目次はこちら

【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の記事で使えるようにしています。

Bash
[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につなぐためのソケットを有効にします。

Bash
[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にも知らせて読み込み直させるように設定してから、最新の定義ファイルをダウンロードします。

Bash
[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と定義ファイルの自動更新を起動する

Bash
[root@almalinux ~]# systemctl enable --now clamd@scan  ※clamdを起動して、自動起動も設定

[root@almalinux ~]# systemctl enable --now clamav-freshclam  ※定義ファイルの自動更新を起動して、自動起動も設定

clamav-freshclamを動かしておくと、定義ファイルが定期的に自動で更新されます。

5. ウイルスを検知できるか確かめる

まず、そのままスキャンしてみます(コマンドを実行したディレクトリがスキャンされます)。

Bash
[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という団体が公開している、ウイルス対策ソフトの動作確認用のテストファイルを使います。本物のウイルスではなく、害はありませんが、ウイルス対策ソフトはウイルスとして検知します。

Bash
[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回自動で実行されます。

Bash
[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 のような、ファイルの形をしたシステムの情報(本物のファイルではない)は、スキャンから外しておきます。

Bash
[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つで、ファイルの変更・攻撃の痕跡・ウイルスを毎日見張れるようになりました。

コメント