我们的路由器是 CentOS,但我们只使用 iptables 来修改 Linux 内核防火墙规则。有一个受版本控制的脚本可以重置所有链/规则,但这样做会断开所有现有连接,如果在办公时间运行,通常会造成严重破坏。这意味着更改防火墙规则的常用方法是使用iptables
“即时”方法。这可能导致对防火墙的修改无法回到版本控制。
我想要解决的是如何检查自 Subversion 中某个特定版本的脚本以来防火墙是否有过任何修改。
的输出iptables --list
与脚本中的某行完全不同,脚本中的某行通常类似于iptables -A chain -j ACCEPT -s 192.168.1.100
。
有没有更简单/更好的方法来保持 Linux 内核防火墙规则的版本控制?
我愿意接受替代工具或操作系统的建议,只要它们是开源的并且完善。
答案1
我一问这个问题就意识到有iptables-save
和iptables-restore
。不过我现在还不确定这如何运作。我会把它发布为一个答案但我认为真正的解决方案将会更复杂一些。
可以使用iptables-save
which 将当前加载的链打印到 stdout。您还可以使用-t
开关来指定用户自定义链。因此,您可以将每个链逐个输出到文件并对其进行版本控制。但是,我看不出有一个简单的方法来逐个重新加载链,因为等效方法iptables-restore
没有等效开关(-t
而是意味着测试)。
我注意到此方法的另一个限制是无法单独保存内置链(即 INPUT、OUTPUT 和 FORWARD)。 将它们取出的唯一方法是不使用开关-t
并转储所有内容。
需要一些脚本来将这一切包装成可以轻松保存和重新加载的内容。