我们最近开始尝试使用IPv6,我们不得不面对的第一个问题是为这两个协议栈处理一套完全独立的防火墙(Linux iptables / ip6ables)规则。 我们的防火墙逻辑主要基于一些特定目的networking(例如,10.0.0.0/24是工作站工作站networking,10.1.0.0/24是数据库networking,10.2.0.0/24是Web服务器networking等),并且IPv6和IPv4的逻辑将基本相同,模数不同的networking前缀。
人们在做什么来处理这种情况? 理想情况下,我希望能够从同一个源文件生成iptables和ip6table规则集。 我已经用bash把一些东西扔在了一起,但是这并不一定很好,我怀疑有一个更好的解决scheme必须存在。
我会特别感兴趣的是一个基于Puppet的解决scheme,它很好地利用了Puppet自己的依赖机制来实现规则(或者规则组)的相对顺序。
防火墙生成器正是你所需要的。 您可以创build一个规则集,将其标记为“组合ipv4 + ipv6”,并将您分配给同一网段(如“数据库networking”etC)的ipv4和ipv6networking放在同一个规则中。 程序然后生成两个独立的iptablesconfiguration,一个用于ipv4,另一个用于ipv6。 “用户指南”的这一章说明了这一点,尽pipe它使用Cisco路由器访问列表作为示例。 它对iptables完全一样。
http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html
我最近还面临为IPv4和IPv6创buildiptables规则的问题。 经过一番search之后,我最终使用了Phil Whineray的IPv6 FireHOL分支 。
FireHOL是一个iptables防火墙生成器,在Linux主机和路由器上生成有状态的iptables包过滤防火墙,具有任意数量的networking接口,任意数量的路由,任意数量的服务,各种服务之间的任何复杂度(包括正面和负面expression式)。 (来源:FireHOL网站)
不幸的是官方版本不支持IPv6。 但是,菲尔·威纳雷(Phil Whineray)在一个非官方的分支中增加了支持
关于configuration如何的一些例子:
# 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
您可以在以下网站查到这个火器分支:
git clone git://repo.or.cz/fireholvi.git
其他文档可以在官方FireHOL文档或关于IPv6的其他自述文件中find 。
就个人而言,我可能会谨慎使用100%可靠的防火墙是重要的生产机器上。 不过值得一看。
为了继续传播这个事业,我build议利用木偶做你的提升。 目前还没有一个好的处理iptables 4和6规则的脚本,但是一旦你调整了语言,写一个脚本也不算什么。
Mediawiki的公共git存储库是一个很好的configuration模式,包括一个iptables类 ,将提供一个良好的基础开始。 您可以对其进行编辑,以便默认将规则应用到两个堆栈,并且当您将事情放在IPv4或IPv6规则上时,可以为不同规则设置标志。
最后的奖励是,服务的防火墙规则可以写入服务定义中,并在部署或删除服务时自动部署和删除。
在这里回答我自己的问题,但我认为这个信息可能是普遍感兴趣的:
在研究这个问题的时候,我偶然发现了ubuntu(简单的防火墙)。 在ufwconfiguration中启用IPV6,ufw将并行pipe理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还支持应用程序configuration文件,它允许您创build命名的端口组。 你可以这样做:
# ufw allow 'WWW Full'
最终打开端口80和443(IPv4和IPv6)。
我只是刚开始看,但似乎相当不错。
由于它仍然从列表中缺失: Shorewall是一个广泛采用和定期更新的function丰富的数据包filterconfiguration工具。 它有一段时间的IPv6支持 。