初めに #
Linuxにてサーバーを運用する場合、ウイルス対策は決して無視できない必須のセキュリティ対策となります。
「Linuxだから大丈夫」と対策を怠っていると、サーバーがマルウェアに感染し、外部への攻撃の踏み台にされたり、機密情報が流出するなど、深刻な事態につながる可能性があります。
そこで重要となるのが、定期的なウイルスチェックです。
しかし、サーバーのウイルス対策と聞くと、「高額な商用ソフトウェアが必要でお金がかかる」「設定が複雑で難しい」といったイメージを持つかもしれません。
「気軽に始めてみたい」「お金をかけずに実装したい」といった場合は、OSS(オープンソースソフトウェア)を利用することで、費用をかけずにシステムのウイルススキャンを実装することができます。
これにより、サーバー内部に潜伏している悪意のあるファイルを早期に検出し、被害を未然に防ぐことが可能となります。
本記事では、AlmaLinux 9環境へClamAVを導入し、スキャンの自動化を行う方法を、初心者向けに解説します。
なお、本記事の操作は root ユーザーまたは sudo 権限を持つユーザーで実行することを前提としています。
ClamAVとは? #
ClamAV(クラム・アンチウイルス)は、ウイルス、トロイの木馬、ワームなどの多様なマルウェアを検出することができる、アンチウイルスエンジンです。
これらはオープンソースとして開発されており、商用・個人利用を問わず誰でも無料で利用することができます。
ClamAVは、単にサーバー内のファイルをチェックするだけでなく、手動やスケジュールに従ったスキャンから、より高度なセキュリティ連携まで、幅広い用途で利用できます。
主な機能は以下の通りとなります。
| 機能 | 内容 |
|---|---|
| 定期/手動スキャン | 指定パスを手動またはスケジュールでスキャンする機能 |
| メールサーバー連携 | メール添付ファイルをリアルタイムでスキャン |
| Webアプリケーション連携 | アップロードファイルを保存前にスキャン |
| リアルタイム保護 | clamdデーモン(常駐プログラム)によるリアルタイム監視 |
また、ウイルス定義はデータベースとして保持されており、日々更新されることで新種のマルウェアにも対応できる仕組みとなっています。
ClamAVのインストール #
AlmaLinux では ClamAV が EPEL リポジトリから提供されております。
初めに次のコマンドを実行し EPEL を有効化します。
dnf install epel-release
続いて、ClamAV の本体および関連パッケージのインストールを行います。
次のコマンドを実行してください。
dnf install clamav clamav-update clamd
実行すると、以下のようにインストールパッケージの確認画面が表示されます。
$ dnf install clamav clamav-update clamd
Last metadata expiration check: 0:21:50 ago on Sun 07 Dec 2025 05:28:53 PM JST.
Dependencies resolved.
===========================================================================================================
Package Architecture Version Repository Size
===========================================================================================================
Installing:
clamav x86_64 1.4.3-2.el9 epel 5.6 M
clamav-freshclam x86_64 1.4.3-2.el9 epel 2.9 M
clamd x86_64 1.4.3-2.el9 epel 92 k
Installing dependencies:
clamav-filesystem noarch 1.4.3-2.el9 epel 17 k
clamav-lib x86_64 1.4.3-2.el9 epel 3.5 M
Transaction Summary
===========================================================================================================
Install 5 Packages
Total download size: 12 M
Installed size: 262 M
Is this ok [y/N]:
内容を確認し問題なければ y を入力してインストールを進めてください。
インストールが完了すると、次のメッセージが表示されます。
Complete!
以下のコマンドを実行することで、パッケージの導入有無を確認することができます。
$ rpm -qa |grep "clamav"
clamav-lib-1.4.3-2.el9.x86_64
clamav-filesystem-1.4.3-2.el9.noarch
clamav-freshclam-1.4.3-2.el9.x86_64
clamav-1.4.3-2.el9.x86_64
上記のようにパッケージ情報が表示されれば、ClamAV のインストールは完了となります。
ウイルス定義データベースの更新 #
ClamAV のインストールが完了したら、次にウイルス定義のデータベース(シグネチャ)を最新の状態に更新する必要があります。
定義ファイルが古いままの場合、最新のマルウェアを検出できなくなります。
そのため、初回更新は必ず実行してください。
更新は 以下の freshclam コマンドで行う事が可能です。
freshclam
コマンドを実行すると、以下のようにウイルス定義ファイルのダウンロードと更新状況が表示されます。
freshclam
ClamAV update process started at Sun Dec 7 18:00:10 2025
daily database available for download (remote version: 27842)
Time: 10.2s, ETA: 0.0s [========================>] 61.77MiB/61.77MiB
Testing database: '/var/lib/clamav/tmp.96bf5bb110/clamav-2e77f95b005539b9ef5032337373526f.tmp-daily.cvd' ...
Database test passed.
daily.cvd updated (version: 27842, sigs: 2077269, f-level: 90, builder: svc.clamav-publisher)
bytecode.cvd updated (version: 339, sigs: 80, f-level: 90, builder: nrandolp)
初回の更新はシグネチャデータのダウンロード量が多いため、数分ほどかかる場合があります。
ウイルス定義データベースの自動更新 #
ClamAV のウイルス定義データベースは、手動で実行せずとも freshclam デーモンにより自動的に更新することが可能です。
自動更新を有効にする場合は、以下のコマンドを実行し更新サービスを有効化してください。
systemctl enable --now clamav-freshclam.service
次に以下のコマンドを実行し、サービスの起動確認を行ってください。
systemctl is-active clamav-freshclam.service
以下のように active と表示されれば、自動更新デーモンが正常に稼働しています。
active
デフォルトの設定では約 2 時間ごとにシグネチャの自動更新が実行されます。
ログ出力先の変更や更新頻度のカスタマイズが必要な場合は、必要に応じて以下の設定ファイルを編集してください。
/etc/freshclam.conf
自動スキャンの設定 #
ClamAV によるウイルススキャンは、cron や systemd のタイマーを利用して自動化することが可能です。
近年の Linux ディストリビューションでは systemd のタイマーによるタスクの自動化が推奨されているため、今回は systemd を使用した方法を紹介します。
今回の設定では、以下の内容を実装します。
- サーバー全体を対象にした定期スキャンの実施
- 不要ディレクトリの除外
- ウイルスを検出した際は隔離ディレクトリへ移動(削除はしない)
- スキャン結果をログに出力
- systemd のサービス + タイマーで毎日自動実行
1. スキャンサービスファイルの作成 #
初めにサーバー全体を定期的にスキャンするための systemd サービスファイル を作成します。
以下のコマンドで新規サービスファイルを作成してください。
vi /etc/systemd/system/clamav-scan.service
続いて、作成したファイルに以下の内容を記述してください。
[Unit]
Description=ClamAV Full System Scan
[Service]
Type=oneshot
ExecStart=/usr/bin/clamscan -r / \
--exclude-dir="^/proc" \
--exclude-dir="^/sys" \
--exclude-dir="^/run" \
--exclude-dir="^/dev" \
--exclude-dir="^/tmp" \
--move=/var/quarantine \
--log=/var/log/clamav/scan.log
サービスファイル内で指定している内容は以下のとおりです。
| 設定項目 | 説明 |
|---|---|
Type=oneshot |
単発実行のジョブとして動作するように指定 |
ExecStart= |
実際に実行するコマンドを指定 |
ClamAV のスキャンコマンドで指定している内容は以下のとおりです。
| オプション | 説明 |
|---|---|
-r / |
ルートディレクトリ以下を再帰的にキャン |
--exclude-dir="^/proc" |
/proc を除外(仮想FSのためスキャン不要) |
--exclude-dir="^/sys" |
/sys を除外(仮想FSのためスキャン不要) |
--exclude-dir="^/run" |
/run を除外(可変メモリ領域ためスキャン不要) |
--exclude-dir="^/dev" |
/dev を除外(デバイスファイルためスキャン不要) |
--exclude-dir="^/tmp" |
/tmp を除外(一時ファイルためスキャン不要) |
--move=/var/quarantine |
検出したファイルを削除せず隔離ディレクトリへ移動 |
--log=/var/log/clamav/scan.log |
スキャン結果をログとして出力 |
2. 必要ディレクトリの作成 #
次にスキャン結果のログ保存先および、ウイルスが検出された際の隔離先ディレクトリを作成します。
以下のコマンドを実行しディレクトリを作成してください。
mkdir -p /var/log/clamav
mkdir -p /var/quarantine
3. スキャンタイマーの作成 #
先ほど作成したスキャンサービスを定期的に実行するため、systemd のタイマーユニットを作成します。
以下のコマンドを実行し、新しいタイマーファイルを作成してください。
vi /etc/systemd/system/clamav-scan.timer
続いて、作成したファイルに以下の内容を記述してください。
[Unit]
Description=Daily ClamAV Full System Scan
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
このタイマーは、毎日 1 回 ClamAV のフルスキャンを自動で実行する設定になっています。
それぞれの設定内容は以下の通りとなります。
| 設定項目 | 説明 |
|---|---|
OnCalendar=daily |
1日1回、スキャンを実行するように指定 |
Persistent=true |
サーバー停止中に実行できなかった場合、次回起動時に補完実行するように指定 |
WantedBy=timers.target |
タイマーとして有効化するための指定 |
設定ファイルの作成が完了したら、以下のコマンドでタイマーを有効化してください。
systemctl enable --now clamav-scan.timer
タイマーが正しく登録されているかは、次のコマンドで確認できます。
systemctl list-timers --all | grep clamav
実行結果の次回実行予定日時が表示されていれば設定完了となります。
$ systemctl list-timers --all | grep clamav
Mon 2025-12-08 00:00:00 JST 1h 56min left - - clamav-scan.timer clamav-scan.service
以上でタイマーの設定は完了となります。
動作確認 #
最後に作成した自動スキャンの設定が正しく動作するか、実際に確認してみます。
今回は安全なテスト用ウイルスファイル(EICARテストファイル)を使用して、スキャン・隔離が意図通りに動作するかをチェックします。
1. テスト用ウイルスファイルの設置 #
初めに任意のディレクトリに EICAR テストファイルを設置します。
今回は /home/testscan ディレクトリを作成し、テストファイルを設置します。
mkdir -p /home/testscan
cd /home/testscan
curl -O https://secure.eicar.org/eicar.com.txt
2. スキャンサービスの手動実行 #
以下のコマンドにて設定した systemd のサービスを手動で実行し、動作確認を行います。
systemctl start clamav-scan.service
今回の設定はサーバー全体を対象としているため、完了までに数十分から数時間かかる場合があります。
必要に応じてスキャン対象を絞ることで、実行時間を大幅に短縮することが可能となります。
3. スキャン結果の確認 #
スキャンが完了すると、ログに以下のような最終結果が出力されます。
----------- SCAN SUMMARY -----------
Known viruses: 8708983
Engine version: 1.4.3
Scanned directories: 12270
Scanned files: 92368
Infected files: 1
Data scanned: 5545.95 MB
Data read: 5544.39 MB (ratio 1.00:1)
Time: 3528.523 sec (58 m 48 s)
Start Date: 2025:12:07 23:26:50
End Date: 2025:12:08 00:25:39
各項目の説明は以下の通りとなります。
| 項目 | 説明 |
|---|---|
| Known viruses | ClamAV が認識しているウイルス定義の総数 |
| Scanned directories | スキャン対象となったディレクトリの数 |
| Scanned files | スキャン対象となったファイルの数 |
| Infected files | スキャンで検出されたウイルスファイルの数 |
| Data scanned / Data read | 実際にスキャンしたデータ容量と読み込んだ容量 |
| Time | スキャンにかかった時間 |
| Start Date / End Date | スキャン開始・終了時刻 |
結果として先ほど設置した EICAR テストファイルが検出され検知ファイル数が 1 となっています。
さらに、隔離ディレクトリ /var/quarantine を確認すると、検出されたファイルが実際に移動されていることがわかります。
$ ls -al /var/quarantine/
total 8
drwxr-xr-x. 2 root root 27 Dec 8 00:06 .
drwxr-xr-x. 20 root root 4096 Dec 7 22:03 ..
-rw-r--r--. 1 root root 68 Dec 7 23:26 eicar.com.txt
以上で、AlmaLinux 9 への ClamAV の導入と、自動スキャン環境の構築は完了となります。