问题是 modprobe 和 iptables 在 LXC 容器内不起作用。
LXC 是 Linux 容器的用户空间控制包,是一种轻量级虚拟系统机制,有时被描述为“增强版 chroot”。
容器内部的iptables错误是:
# iptables -I INPUT -s 122.129.126.194 -j DROP
> iptables v1.4.8: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
我猜测它无法工作是因为 LXC 容器共享一个内核,即主服务器内核。
在这种情况下我该如何执行 fail2ban。modprobe 和 iptables 在主服务器中工作,所以我可以在那里安装它并以某种方式链接到日志文件,我猜?
有什么建议么?
答案1
也许 tcp 包装器对你有用。fail2ban 可以管理 /etc/hosts.allow 和 /etc/hosts.deny 文件
答案2
我相信您必须在容器主机上运行 fail2ban(而不是在容器本身中)。现在,如果您在其中一个容器中运行服务,您需要配置 fail2ban 以在容器的文件系统中查找日志文件,因为主机可以看到容器的文件系统。例如,我有一个名为 mediabox 的容器。这是一个 LXD 管理的容器,我已使用 snap 包安装 LXD。因此,我将使用类似 /var/snap/lxd/common/lxd/containers/mediabox/rootfs/var/log/... 的路径将 fail2ban 指向日志文件。如果您没有使用 snap 包,那么您的路径可能会有所不同。您知道它是如何工作的吗?Fail2ban 监视日志文件。因此,您可以在主机上运行它,监视容器的日志文件,并使用主机上的 iptables 执行“禁止”(因为无论如何您都无法在容器中执行此操作)。我希望这能有所帮助。