我正在为Debian Squeeze上的ipv6设置一个防火墙。 这是一个networking服务器,所以我认为唯一需要向世界开放的端口是80。
这是我的:
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] :in-new - [0:0] -P INPUT DROP -P OUTPUT DROP -P FORWARD DROP -A INPUT -i lo -s ::1/128 -j ACCEPT -A OUTPUT -o lo -d ::1/128 -j ACCEPT -A INPUT -s fe80::/10 -j ACCEPT -A INPUT -m rt --rt-type 0 -j DROP -A OUTPUT -m rt --rt-type 0 -j DROP -A FORWARD -m rt --rt-type 0 -j DROP -A INPUT -p tcp ! --syn -m state --state NEW -j DROP -A INPUT -m state --state INVALID -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP -A INPUT -p tcp -m tcp --tcp-flags ACK,FIN FIN -j DROP -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP -A INPUT -d ff02::1 -j REJECT -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p IPv6-icmp -j ACCEPT -I OUTPUT -p IPv6-icmp -j ACCEPT -I FORWARD -p IPv6-icmp -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j ACCEPT -A INPUT -j LOG --log-level 4 --log-prefix "IPT_INPUT: " -A INPUT -j DROP -A FORWARD -j LOG --log-level 4 --log-prefix "IPT_FORWARD: " -A FORWARD -j DROP -A OUTPUT -j LOG --log-level 4 --log-prefix "IPT_OUTPUT: " -A OUTPUT -j DROP COMMIT
我发现它在inernet的某个地方,并稍微改变了一些,但是当我尝试回溯它时,它会出现以下错误:
sudo ip6tables-restore < /etc/ip6tables.firewall.rules ip6tables-restore: line 47 failed
任何想法如何设置我的ip6tables,所以它会工作?
谢谢。
我不知道你在哪里受到这种憎恶,但是你可以做的最好的事情就是删除它,从头开始。 它的主要问题在于它是不必要的复杂和难以遵循的,即使它可能工作(而且我不能确定从阅读它,所以我当然不会去testing它)。
防火墙应该尽可能简单:只接受你需要的,拒绝其他的一切。 按照这个,你将不需要任何复杂和难以理解的规则。
那么我们来看看一个正在运行的IPv6 iptables防火墙。 我刚从我的一台服务器上取下了这个:
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0]
我们为这些表设置默认策略以接受; stream量实际上将被每个表格中的规则所丢弃。 这给了我们更多的灵活性。 特别是,OUTPUT表应始终设置为默认的ACCEPT策略,除非您打算阻止传出连接。
-A INPUT -m rt --rt-type 0 --rt-segsleft 0 -j DROP -A FORWARD -m rt --rt-type 0 --rt-segsleft 0 -j DROP -A OUTPUT -m rt --rt-type 0 --rt-segsleft 0 -j DROP
这修复了IPv6路由头types0的安全问题 。 它应该出现在任何其他规则之前。 (请注意,自2.6.21.1以来的现代内核自动丢弃该stream量,并且不需要这些规则。如果您有以前的内核,请联系您的分发供应商获取CVE-2007-2242的修补程序。) RH0的显式规则已过时多年在现代Linux系统上不再需要。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这接受我们已经通过其他规则接受的任何现有连接的持续stream量。
-A INPUT -p ipv6-icmp -j ACCEPT
我们接受所有的ICMP数据包。 与IPv4不同,阻止ICMPv6stream量不是一个好主意,因为IPv6更依赖于它。
-A INPUT -i lo -j ACCEPT
我们接受来自/到本地接口的所有stream量。
-A INPUT -m state --state NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT
我们接受DHCPv6stream量。 如果您使用无状态自动configuration,或静态configuration您的机器,这是没有必要的。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
这些接受ssh和http的新连接。
-A INPUT -j REJECT --reject-with icmp6-port-unreachable -A FORWARD -j REJECT --reject-with icmp6-port-unreachable
在规则的最后,我们使用“端口不可达”拒绝所有不符合规则的stream量。 这导致在另一端标准的“连接被拒绝”消息,并有效地隐藏了我们有防火墙的事实。 像nmap这样的工具会报告我们所有的端口都是“closures的”而不是“过滤的”,并且有一个更困难的时间来确定我们有防火墙。
COMMIT
这提交了所有的表项。
我能够重新加载你的ip6tables转储没有问题。 我build议你先使用ip6tables命令尝试创build防火墙,然后转储它。 debugging起来要容易得多。
你可以从clean slate – firewall.sh开始,如下所示:
#!/bin/bash ip6tables -P INPUT DROP ip6tables -P OUTPUT DROP ip6tables -P FORWARD DROP ip6tables -F ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
小心 – 这将阻止任何ipv6通信。 希望你有控制台/带外/ ipv4通信通道。 如果不加,至less:
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
一旦你对防火墙脚本感到满意,你可以运行ip6tables-save> your.rules 。
我有提交失败相同的问题。 我正在使用Debian Wheezy,但我怀疑问题是一样的。 似乎Debian的基本安装(至less是我使用的)不支持ipv6的连接跟踪。 这会导致尝试跟踪连接状态( -m state... )的行失败,但不幸的是,ip6tables-restore没有足够的礼貌来告诉你。 好消息是,这可以解决而没有太多的麻烦:
# apt-get install conntrack # reboot
我确信有可能解决重启问题,但是我不确定需要重新启动哪个服务才能工作,所以我只是重新启动它们。 之后,那些使用有状态连接跟踪发布的规则集似乎可以正常工作。
这是OpenVZ和ipv6表的问题。 使用CSF防火墙,你将没有任何问题,为ipv6设置防火墙。