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


10

我们最近开始试验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自己的依赖机制来实现规则(或规则组)的相对排序。

Answers:


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


4

最近我还面临着为IPv4和IPv6创建iptables-rules的问题。经过一些搜索之后,我最终使用了Phil WhinerayIPv6 FireHOL分支

FireHOL是一个iptables防火墙生成器,它在具有任意数量的网络接口,任意数量的路由,任意数量的服务,任意数量的服务变化之间的复杂性(包括正负)的Linux主机和路由器上生成有状态iptables包过滤防火墙表达式)。(来源:FireHOL网站)

不幸的是,正式版本缺少对IPv6的支持。但是Phil Whineray在一个非官方的分支机构中增加了支持。

有关配置外观的一些示例:

# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept

# allow incoming ssh only on ipv4
ipv4 server ssh accept

# allow incoming IMAP requests only for ipv6
ipv6 server imap accept

您可以在以下位置检出此firehol分支:

git clone git://repo.or.cz/fireholvi.git

其他文档可在官方的FireHOL文档中或有关IPv6的其他自述文件中找到

就个人而言,在具有100%可靠防火墙的生产机器上使用它时,我可能会很谨慎。但是仍然值得一看。


3

为了继续传播福音,我建议您利用Puppet进行举报。目前还没有一个很好的脚本来处理iptables 4和iptables 6规则,但是一旦适应了该语言,编写一个就不会有太大的挑战。

Mediawiki的公共git仓库是配置模式的绝妙之地,并且包括一个iptables类,它将为您提供良好的基础。您可以对其进行编辑,以默认情况下一次将规则应用于两个堆栈,并在基于IPv4或IPv6规则进行设置时具有针对不同规则的标志。

最后的好处是可以将服务的防火墙规则写入服务定义中,并在部署或删除服务时自动将其部署和删除。


我会看一看。到目前为止,对于基于iptables的典型基于Puppet的解决方案,我通常没有任何印象。特别是,它们似乎都通过片段文件的文件名或Puppet规则中提供的显式索引来显式实现排序,而不是使用Puppet的依赖关系解析机制,这正是我真正想要的。如果此处链接的解决方案避免了这些问题,我将全力以赴。
larsk's

@larsks我同意,同样也因为没有发布好的通用解决方案而感到沮丧...但是也许是时候我自己完成了。Puppet将允许before => Resource['declared_name']在任何定义上使用,因此您可以使用不尝试对片段进行排序的实现来对它们进行排序。很好地利用Augueas进行结构设计也可以防止出现此问题-根据需要使顶部的树注释和其下面的排序成为可能。
杰夫·弗兰

我自己解决这个问题的尝试还没有完成。我现在要做的是(a)将片段安装到子目录中,然后(b)使用rcorder将它们放入依赖关系顺序。它可以工作,但是由于它仅基于管理片段文件,因此无法将其自身应用于混合ipv4 / ipv6环境。我还没有仔细研究如何使用Augeas来解决问题。如果您有任何原型代码,我会很好奇。
larsk's

2

在这里回答我自己的问题,但我认为此信息可能是普遍感兴趣的:

在调查这个问题时,我偶然发现了来自Ubuntu人士的ufw(不复杂的防火墙)。在ufw配置中启用IPV6后,ufw将并行管理iptables和ip6tables规则。这意味着您可以执行以下操作:

# ufw allow ssh/tcp

最后是:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)

这将导致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

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

# ufw allow 'WWW Full'

最后打开两个端口80和443(用于IPv4和IPv6)。

我才刚刚开始研究它,但看起来组合起来相当不错。


0

由于它仍然不在列表中:Shorewall是被广泛采用并定期更新的功能丰富的数据包过滤器配置工具。它已经有一段时间支持IPv6


1
我的理解是,“ shorewall”仅是ipv4,“ shorewall6”仅是ipv6,并且为了覆盖这两个协议,必须同时使用这两个协议。它们可以共享通用配置吗?
larsk's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.