ipv6路由器的iptables表脚本

我在我的ubuntu电脑上使用gogoc隧道代理来启用ipv6。 我想用我的Ubuntu PC作为ipv6路由器。 我已经在gogoc客户端启用了路由器模式。 我正在使用radvd在本地局域网上通告路由器。 tun是隧道(WAN)接口。 br0是LAN接口(wan0和eth0已被桥接以使笔记本电脑成为无线接入点)。 我可以使用哪些防火墙规则来启用数据包转发,并为路由器和局域网devise出相当好的安全性。

我不能说我熟悉那个特定的隧道代理,我假设你收到了你的主机的一个/ 64。 有一些隧道经纪人提供了/ 48,在这种情况下,你需要调整一下规则。 这些是在iptables保存格式:

 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] # Allow established connections -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # Allow ICMPv6 traffic (required for IPv6) This could be tightened up but it must # be done very carefully unless you know what you're doing. It could block all # routing -A INPUT -p ipv6-icmp -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT # Allow traffic from your internal hosts to the outside world -A FORWARD -s <your address block>::/64 -j ACCEPT COMMIT 

你需要用你指定的地址范围replace“<你的地址块> :: / 64”。

这个防火墙将阻止所有外部连接到您的本地IPv6地址,同时允许他们访问所有的东西。 如果需要在内部IPv6主机上提供服务,则需要在最后(但在COMMIT之前)在FORWARD链中添加允许规则。

对于基于Linux的路由器,我发现shorewall6 —一个基于ip6tables的防火墙工具—效果很好。 通过使用像shorewall6这样的前端工具而不是原始的ip6tables ,你可以放弃一些重要而又烦琐的细节,比如想知道ICMPv6的哪些types(我需要接受哪种types的丢弃/拒绝?),已经得到了胜任的处理。

要configurationshorewall6 ,可以在/etc/shorewall6编辑less量configuration文件。 至less,你会修改这些文件:

  • zones ,你给你的networking命名;
  • interfaces ,列出您的networking接口和连接到的区域;
  • policy ,在此定义区域间转发的默认策略(ACCEPT,DROP等);
  • rules ,您可以在其中创build特定的政策例外。

(还有一些其他的文件,但是在大多数情况下,默认情况是好的。)

在你的情况下,你可以定义两个区域,说lanwan 。 您的默认广域网策略将为DROP,而您的默认广域网策略为“接受”。 然后,例如,如果您想要允许从wan区域的wan lan连接到lan区域中的特定主机,则可以将这些例外添加到rules文件中。

总之,使用像shorewall6这样的前端工具可以非常容易地创build一个健壮的和安全的路由器/防火墙—当然比使用原始ip6tables更容易—因为它为您创build了一些易于理解的抽象configuration(区域,策略,规则),然后处理底层细节。