Ubuntu に ClamAV を導入してオンアクセススキャン + 定期チェックを設定する
はじめに
Ubuntu サーバーに ClamAV を導入し、リアルタイムのオンアクセススキャン、systemd timer による定期フルスキャン、問題検知時のログ通知までを設定する手順です。
リアルタイム監視 + 定期スキャン を運用します。
過去の記事はこちら 【2024年08月版】Ubuntu でウイルス対策【clamav】
クイックスタート:実行コマンド一覧
環境構築に必要なコマンドの全体像です。設定ファイルやスクリプトの中身については、後述の詳細手順を参照してください。
# 1. インストール
sudo apt update
sudo apt install -y clamav clamav-daemon
# 2. ウイルス定義更新をtimerに変更
sudo systemctl stop clamav-freshclam
sudo systemctl enable --now clamav-freshclam-once.timer
# 3. 設定ファイルの編集(詳細は詳細手順の3を参照)
sudo vim /etc/clamav/clamd.conf
Userをコメントアウトにして、以下を末尾に追加します。
#User clamav
User root
OnAccessExcludeUID 0
OnAccessExcludeUname root
OnAccessIncludePath /home
OnAccessPrevention yes
OnAccessExtraScanning yes
# 4. サービスの再起動とオンアクセススキャンの有効化
sudo systemctl restart clamav-daemon.service
sudo systemctl enable --now clamav-clamonacc.service
# 5. 動作確認
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/eicar.txt
# アクセスできないことを確認します。
cat ~/eicar.txt
# 6. 定期スキャンスクリプトの作成と権限付与
sudo vim /usr/local/bin/clamav-daily-scan.sh
sudo chmod +x /usr/local/bin/clamav-daily-scan.sh
#!/bin/bash
SCAN_TARGET="/home"
LOG_TAG="clamav-daily-scan"
TMP=$(mktemp)
clamscan -r --infected --no-summary "$SCAN_TARGET" > "$TMP" 2>&1 || true
if grep -q "FOUND$" "$TMP"; then
logger -p auth.warning -t "$LOG_TAG" "Malware detected"
while read -r line; do
logger -p auth.warning -t "$LOG_TAG" "$line"
done < "$TMP"
rm -f "$TMP"
exit 1
else
logger -p auth.info -t "$LOG_TAG" "Scan completed. No malware found."
fi
rm -f "$TMP"
# 7. systemd serviceとtimerの作成
sudo vim /etc/systemd/system/clamav-daily-scan.service
sudo vim /etc/systemd/system/clamav-daily-scan.timer
[Unit]
Description=ClamAV Daily Scan
[Service]
Type=oneshot
ExecStart=/usr/local/bin/clamav-daily-scan.sh
[Unit]
Description=ClamAV Daily Scan Timer
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
# 8. timerの有効化と確認
sudo systemctl daemon-reload
sudo systemctl enable --now clamav-daily-scan.timer
systemctl list-timers | grep clamav
詳細手順
ここからは、各設定項目の詳細やスクリプトの中身について解説します。
目次
- ClamAV をインストール
- ウイルス定義の更新設定
- clamd の設定
- 設定項目の説明
- clamd を再起動
- オンアクセススキャンを有効化
- 動作確認
- 定期フルスキャンの設定
- スキャンスクリプト作成
- systemd service と timer の設定
- ログ確認
- 運用時の注意点
- まとめ
1. ClamAV をインストール
sudo apt update
sudo apt install -y clamav clamav-daemon
インストールされる主なコンポーネント
| パッケージ | 役割 |
|---|---|
| clamav | CLIスキャナ |
| clamav-daemon | 常駐スキャンデーモン |
2. ウイルス定義更新の設定
Ubuntuでは freshclam が定義更新を行います。
まずサービスを止めて timer 方式に変更します。
sudo systemctl stop clamav-freshclam
sudo systemctl enable --now clamav-freshclam-once.timer
3. clamd の設定
設定ファイルを編集します。
sudo vim /etc/clamav/clamd.conf
設定例として、以下の項目を追記・変更します。
#User clamav
User root
OnAccessExcludeUID 0
OnAccessExcludeUname root
OnAccessIncludePath /home
OnAccessPrevention yes
OnAccessExtraScanning yes
4. 設定項目の説明
User root
clamd を root 権限で実行します。
オンアクセススキャンではファイルアクセス権限の関係で root 実行が必要になることがあります。
OnAccessExcludeUID 0
UID 0(root)の操作を監視対象から除外します。
OnAccessExcludeUname root
rootユーザーを監視対象から除外します。
これは clamd 自身の自己スキャンによる無限ループを防ぐために使われます。
OnAccessIncludePath /home
オンアクセス監視対象ディレクトリを指定します。
通常は /home、/srv、/var/www など、ユーザーがファイルを配置する領域に限定するのが安全です。
OnAccessPrevention yes
ウイルス検出時にそのファイルへのアクセスをブロックします。
OnAccessExtraScanning yes
インラインスキャンを活用し、より詳細な追加スキャンを有効化します。
5. clamd を再起動
sudo systemctl restart clamav-daemon.service
状態確認
systemctl status clamav-daemon.service
6. オンアクセススキャンを有効化
sudo systemctl enable --now clamav-clamonacc.service
確認
systemctl status clamav-clamonacc.service
7. 動作確認(EICARテスト)
アンチウイルスのテスト用ファイルを作成して動作を確認します。
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' >
~/eicar.txt
ファイルの中身を見ようとすると、アクセスがブロックされるか、検知ログが出力されます。
cat ~/eicar.txt
アクセス拒否(Permission denied)などのエラーが出れば正常にブロックされています。
ダウンロードファイルで確認する場合は、以下です。
curl -kO https://secure.eicar.org/eicar_com.zip
ダウンロードが完了すると、検知ログが出力されます。
2重に圧縮されたファイルは以下で行います。
curl -kO https://secure.eicar.org/eicarcom2.zip
ダウンロードが完了すると、検知ログが出力されます。
8. 定期フルスキャンの設定
オンアクセススキャンだけでは、導入前から存在していた既存のマルウェアを確認できません。
そこで systemd timer で定期的にフルスキャンを行います。
9. スキャンスクリプト作成
sudo vim /usr/local/bin/clamav-daily-scan.sh
#!/bin/bash
SCAN_TARGET="/home"
LOG_TAG="clamav-daily-scan"
TMP=$(mktemp)
clamscan -r --infected --no-summary "$SCAN_TARGET" > "$TMP" 2>&1 || true
if grep -q "FOUND$" "$TMP"; then
logger -p auth.warning -t "$LOG_TAG" "Malware detected"
while read -r line; do
logger -p auth.warning -t "$LOG_TAG" "$line"
done < "$TMP"
rm -f "$TMP"
exit 1
else
logger -p auth.info -t "$LOG_TAG" "Scan completed. No malware found."
fi
rm -f "$TMP"
実行権限を付与します。
sudo chmod +x /usr/local/bin/clamav-daily-scan.sh
10. systemd service と timer の設定
Serviceファイルを作成します。
sudo vim /etc/systemd/system/clamav-daily-scan.service
[Unit]
Description=ClamAV Daily Scan
[Service]
Type=oneshot
ExecStart=/usr/local/bin/clamav-daily-scan.sh
Timerファイルを作成します。毎日深夜 03:30 に実行する設定です。
sudo vim /etc/systemd/system/clamav-daily-scan.timer
[Unit]
Description=ClamAV Daily Scan Timer
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
timer を有効化します。
sudo systemctl daemon-reload
sudo systemctl enable --now clamav-daily-scan.timer
スケジュールの確認
systemctl list-timers | grep clamav
11. ログ確認
感染検知ログ(オンアクセススキャン)
# オンアクセススキャンの検知ログを確認する
journalctl -u clamav-clamonacc
# オンアクセススキャンの検知ログのリアルタイム確認
journalctl -f -u clamav-clamonacc
感染検知ログ(定期スキャン)
# 定期フルスキャンの検知ログを確認する
journalctl -t clamav-daily-scan
サービスログ
# ClamAVデーモン自体のログを確認する
journalctl -u clamav-daemon
12. 運用時の注意点
ルートディレクトリ ( / ) を監視しない
OnAccessIncludePath / という設定は非常に危険です。
システムファイルのアクセスまでブロックされ、OSが正常に動作しなくなる可能性があります。
inotify上限の引き上げ
監視対象のファイルやディレクトリ数が多いとエラーになります。その場合は上限を引き上げます。
echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
13. まとめ
Ubuntu サーバーで ClamAV を運用する場合のコンポーネントの役割です。
| 機能 | 役割 |
|---|---|
| clamd | 常駐スキャン |
| clamonacc | オンアクセススキャン |
| freshclam | ウイルス定義更新 |
| systemd timer | 定期スキャン |
リアルタイム監視と定期スキャンを併用することで、安定したマルウェア検知環境を構築できます。
14. 参考
さいごに
簡単でしたね
