メインコンテンツへスキップ
  1. ブログ/

【入門】AlmaLinux 9でClamAVを導入し、定期スキャンを自動設定する方法

·
セキュリティ AlmaLinux ClamAV
目次

【入門】AlmaLinux 9でClamAVを導入し、定期スキャンを自動設定する方法
【入門】AlmaLinux 9でClamAVを導入し、定期スキャンを自動設定する方法

初めに
#

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 によるウイルススキャンは、cronsystemd のタイマーを利用して自動化することが可能です。

近年の 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 の導入と、自動スキャン環境の構築は完了となります。

関連記事

AlmaLinuxのSSHにGoogle Authenticatorで二段階認証(TOTP)を導入する方法
SSH セキュリティ AlmaLinux 二要素認証
【初心者向け】RPMのChangelogからセキュリティ修正を確認する方法
Linux RPM セキュリティ AlmaLinux
【セキュリティ】LinuxでASLRの設定を確認する方法
Linux ASLR セキュリティ AlmaLinux 音声解説あり
【脆弱性確認】RPMファイルを展開してソースコードとパッチを確認する方法
Linux RPM セキュリティ AlmaLinux
【スクショ解説】aaPanel のインストールとサイト追加手順
AlmaLinux AaPanel コントロールパネル
【簡単実装】firewalldで日本国内IPアドレスのみ許可する方法
Linux Firewalld セキュリティ ネットワーク