ClamAV 恶意文件扫描是 Linux 服务器抵御病毒、木马与勒索软件的重要防线,尤其适合对网站上传目录、邮件附件与共享存储进行定期查杀。本文介绍 ClamAV 在 Linux 上的完整部署配置,包括病毒库更新、clamscan 与 clamd 两种扫描方式、定时任务与告警,并提供可直接复制执行的命令。
适用场景
- 网站文件上传目录、FTP 共享目录的定期恶意文件查杀
- 邮件服务器对收发附件的病毒扫描(与 Postfix/Amavisd 集成)
- 服务器疑似感染挖矿木马、WebShell 后的全盘排查
- 满足等保 2.0 对主机防病毒能力的基本要求
前置条件
- Ubuntu 18.04+ / Debian 10+ / CentOS 7+ 服务器
- root 权限;clamd 常驻扫描建议内存不低于 1GB
- 可访问外网以下载病毒特征库(内网需配置代理或离线更新)
原理说明
ClamAV 是基于签名特征库的开源杀毒引擎,通过匹配病毒特征(CVD 数据库文件)识别已知恶意文件,同时支持启发式扫描与 PUA(可能有害程序)检测。项目包含三个核心组件:clamscan 单次命令行扫描工具,启动即加载病毒库,适合定时任务;clamd 常驻守护进程,病毒库常驻内存,扫描速度快,适合高频率扫描与第三方程序调用;freshclam 负责定期更新病毒特征库。病毒库默认每两小时检查一次更新,新入库样本的检出率依赖更新频率。
操作步骤
1. 安装 ClamAV
# Debian / Ubuntu
apt-get update && apt-get install -y clamav clamav-daemon clamav-freshclam
# CentOS 7 / RHEL
# yum install -y epel-release
# yum install -y clamav clamav-update
2. 配置病毒库镜像并更新
# 编辑 /etc/clamav/freshclam.conf,可指定国内镜像提升更新速度
echo "DatabaseMirror db.cn.clamav.net" | sudo tee -a /etc/clamav/freshclam.conf
sudo freshclam
首次更新约需几分钟,病毒库文件存储在 /var/lib/clamav/。若更新失败,检查网络并确认 80/443 端口可访问镜像地址。
3. 使用 clamscan 手动扫描
clamscan -r -i /var/www/html
# -r 递归子目录;-i 仅输出被感染的文件;--remove 可自动删除(慎用)
-r -i 组合适合日常巡检:只报告发现问题的文件,避免输出刷屏。
4. 配置 clamd 守护进程
# 编辑 /etc/clamav/clamd.conf 关键参数
LocalSocket /var/run/clamav/clamd.sock
MaxThreads 4
ScanOnAccess yes
OnAccessMountPath /var/www
OnAccessPrevention yes
LogFile /var/log/clamav/clamav.log
systemctl restart clamav-daemon && systemctl enable clamav-daemon
# 使用 clamdscan 调用常驻进程扫描(首次需预热病毒库)
clamdscan -i /var/www/html
OnAccessPrevention 开启后,命中病毒库的写入会被实时阻断,适合对上传目录开启;注意其对 I/O 有性能影响,生产环境建议先评估。
5. 定时扫描与邮件告警
cat > /usr/local/bin/clamav_scan.sh <<'EOF'
#!/bin/bash
LOG=/var/log/clamav/scan_$(date +%F).log
INFECTED=$(clamscan -r -i /var/www /home 2>/dev/null | grep -c "FOUND")
echo "infect_count=$INFECTED at $(date)" >> /var/log/clamav/scan_summary.log
if [ "$INFECTED" -gt 0 ]; then
mail -s "[ALERT] ClamAV found $INFECTED file(s)" admin@example.com < $LOG
fi
EOF
chmod +x /usr/local/bin/clamav_scan.sh
crontab -e
# 每天凌晨 2 点执行
0 2 * * * /usr/local/bin/clamav_scan.sh
6. 检测 EICAR 测试文件验证能力
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.com
clamscan /tmp/eicar.com
# 预期输出:Eicar-Signature FOUND;退出码 1
EICAR 是国际标准防病毒测试样本,非真实病毒,可放心用于验证扫描链路。
配置验证
freshclam输出 “Database updated” 且无 ERROR,病毒库版本号大于 0clamscan /tmp/eicar.com识别 Eicar-Signature,echo $?返回 1systemctl status clamav-daemon为 active,clamdscan --ping返回 PONG- 在 OnAccessMountPath 目录写入 EICAR 文件时被实时阻断(OnAccessPrevention=yes 时)
- crontab -l 可见定时任务,次日 /var/log/clamav/scan_summary.log 有执行记录
常见问题
FAQ 1:clamscan 误报正常业务文件怎么办?
先确认文件来源与签名类型,确属误报后在 /etc/clamav/clamd.conf 的 ExcludePath 中排除对应目录,或对特定文件哈希配置白名单。切勿为省事全盘排除,以免放过真实威胁。
FAQ 2:clamscan 每次扫描都很慢,如何提速?
改用 clamdscan 调用常驻 clamd(病毒库常驻内存,无需重复加载),或只扫描关键目录(/var/www、/tmp、/home)而非全盘;设置 MaxThreads 提高并行度,并将 ArchiveMaxFileSize 等解压限制调小以降低压缩包扫描开销。
FAQ 3:ClamAV 能替代商业杀软做实时防护吗?
不能完全替代。ClamAV 的优势是免费、开源、易集成,但特征库覆盖面与检出率弱于商业方案。建议组合使用:上传目录开启 ScanOnAccess 实时拦截,全盘与网站目录每日定时扫描,并配合 WAF 与主机入侵检测(如 Wazuh、Falco)形成多层防线。
总结
ClamAV 以极低的成本为 Linux 服务器补齐了恶意文件检测能力。落地要点:用 freshclam 保持病毒库更新、clamd 常驻保障扫描性能、定时任务实现常态化查杀,并用 EICAR 样本验证链路有效。将 ClamAV 与 WebShell 查杀、文件完整性监控(AIDE)配合,可覆盖主机层面大多数恶意文件威胁场景。