docker 容器中的防病毒 - fanotify 在主机和容器之间工作吗?

问题描述 投票:0回答:4

我需要使用开源软件对 Docker 容器内的文件实施防病毒按访问扫描解决方案。 Clamav On-Access 工作正常,但有一些要求和限制:

  • 需要 CAP_SYS_ADMIN 功能才能在容器内工作
  • 需要按容器运行,而不是按主机运行
  • 每个正在运行的容器(即使是很小的容器)中的签名都需要 850Mb 常驻内存

这个限制——“从主机观看时,fanotify 不适用于容器事件”,真的存在还是我只是错误配置了 ClamAV?我不太了解 fanotify 如何与命名空间一起工作,但对我来说它看起来像是内核限制。

更新:此限制有任何解决方法吗?添加

/var/lib/docker/overlay2/container_id/merged
是一种选择,因为动态容器性质
clamd.conf
需要在每个容器事件上更新。但即使添加了路径,ClamAV 也无法检测到容器中的恶意文件。

每个容器运行 ClamAV 会产生巨大的内存开销,特别是对于小型容器。

友情链接收藏:

docker antivirus cgroups linux-namespaces clam
4个回答
4
投票

我有一个带有补丁的 ClamAV 的解决方案。

  1. 必须使用ClamAV < 0.102.0 because of the splitting of scanning and detection: detected files can't be scanned because the path is observed from the container point of view
  2. OnAccessMount 不起作用,因为您必须在 ClamAV 配置中列出每个挂载,然后重新启动,并且 docker 会动态创建挂载
  3. 必须使用overlayfs而不是LVM,以便ClamAV可以访问挂载
  4. OnAccessIncludePath 不起作用,因为文件和文件夹枚举方法不会遍历文件系统(不会扫描指定路径之外的挂载)

我能够使用我发布到 clamav-devel 邮件列表的补丁来使 OnAccessIncludePath 工作:https://lists.gt.net/clamav/devel/77347#77347

我最终得到了一个使用 fanotify 进行静态挂载的进程,以及一个使用 inotify 来监视 /var/lib/docker 临时挂载的进程。每个容器有 2 个实例仍然比 1 个实例要好得多。我做了相当多的负载测试,并且从我邮寄列表的时候起,补丁就已经投入生产了。

Sophos 不适合我,但我很快就放弃了。


1
投票

是的,fanotify 仅监视其运行所在的挂载命名空间中的事件。


0
投票

现在

fanotify
可以监控整个文件系统的事件,无论挂载命名空间如何。您需要使用标志
FAN_MARK_FILESYSTEM
FAN_MARK_ADD
(
FAN_MARK_ADD | FAN_MARK_FILESYSTEM
)。从
fanotify_mark
手册页
这里是片段:

FAN_MARK_FILESYSTEM (since Linux 4.20)
       Mark the filesystem specified by pathname.  The filesystem
       containing pathname will be marked.  All the contained
       files and directories of the filesystem from any mount
       point will be monitored.

-1
投票

有程序示例吗?虽然我在这里设置了,但是还是没有生效

© www.soinside.com 2019 - 2024. All rights reserved.