Docker运行ClamAV
LiuSovia 化神

Docker运行ClamAV

使用 Docker 运行 ClamAV是最优雅且不破坏当前系统环境的解决办法。
由于 Docker 容器自带了符合要求的基础环境(包括新版的 glibc),因此它可以完美避开你宿主机系统太老的问题。

以下是保姆级的详细操作教程:

📝 前置准备

确保你的服务器上已经安装了 Docker,并且正常启动。可以通过以下命令检查:

1
2
docker -v
# 预期输出类似:Docker version 20.10.x, build xxxxxxx

第一步:创建病毒库挂载目录 (强烈建议)

ClamAV 需要依赖最新的病毒库来识别木马。如果我们每次运行容器都去下载几百MB的病毒库,会非常慢且浪费网络。
因此,我们在宿主机上建一个目录,用来永久保存病毒库

1
2
3
4
5
# 创建用于存放病毒库的目录
sudo mkdir -p /opt/clamav/database

# 给目录赋予读写权限,防止容器内写入失败
sudo chmod -R 777 /opt/clamav/database

第二步:首次下载/更新病毒库

运行以下命令,启动一个临时的 Docker 容器,它的唯一任务就是执行 freshclam(更新病毒库的命令),并将下载好的库文件保存到我们刚创建的宿主机目录中。

1
2
3
4
docker run -it --rm \
-v /opt/clamav/database:/var/lib/clamav \
clamav/clamav \
freshclam

*⏳ 注意:首次下载病毒库可能需要 5-10 分钟左右,具体取决于你的网络速度。看到类似 Downloading daily.cvd [100%]Database updated 的提示,就说明更新完成了。*


第三步:开始扫描文件或目录

病毒库准备好后,就可以开始扫描了。原理是:把宿主机上你需要扫描的目录,通过 -v 映射到容器内部,然后让容器对映射进去的目录进行扫描。

场景 A:扫描指定的某个目录

假设你想扫描宿主机上的 /var/www/html 目录:

1
2
3
4
5
docker run -it --rm \
-v /var/www/html:/scandir \
-v /opt/clamav/database:/var/lib/clamav \
clamav/clamav \
clamscan -r -i /scandir

命令参数解释:

  • -it --rm:运行完毕后自动删除该临时容器,不占用系统垃圾。
  • -v /var/www/html:/scandir:将宿主机的 /var/www/html 挂载到容器内的 /scandir(只读扫描,不影响原文件)。
  • -v /opt/clamav/database:/var/lib/clamav:挂载我们刚才下载好的病毒库。
  • clamscan:执行扫描的主命令。
  • -r:递归扫描(扫描该目录下的所有子文件夹)。
  • -i只显示被感染的文件(Infected)。如果不加这个参数,它会把你几万个正常文件全打印在屏幕上,眼睛根本看不过来。

场景 B:全盘扫描(扫描宿主机的整个根目录)

如果你想给服务器做一次全盘大体检,可以将宿主机的根目录 / 挂载进去。
注意:全盘扫描时必须排除一些系统虚拟目录(如 /proc, /sys, /dev),否则会无限循环或报错。

1
2
3
4
5
6
7
8
docker run -it --rm \
-v /:/hostdir:ro \
-v /opt/clamav/database:/var/lib/clamav \
clamav/clamav \
clamscan -r -i /hostdir \
--exclude-dir="^/hostdir/sys/" \
--exclude-dir="^/hostdir/proc/" \
--exclude-dir="^/hostdir/dev/"

(注意:这里加了 :ro 表示 Read-Only 只读,确保扫描工具绝对不会意外修改你宿主机的文件,十分安全。)


💡 进阶技巧:如何让扫描结果保存到文件?

如果你扫描的目录很大,可能需要好几个小时,你不想一直盯着屏幕,可以将结果输出到一个文本文件里。

假设你想扫描 /data 目录,并将结果存到宿主机的 /tmp/scan_result.txt

1
2
3
4
5
6
docker run -it --rm \
-v /data:/scandir \
-v /opt/clamav/database:/var/lib/clamav \
-v /tmp:/output \
clamav/clamav \
clamscan -r -i --max-filesize=4096M --max-scansize=4096M /scandir > /tmp/scan_result.txt

(原理是直接利用 Linux 的重定向符 > 将终端输出保存为文件,等它跑完你直接 cat /tmp/scan_result.txt 查看即可)
(说明:–max-filesize=4000M 和 –max-scansize=4000M 表示允许扫描最大 4GB 的文件和解压体积。你可以根据你的 .tar 包实际大小,把 4000M 改得更大,比如 10000M)

✅ 总结流程

以后你日常的杀毒流程就变成了这两步:

  1. 隔个两三天更新一次病毒库:
    1
    docker run --rm -v /opt/clamav/database:/var/lib/clamav clamav/clamav freshclam
  2. 执行杀毒:
    1
    docker run --rm -v /你要扫描的目录:/scandir -v /opt/clamav/database:/var/lib/clamav clamav/clamav clamscan -r -i /scandir
 评论
评论插件加载失败
正在加载评论插件