CentOS Stream 9 への ClamAV インストールガイド:サーバーのマルウェア対策を A から Z まで解説

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

なぜ Linux でもウイルススキャンが必要なのか?

多くの管理者は、Linux はマルウェアとは無縁だと信じがちです。しかし実際には、SSH 情報の流出後に XMRig マイニングスクリプトやランサムウェアに感染したサーバーを、私は何度も目にしてきました。古い WordPress プラグイン一つで、ハッカーはあなたのサーバーをスパム配信拠点に変えてしまいます。このような状況において、ClamAV はシステムをクリーンアップするための最も強力なオープンソースツールです。

ClamAV は単なるシステムファイルの走査にとどまりません。Nextcloud のようなファイルサーバーやメールサーバーを運用している場合に非常に効果的です。現在、ClamAV のデータベースは 850 万件を超えるマルウェア定義を保持しています。この記事では、CentOS Stream 9 に ClamAV を実戦レベルで導入する手順を解説します。

覚えておくべき 3 つのコアコンポーネント

設定時に混乱しないよう、以下の 3 つの概念を明確に区別しておきましょう。

  • clamscan: 手動スキャンツール。実行のたびにウイルスデータベース全体を RAM にロードするため、かなり時間がかかります。
  • freshclam: Cisco のサーバーから最新のウイルス定義を自動的に更新するサービス。
  • clamd (Daemon): バックグラウンドで動作するサービス。ウイルスデータベースを RAM 上に保持して即座にスキャンを行うため、大量のファイルをスキャンする際の CPU 負荷を抑えられます。

サーバーの RAM に余裕がある(2GB 以上)場合は、最高のパフォーマンスを得るために clamd の使用をお勧めします。

詳細なインストール手順

ステップ 1: EPEL リポジトリの有効化

ClamAV は CentOS Stream 9 のデフォルトリポジトリには含まれていません。開始する前に EPEL (Extra Packages for Enterprise Linux) をインストールする必要があります。

sudo dnf install epel-release -y
sudo dnf update -y

ステップ 2: ClamAV パッケージのインストール

スキャンエンジン、デーモンサービス、およびデータ更新ツールを同時にインストールします。

sudo dnf install clamav clamd clamav-update -y

ステップ 3: SELinux の設定(重要)

これは、root 権限を使用していても ClamAV が Permission Denied エラーを出す主な原因です。CentOS Stream 9 はアクセス制御が非常に厳格です。以下の 2 つのコマンドを実行して、スキャナーに権限を付与してください。

sudo setsebool -P antivirus_can_scan_system 1
sudo setsebool -P clamd_use_jit 1

設定内容は次のコマンドで確認できます: getsebool -a | grep antivirus

ステップ 4: 初回のウイルスデータベース更新

スキャンを開始する前に、システムに最新のデータが必要です。/etc/freshclam.conf にあるデフォルトの設定ファイルは、通常そのまま使用できます。

以下のコマンドで更新を実行します:

sudo freshclam

もし 403 エラーが発生した場合は、IP がレート制限にかかっている可能性があります。15 分ほど待ってから再試行してください。

ステップ 5: Clam デーモン (clamd) の設定

clamd を動作させるには、/etc/clamd.d/scan.conf ファイルを編集する必要があります。vinano でファイルを開き、以下の 2 箇所を変更してください。

  • LocalSocket /run/clamd.scan/clamd.sock の行の # を削除してコメントを解除します。
  • Example という行がコメントアウトされている(先頭に # がある)ことを確認します。

サービスを有効化し、システム起動時に自動実行されるようにします:

sudo systemctl enable clamd@scan --now

実戦的なマルウェアスキャン手法

Web ディレクトリでの clamscan の使用

例えば、/var/www/html ディレクトリにマルウェアが潜んでいる疑いがあるとします。以下のコマンドを使用して詳細にスキャンし、問題のあるファイルのみを表示させます。

clamscan -r -i /var/www/html

パラメータの説明:

  • -r: サブディレクトリを再帰的にスキャンします。
  • -i: 感染したファイル (Infected) のリストのみを出力するため、確認が容易になります。

Cronjob による自動化

手動でのスキャンは非常に時間がかかります。私は通常、毎日午前 2 時にスキャンを実行するようにスクリプトを設定しています。/etc/cron.daily/clamav_scan ファイルを以下の内容で作成します。

#!/bin/bash
SCAN_DIR="/home /var/www/html"
LOG_FILE="/var/log/clamav/daily_scan.log"
/usr/bin/clamscan -r -i $SCAN_DIR > $LOG_FILE

実行権限を付与するのを忘れないでください: chmod +x /etc/cron.daily/clamav_scan

パフォーマンスと RAM に関する注意点

ClamAV は「RAM 喰い」として有名です。データベースをロードすると、clamd サービスは 1.2GB から 1.5GB の RAM を占有することがあります。サーバーの RAM が 2GB しかない場合、OOM (Out Of Memory) によってシステムがフリーズする可能性が高くなります。

低スペックサーバーにおける私の経験則は以下の通りです:

  1. clamd を常駐させず、必要な時だけ clamscan を使用する。
  2. 仮想メモリを補助するために、最低 2GB のスワップファイルを作成しておく。
  3. ルートディレクトリ / 全体ではなく、重要なディレクトリのみをスキャンする。

また、CentOS Stream 9 ではサービス名が clamd@scan です。CentOS 7 向けの古いガイドからスクリプトをコピーする場合は、この名前を更新するのを忘れないでください。

まとめ

ClamAV は Linux サーバーにとって非常に信頼性の高い保護レイヤーです。巧妙な攻撃を 100% 防げるわけではありませんが、依然として最も効果的なマルウェアフィルタリングツールの一つです。ClamAV を強力なファイアウォールと組み合わせて、システムの安全を維持しましょう。

Share: