1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【2026年03月版】Ubuntu に ClamAV を導入してオンアクセススキャン + 定期チェックを設定する

1
Last updated at Posted at 2026-03-06

Ubuntu に ClamAV を導入してオンアクセススキャン + 定期チェックを設定する

はじめに

Ubuntu サーバーに ClamAV を導入し、リアルタイムのオンアクセススキャン、systemd timer による定期フルスキャン、問題検知時のログ通知までを設定する手順です。
リアルタイム監視 + 定期スキャン を運用します。

image.png

クイックスタート:実行コマンド一覧

環境構築に必要なコマンドの全体像です。設定ファイルやスクリプトの中身については、後述の詳細手順を参照してください。

# 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をコメントアウトにして、以下を末尾に追加します。

/etc/clamav/clamd.conf
#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
/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
/etc/systemd/system/clamav-daily-scan.service
[Unit]
Description=ClamAV Daily Scan

[Service]
Type=oneshot
ExecStart=/usr/local/bin/clamav-daily-scan.sh
/etc/systemd/system/clamav-daily-scan.timer
[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

詳細手順

ここからは、各設定項目の詳細やスクリプトの中身について解説します。

目次

  1. ClamAV をインストール
  2. ウイルス定義の更新設定
  3. clamd の設定
  4. 設定項目の説明
  5. clamd を再起動
  6. オンアクセススキャンを有効化
  7. 動作確認
  8. 定期フルスキャンの設定
  9. スキャンスクリプト作成
  10. systemd service と timer の設定
  11. ログ確認
  12. 運用時の注意点
  13. まとめ

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

設定例として、以下の項目を追記・変更します。

/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
/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
/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
/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. 参考

さいごに

簡単でしたね

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?