ClamAVアンチウィルスソフト

スポンサーリンク
RockyLinux
この記事は約18分で読めます。
ランキングに参加しています。応援よろしくお願いします。
ブログランキング・にほんブログ村へ 人気ブログランキングへ FC2ブログランキングへ
スポンサーリンク
この記事が気に入ったら
フォローしよう
最新情報をお届けします。

前回の「セキュリティ強化編」として「RKHunterによるrootkit検知」に引き続き、Rocky Linux 9 サーバ構築手順次のステップは、「ClamAVアンチウィルスソフト」について設定を行います。

当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。

ClamAV(Clam AntiVirus)は、Unix系システム向けのオープンソースアンチウィルスソフトウェアです。メール通信、ウェブトラフィック、ファイル、その他の受信データのウィルススキャンを行い、システムのセキュリティを強化します。

公式ドキュメント:
https://docs.clamav.net/

ClamAVは以下の機能を提供します。

  • リアルタイムファイルスキャン
  • メールスキャン機能
  • ウィルス定義ファイルの自動更新
  • コマンドラインでのマニュアルスキャン
  • 検出されたウィルスの隔離機能

EPELリポジトリからClamAV関連のパッケージをインストールします。

# dnf install -y clamav clamd clamav-update

'~ 中略 ~'
Installed:
  clamav-1.0.7-1.el9.x86_64                        clamav-filesystem-1.0.7-1.el9.noarch
  clamav-freshclam-1.0.7-1.el9.x86_64              clamav-lib-1.0.7-1.el9.x86_64
  clamd-1.0.7-1.el9.x86_64

Complete!

パッケージ内容の説明:

  • clamd : Clam AntiVirus デーモンプロセス
  • clamav : Clam AntiVirus スキャナ用のエンドユーザ ツール
  • clamav-freshclam : ウイルスデータベース更新ユーティリティ
  • clamav-lib : Clam AntiVirus スキャナ用の動的ライブラリ
  • clamav-update : Clam AntiVirus スキャナデータファイルの自動更新機能

ウィルス定義ファイル更新ツール(freshclam)の設定を行います。

# vi /etc/freshclam.conf

'~ 中略 ~'
# Send the RELOAD command to clamd.
# Default: no
#NotifyClamd /path/to/clamd.conf
NotifyClamd /etc/clamd.d/scan.conf

7行目:clamdにウィルス定義ファイル更新通知を設定

ClamAVの初回セットアップとして、ウィルス定義ファイルを更新します。

