本家様 https://www.clamav.net/

オープンソースのアンチウイルスソフト

ファイルサーバに保存してあるファイルの定期的なスキャンとかあるいは新規に保存されるファイルのスキャンを目的にしたいと思います
一応メールの中身(本文、添付ファイル)もスキャンしてくれるそうですが、今回はファイルサーバでの運用という事で。

インストール

dnf install clamav clamav-update clamav-scanner-systemd clamav-server-systemd

定義ファイルの定期更新

定義ファイルが最新でないと意味がない。

まずは初回に定義ファイルをダウンロードします

freshclam

その後に更新ファイルの取得を定期的に行うようにします

systemctl enable --now clamav-freshclam

この「clamav-freshclam」は常駐デーモン型でして、次にいつ更新されるかは「systemctl status clamav-freshclam」の内容と「/etc/freshclam.conf」に寄ります

 :
# Number of database checks per day.
# Default: 12 (every two hours)
#Checks 24
 :

とあれば規定値が 12 なので、2時間ごとに。もし「Checks 2」なら12時間ごとになります.
「systemctl status clamav-freshclam」の実行時間から2時間後、12時間後になる.

clamdを起動

このデーモン自体でファイルをスキャンする訳ではない。このあとの「camdscan」によって実際のスキャンが行われます.
clamdは定義ファイルを読み込んで、ソケットやTCPポートを開けて、「camdscan」から提示されたファイルをスキャンするそうな.

またマルチスレッドで稼働します。8core/8threadsなマシンで、計算もそのマシンでこなすなら 4 - 6 にするそうな。
設定場所は「/etc/clamd.d/scan.conf」。既定値は 10 のようで自身のcpuに合わせて調整した方がいいみたい.

あとsocketファイルの場所を定義します(rockylinuxでは未定義で、これが原因でエラーになる)

vi /etc/clamd.d/scan.conf
 :
MaxThreads 4
 :
LocalSocket /run/clamd.scan/clamd.sock
 :

そして起動させます

systemctl enable --now clamd@scan

この「/etc/clamd.d/scan.conf」でどこをスキャンするとかの定義はない。代わりにここはスキャンしない。とかこの拡張子はスキャンしないを定義できます

(スキャン対象にしないPATH)
ExcludePath ^/boot/
ExcludePath ^/bin/
ExcludePath ^/etc/
ExcludePath ^/srv/
ExcludePath ^/var/
ExcludePath ^/usr/
 
(拡張子でスキャン対象にしないファイル)
ExcludePath (?i)\.tiff$
ExcludePath (?i)\.tif$
ExcludePath (?i)\.mrc$

定期実行スキャンの定義

cronを使って定期的に /home をスキャンさせるようにします

スキャンによって発見されたファイルを退避させる場所を作り quarantineは検疫という意味

mkdir -p /var/quarantine
chown root:root /var/quarantine
chmod 700 /var/quarantine

スクリプト「/usr/local/bin/clamav-scan.sh」を用意します. 中身はこんな感じで

#!/bin/bash
 
TARGET="/home"
QUARANTINE="/var/quarantine"
LOG="/var/log/clamav/scheduled-scan.log"
LOCK="/var/lock/clamav-scan.lock"
 
# ログディレクトリ
sudo mkdir -p "$(dirname "$LOG")"
sudo chown clamav:clamav "$(dirname "$LOG")" 2>/dev/null || true
 
# 重複実行防止(flock)
exec 200>"$LOCK"
flock -n 200 || { echo "$(date) : previous scan still running, exiting" >> "$LOG"; exit 0; }
 
echo "$(date) : scan start" >> "$LOG"
# nice/ionice で低優先度実行、clamd に接続する clamdscan を利用
nice -n 10 ionice -c2 -n7 clamdscan --fdpass --multiscan --recursive --move="$QUARANTINE" --log="$LOG" "$TARGET"
RC=$?
echo "$(date) : scan end (rc=$RC)" >> "$LOG"
exit $RC

作ったスクリプトをcronで回します

chmod +x /usr/local/bin/clamav-scan.sh
vi /etc/cron.d/clamav-scan
 :
MAILTO=""
0 2 * * * root /usr/local/bin/clamav-scan.sh >> /var/log/clamav/cron-scan.log 2>&1
 :

こでれ毎日午前2時にスキャンが始まります

っで最後にlogrotate.
「/etc/logrotate.d/clamav-scan」を下記内容で作る

/var/log/clamav/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    create 640 clamav adm
    sharedscripts
    postrotate
        systemctl kill -s HUP clamd@scan.service 2>/dev/null || true
    endscript
}

毎日logrotateの対象となって、14日で削除

最新の60件
2025-11-09 2025-11-05 2025-11-03 2025-11-02 2025-10-31 2025-10-30 2025-10-29 2025-10-28 2025-10-26 2025-10-25 2025-10-24 2025-10-22 2025-10-21 2025-10-17 2025-10-13 2025-10-12 2025-10-11 2025-10-06 2025-10-05 2025-10-01 2025-09-30 2025-09-29 2025-09-28 2025-09-25 2025-09-24 2025-09-23 2025-09-21 2025-09-20 2025-09-17 2025-09-14 2025-09-13 2025-09-12 2025-09-11 2025-09-01 2025-08-28 2025-08-22 2025-08-18 2025-08-17 2025-08-16

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-09-24 (水) 12:18:31