我有一台运行 libvirt/kvm 的 Ubuntu 9.04 服务器,失败2ban(针对 SSH 攻击)。
libvirt 和 fail2ban 都以不同的方式与 iptables 集成。Libvirt 使用(我认为)一些 XML 配置,并在启动期间(?)配置转发到 VM 子网。Fail2ban 安装自定义链(可能在初始化时)并定期修改它以禁止/取消禁止可能的攻击者。
我还需要安装自己的规则,将各种端口转发到在虚拟机和其他机器上运行的服务器,并设置基本的安全性(例如,除了我想要打开的几个端口之外,删除所有 INPUT 流量),当然,我希望能够安全地添加/删除规则而无需重新启动。
在我看来,iptables 是一个功能强大的工具,但严重缺乏某种标准化的方式来处理所有这些事情。每个项目和每个系统管理员似乎都以不同的方式处理!(而且我认为这里有很多“货物崇拜”管理员,人们克隆粗糙的方法,例如“像这样使用 iptables-save”。)
除了弄清楚这两个工具(以及可能的其他工具)如何操纵 netfilter 表的具体细节,以及开发我自己的脚本或只是手动执行 iptables 命令之外,有没有办法安全地使用 iptables,而不会破坏这些其他工具的功能?是否有任何新兴的标准或项目可以定义以使该领域变得合理?甚至我错过的可能至少涵盖这两个软件包的有用网页?
答案1
这确实很老了,但对于搜索并找到它的人来说,fail2ban 和许多其他实用程序一样,都是非常可配置的。您可以更改您的 fail2ban 操作文件(如 iptables-multiport.conf)以调用 iptables 并以您想要的方式创建链。
例如。
actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
这会在您的 INPUT 链中创建一个规则,这有点丑陋且难以管理,但您可以很容易地将其放入您控制的自己的链中。您可以创建一个 INPUT 过滤器,然后将其链接到其他过滤器,以便 fail2ban 将其所有内容排除在您的 INPUT 链之外,如下所示。
actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I INPUT-FAIL2BAN -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
libvirt 或 Xen 也是如此,它们调用脚本来完成工作。例如,Xen 使用 /etc/xen/scripts,您会在其中找到网络桥接器和调用 iptables 的其他文件。根据需要进行设计。最坏的情况是更改代码。我使用 fail2ban 修改中央防火墙,以便保护所有服务器,这意味着本地计算机上的 iptables 无论如何都不会显示规则。