# freshclam
ClamAV update process started at Sat Sep 14 23:38:34 2024
daily database available for download (remote version: 27398)
Time:    7.1s, ETA:    0.0s [========================>]   61.16MiB/61.16MiB
Testing database: '/var/lib/clamav/tmp.75d03b1744/clamav-6b32b947d6b67b301f239d26af9c05d8.tmp-daily.cvd' ...
Database test passed.
daily.cvd updated (version: 27397, sigs: 2066804, f-level: 90, builder: raynman)
Received an older daily CVD than was advertised. We'll retry so the incremental update will ensure we're up-to-date.
daily database available for update (local version: 27397, remote version: 27398)
Current database is 1 version behind.
Downloading database patch # 27398...
Time:    0.1s, ETA:    0.0s [========================>]    4.16KiB/4.16KiB
Testing database: '/var/lib/clamav/tmp.75d03b1744/clamav-39dd527781223ec111c99dc73ea3259e.tmp-daily.cld' ...
Database test passed.
daily.cld updated (version: 27398, sigs: 2066825, f-level: 90, builder: raynman)
main database available for download (remote version: 62)
Time:   18.7s, ETA:    0.0s [========================>]  162.58MiB/162.58MiB
Testing database: '/var/lib/clamav/tmp.75d03b1744/clamav-48fb5076129e25097008e7184e7d1f82.tmp-main.cvd' ...
Database test passed.
main.cvd updated (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
bytecode database available for download (remote version: 335)
Time:    0.2s, ETA:    0.0s [========================>]  282.94KiB/282.94KiB
Testing database: '/var/lib/clamav/tmp.75d03b1744/clamav-aae30db020f12af93b14accc3876e79c.tmp-bytecode.cvd' ...
Database test passed.
bytecode.cvd updated (version: 335, sigs: 86, f-level: 90, builder: raynman)
ERROR: NotifyClamd: No communication socket specified in /etc/clamd.d/scan.conf
ERROR: Can't send to clamd: Socket operation on non-socket

初回実行時にはエラーが表示されますが、これは後述のscan.conf設定で解決されます。

ClamAVデーモンの詳細設定を行います。

# vi /etc/clamd.d/scan.conf

'~ 抜粋 ~'
LogFile /var/log/clamav/clamd.log
LogFileMaxSize 2M
LogTime yes
LogSyslog yes
LogVerbose yes
LogRotate yes
ExtendedDetectionInfo yes
LocalSocket /run/clamd.scan/clamd.sock
MaxDirectoryRecursion 20
ExcludePath ^/tmp/clamscan_quarantine_.*/
ExcludePath ^/proc/
ExcludePath ^/sys/

設定項目の説明:

  • LogFile : ログファイルの出力先
  • LogFileMaxSize : ログファイルの最大サイズ(2MB)
  • LogTime : タイムスタンプをログに含める
  • LogSyslog : システムログ(syslog)への出力の有効化
  • LogVerbose : 詳細なログ出力の有効化(デバッグ時に有効)
  • LogRotate : ログローテーションの有効化
  • ExtendedDetectionInfo : 拡張検出情報(検出されたマルウェアに関する追加情報(ファイルサイズ、ハッシュなど)が記録)の有効化
  • ExcludePath : 除外ディレクトリ設定

ClamAVのログファイル出力先ディレクトリを作成します。

# mkdir -p /var/log/clamav
# systemctl start clamd@scan
# systemctl enable clamd@scan
Created symlink /etc/systemd/system/multi-user.target.wants/clamd@scan.service → /usr/lib/systemd/system/clamd@.service.

1行目:clamdサービス起動
2行目:clamd自動起動設定

# systemctl start clamav-freshclam
#systemctl enable clamav-freshclam
Created symlink /etc/systemd/system/multi-user.target.wants/clamav-freshclam.service → /usr/lib/systemd/system/clamav-freshclam.service.

1行目:clamav-freshclamサービス起動
2行目:clamav-freshclam自動起動設定

正常なシステムでのスキャンテストを実行します。

# clamscan --infected --remove --recursive /home

----------- SCAN SUMMARY -----------
Known viruses: 8698624
Engine version: 1.0.7
Scanned directories: 5
Scanned files: 12
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 28.553 sec (0 m 28 s)
Start Date: 2024:09:15 00:23:27
End Date: 2024:09:15 00:23:56

EICARテストファイルをダウンロードして、ウィルス検出機能をテストします。

# wget https://files.trendmicro.com/products/eicar-file/eicar.com

ダウンロードしたテストファイルをスキャンします。

# clamscan --infected --remove --recursive .
/root/eicar.com: Win.Test.EICAR_HDB-1 FOUND
/root/eicar.com: Removed.

----------- SCAN SUMMARY -----------
Known viruses: 8698624
Engine version: 1.0.7
Scanned directories: 2
Scanned files: 12
Infected files: 1
Data scanned: 0.01 MB
Data read: 0.00 MB (ratio 2.00:1)
Time: 29.115 sec (0 m 29 s)
Start Date: 2024:09:15 00:47:21
End Date:   2024:09:15 00:47:51

この結果により、ClamAVがウィルスファイルを正常に検出し、削除したことが確認できます。

毎日自動的にシステム全体をスキャンするスクリプトを作成します。

# vi /etc/cron.daily/clamav_scan
#!/bin/bash

# Set variables
DATE=$(date +%Y%m%d)
QUARANTINE_DIR="/tmp/clamscan_quarantine_$DATE"
CONF_FILE="/etc/clamd.d/scan.conf"
TEMP_LOG="/tmp/clamav_scan_$DATE.log"
VIRUS_FOUND_STRING="FOUND"
LOG_TAG="$(basename $0)"

# Check if configuration file exists
if [ ! -f "$CONF_FILE" ]; then
    logger -t "$LOG_TAG" "Error: Configuration file $CONF_FILE not found. Scan aborted."
    exit 1
fi

# Create quarantine directory
mkdir -p "$QUARANTINE_DIR"

# Run ClamAV scan using clamdscan and output to temporary log file
clamdscan --config-file="$CONF_FILE" --move="$QUARANTINE_DIR" / > "$TEMP_LOG" 2>&1

# Send the entire log content to syslog
cat "$TEMP_LOG" | logger -t "$LOG_TAG"

# Check if any viruses were found by searching for VIRUS_FOUND_STRING in the log
if grep -q "$VIRUS_FOUND_STRING" "$TEMP_LOG"; then
    # Viruses were found, send email to root
    echo "Viruses detected. Please check syslog for details." | mail -s "ClamAV Scan Alert" root

    logger -t "$LOG_TAG" "Viruses detected. Quarantined files can be found in $QUARANTINE_DIR."
else
    # No viruses found, remove quarantine directory
    rm -rf "$QUARANTINE_DIR"

    logger -t "$LOG_TAG" "No viruses detected in scan."
fi

# Remove the temporary log file
rm -f "$TEMP_LOG"
# chmod +x /etc/cron.daily/clamav_scan
# echo "ExcludePath ^/tmp/clamscan_quarantine_.*/" >> /etc/clamd.d/scan.conf
# systemctl restart clamd@scan

スクリプトの主な機能:

  1. 日付ベースの隔離ディレクトリ作成 : 検出されたファイルを日付別のディレクトリに隔離
  2. 設定ファイル確認 : 設定ファイルの存在確認で安全な実行を保証
  3. システム全体スキャン : clamdscanでシステム全体をスキャン
  4. syslogへのログ出力 : スキャン結果をシステムログに記録
  5. メール通知 : ウィルス検出時にroot宛にメール送信
  6. 自動クリーンアップ : ウィルス未検出時の隔離ディレクトリ削除
  7. 一時ファイルの削除 : 実行後の一時ログファイルクリーンアップ

ClamAVの各種ログは以下の場所に保存されます。

# clamdデーモンログ
/var/log/clamav/clamd.log

# freshclamログ
/var/log/clamav/freshclam.log

# 自動スキャンログ(syslog)
/var/log/messages
# clamdログの確認
tail -50 /var/log/clamav/clamd.log

# freshclamログの確認
tail -50 /var/log/clamav/freshclam.log

# 自動スキャンログの確認
grep clamav_scan /var/log/messages

# ウィルス検出ログの抽出
grep -i "FOUND\|infected" /var/log/clamav/clamd.log
grep -i "virus" /var/log/messages

freshclamサービスは自動的に定義ファイルを更新しますが、設定を確認できます。

# vi /etc/freshclam.conf

主要な設定項目:

# 更新チェック回数(1日24回 = 1時間間隔)
Checks 24

# データベースミラーサーバー設定
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net

自動スキャンで検出されたファイルは隔離ディレクトリに移動されます。

# 隔離ファイルの確認
ls -la /tmp/clamscan_quarantine_*

# 古い隔離ディレクトリの削除(30日以上)
find /tmp -name "clamscan_quarantine_*" -type d -mtime +30 -exec rm -rf {} \;

大容量ファイルやディスクI/Oが気になる場合の調整。

# vi /etc/clamd.d/scan.conf

# 最大ファイルサイズ(デフォルト25MB)
MaxFileSize 50M

# 最大スキャン時間(秒)
MaxScanTime 300

# 同時スキャンスレッド数
MaxThreads 10

月1回程度、以下のメンテナンスを実行することを推奨します。

# ウィルス定義ファイル手動更新
# freshclam

# サービス状態確認
# systemctl status clamd@scan
# systemctl status clamav-freshclam

# ログファイルサイズ確認
# du -sh /var/log/clamav/*

# 手動フルスキャン実行
# clamscan --recursive --infected --bell /

重要な設定ファイルのバックアップを作成しておきます。

# ClamAV設定ファイル
# cp /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.backup

# freshclam設定ファイル
# cp /etc/freshclam.conf /etc/freshclam.conf.backup

# 自動スキャンスクリプト
# cp /etc/cron.daily/clamav_scan /etc/cron.daily/clamav_scan.backup
# freshclamログ確認
# tail -20 /var/log/clamav/freshclam.log

# 手動更新実行
# freshclam --verbose

# ネットワーク接続確認
# ping database.clamav.net
# サービス状態詳細確認
# systemctl status clamd@scan -l

# 設定ファイル構文チェック
# clamd -c /etc/clamd.d/scan.conf --config-check

# ソケットファイル確認
# ls -la /run/clamd.scan/
# メモリ使用量確認
# free -m

# ClamAV設定でメモリ制限調整
# vi /etc/clamd.d/scan.conf
# メモリ使用制限(MB)
DatabaseDirectory /var/lib/clamav
LocalSocket /run/clamd.scan/clamd.sock
TCPSocket 3310
TCPAddr 127.0.0.1

正常なファイルがウィルスとして検出される場合。

# vi /etc/clamd.d/scan.conf

# 特定ファイルを除外
ExcludePath ^/path/to/safe/file$

# 特定拡張子を除外
ExcludePath \.safe$

# 特定ディレクトリを除外
ExcludePath ^/safe/directory/

ClamAVはLinuxシステムにおいて重要なセキュリティ機能を提供します。
定期的なウィルススキャンとリアルタイム監視により、マルウェアや不正なファイルからシステムを保護できます。

適切な設定と定期メンテナンスにより、システムのセキュリティレベルを大幅に向上させることができます。
ただし、システムリソースへの影響を考慮し、スキャンスケジュールや対象範囲を適切に設定することが重要です。

セキュリティツールは複数組み合わせて使用することで効果が高まるため、ClamAVと併せてRKHunter、Tripwire、Fail2banなどの他のセキュリティ対策も実装することを推奨します。

「セキュリティ強化編」は、今回までで、次回は以下の手順を実施します。

これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。

タイトルとURLをコピーしました