I need to implement anti-virus on-access scanning solution for files inside docker containers using open-source software. Clamav On-Access works fine but have some requirements and limitations:
Does this limitation - "fanotify not working for container events when watching from host", really exists or I just misconfigured ClamAV? I have no deep knowledge how fanotify works with namespaces, but it looks like kernel limitation to me.
UPDATE: Are there any workarounds for this limitation? Adding /var/lib/docker/overlay2/container_id/merged
is one option, because of dynamic container nature clamd.conf
needs to be updated on every container event. But even with added path ClamAV doesn't detect malicious files in the containers.
Running ClamAV per-container creates huge memory overhead, especially for small containers.
Links collection:
I have a solution with a patched ClamAV.
I was able to get OnAccessIncludePath working with a patch I posted to clamav-devel mailing list: https://lists.gt.net/clamav/devel/77347#77347.
I ended up with one process using fanotify for static mounts and one using inotify to monitor /var/lib/docker ephemeral mounts. Having 2 instances is still much better than 1 per container. I did a fair bit of load testing and have had the patch in production since about the time I mailed the list.
Sophos didn't work for me but I gave up pretty quickly.