ClamAV 是開源反病毒引擎標杆,支援 Linux/Windows/macOS,適配伺服器端郵件網關、檔案伺服器、容器映像掃描等場景。本文涵蓋主流發行版安裝、病毒庫管理、clamscan/clamdscan 掃描模式、排除規則、定時任務與效能調優。
apt-get update && apt-get install -y clamav clamav-freshclam clamav-daemon
# clamav-freshclam: 病毒庫更新服務
# clamav-daemon: clamd 掃描守護進程 (高效能模式)
dnf install -y epel-release
dnf install -y clamav clamav-update clamd clamav-data
# clamav-update: freshclam 更新工具
# clamd: 守護進程
# clamav-data: 離線病毒庫 (首次安裝加速)
pacman -S clamav
# 適用於無套件管理器或需特定版本
wget https://www.clamav.net/downloads/production/clamav-1.4.0.tar.gz
tar xzf clamav-1.4.0.tar.gz && cd clamav-1.4.0
./configure --prefix=/opt/clamav --enable-clamd
make && make install
freshclam
# 或 systemd 服務
systemctl enable --now clamav-freshclam
# 日誌:/var/log/clamav/freshclam.log
首次下載約 200-300MB,耗時數分鐘;後續增量更新僅秒級。
# /etc/clamav/freshclam.conf
DatabaseMirror db.local.clamav.net
DatabaseMirror db.us.clamav.net
Checks 24 # 每日 24 次 (每小時)
NotifyClamd /etc/clamav/clamd.conf # 通知 clamd 重載
# 代理支援
HTTPProxyServer proxy.example.com
HTTPProxyPort 3128
freshclam --verbose
clamdscan --version
# ClamAV 1.4.0 / 2024-01-15 / 26543210 signatures
# 基礎掃描
clamscan -r /home/user
# 關鍵參數
-r, --recursive # 遞歸目錄 (必加,否則只掃頂層)
-i, --infected # 僅顯示感染檔案
--bell # 發現病毒鳴鈴
--remove # 直接刪除感染檔 (慎用!)
--move=/quarantine # 移動至隔離區 (推薦)
--exclude-dir=/proc # 排除虛擬檔案系統
--exclude-dir=/sys
--exclude-dir=/dev
--max-filesize=100M # 跳過大檔
--max-scansize=100M
--log=/var/log/clamav/scan.log
# 範例:生產環境標準掃描
clamscan -r -i --move=/var/quarantine \
--exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev \
--max-filesize=200M --log=/var/log/clamav/scan_$(date +%F).log \
/home /var/www /opt/app
# 啟動 clamd
systemctl enable --now clamd
# 或手動
clamd -c /etc/clamav/clamd.conf
# 掃描 (通過 Unix Socket 與 clamd 通訊)
clamdscan -r /home/user
# 參數大致相同,但無 --remove/--move (需配置 clamd.conf Action)
# 效能對比:clamdscan 避免重複載入病毒庫,大量檔案快 10-50x
# /etc/clamav/clamd.conf
LocalSocket /run/clamav/clamd.sock
FixStaleSocket yes
User clamav
ScanPE yes
ScanELF yes
ScanOLE2 yes
ScanPDF yes
ScanHTML yes
ScanArchive yes
ArchiveBlockEncrypted no
MaxDirectoryRecursion 20
MaxFiles 10000
MaxFileSize 100M
MaxScanSize 100M
MaxRecursion 16
# 發現病毒動作
VirusEvent /usr/local/bin/clamav_alert.sh %v
# 或
# Move /var/quarantine
# /etc/cron.d/clamav-scan
0 2 * * 0 root /usr/bin/clamdscan -r --exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev / 2>&1 | logger -t clamav-scan
# Amavis 呼叫 clamdscan 掃描郵件附件
# /etc/amavis/conf.d/15-content_filter_mode
@bypass_virus_checks_maps = (0); # 啟用病毒掃描
# Dockerfile 掃描階段
FROM clamav/clamav:latest AS scanner
COPY --from=build /app /app
RUN clamscan -r --move=/quarantine /app
#!/bin/bash
# /usr/local/bin/clamav_alert.sh
VIRUS_NAME=$1
INFECTED_FILE=$2
HOST=$(hostname)
DATE=$(date)
mail -s "[ALERT] ClamAV: $VIRUS_NAME on $HOST" admin@example.com <
| 場景 | 優化策略 |
|---|---|
| 大量小檔 | 啟用 clamd、調大 MaxFiles、使用 SSD |
| 大檔案 (ISO/備份) | 設定 MaxFileSize/MaxScanSize、排除目錄 |
| 高併發掃描 | clamd 多執行緒 (Threads 4-8)、連接池 |
| 誤報處理 | 提交樣本官網、配置 Whitelist (clamd.conf: ExcludePath) |
| 資源限制 | systemd: MemoryLimit=2G, CPUQuota=200% |
ERROR: Can't connect to clamd → 檢查 clamd 服務狀態、Socket 路徑、SELinuxWARNING: File size exceeds MaxFileSize → 調大限制或分割掃描Database is too old → 執行 freshclam、檢查定時任務clamdscan 而非 clamscan、排除虛擬檔案系統部署 ClamAV 建立「安裝→更新→守護進程→策略掃描→自動告警」閉環,即可為 Linux 基礎設施提供企業級反病毒防護,滿足合規與安全基線要求。
解決 iptables 「Protocol wrong type for socket」錯誤:升級 iptables 版本
Linux Nginx 日志分析實戰:從配置到命令行挖掘異常流量
netstat 網路連線監控瑞士刀:參數全表、TCP/UDP/監聽/統計/路由表/多重廣播、連線狀態解讀、故障排查實戰
Ubuntu 編輯應用程式選單:alacarte 工具與 .desktop 檔案手動管理
Linux 區別 gmtime 與 localtime 函數用法(含 C 程式範例與執行結果)
Linux 硬碟壞軌修復實戰:e2fsck 檢查、fdisk 重分區、mkfs.ext4 格式化、資料搶救流程