管理 ipv4 和 ipv6 iptables 的并行规则?

lar*_*sks 12 linux firewall iptables ipv6

我们最近开始试验 IPv6,我们必须解决的首要问题之一是为两个协议栈处理一套完全独立的防火墙 (Linux iptables/ip6ables) 规则。我们的防火墙逻辑主要基于许多特定用途的网络(例如,10.0.0.0/24 是员工工作站网络,10.1.0.0/24 是数据库网络,10.2.0.0/24 是 Web 服务器网络等),并且 IPv6 和 IPv4 的逻辑将基本相同,以不同的网络前缀为模。

人们在做什么来管理这种情况?理想情况下,我希望能够从相同的源文件生成 iptables 和 ip6table 规则集。我已经使用 bash 拼凑了一些东西,但它不一定漂亮,我怀疑那里一定存在更好的解决方案。

我对基于 Puppet 的解决方案特别感兴趣,它充分利用了 Puppet 自己的依赖机制来实现规则(或规则组)的相对排序。

小智 5

Firewall Builder 正是您所需要的。您可以创建一个规则集,将其标记为“组合 ipv4+ipv6”,并将您的 ipv4 和 ipv6 网络分配到同一段(例如“数据库网络”etC)在同一规则中。然后该程序生成两个单独的 iptables 配置,一个用于 ipv4,另一个用于 ipv6。用户指南的本章对此进行了说明,尽管它使用 Cisco 路由器访问列表作为示例。对于 iptables,它的工作原理完全相同。

http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html


lar*_*sks 2

在这里回答我自己的问题,但我认为这些信息可能会引起普遍兴趣:

在研究这个问题时,我偶然发现了Ubuntu 人员的ufw (简单防火墙)。在 ufw 配置中启用 IPV6 后,ufw 将并行管理 iptables 和 ip6tables 规则。这意味着您可以执行以下操作:

# ufw allow ssh/tcp
Run Code Online (Sandbox Code Playgroud)

最终结果是:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)
Run Code Online (Sandbox Code Playgroud)

这会导致 iptables/ip6tables 规则如下所示:

# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

Ufw 还支持应用程序配置文件,允许您创建命名的端口组。你可以这样做:

# ufw allow 'WWW Full'
Run Code Online (Sandbox Code Playgroud)

最终打开端口 80 和 443(对于 IPv4 和 IPv6)。

我才刚刚开始看它,但它似乎组合得相当好。