这些iptables规则是必要的吗?

场景:基于Linux的路由器(Asuswrt-Rmerlin 380.65)运行iptables v1.4.14,顶部有以下规则。 路由器的目的是为内部客户端提供Internet访问。 wanface上没有任何服务供公众使用。

iptables -P INPUT DROP iptables -I INPUT -i vlan2 -m state --state NEW -j DROP iptables -I FORWARD -i vlan2 -m state --state NEW -j DROP 

1)有了上述规则,是否有必要具备下面的规则?

 #Drop XMAS packets iptables -I INPUT -p tcp --tcp-flags ALL ALL -j DROP #Drop NULL packets iptables -I INPUT -p tcp --tcp-flags ALL NONE -j DROP 

2)下面的规则不是不必要的,因为操作系统和netfilter开发人员已经知道什么是允许/不允许的?

 #Force SYN packets check iptables -I INPUT -p tcp ! --syn -m state --state NEW -j DROP #Force Fragments packets check iptables -I INPUT -f -j DROP 

迈克尔汉普顿是死对头,在没有整个规则集的情况下回答问题可能会产生误导,但是我们仍然可以做出一些明确的陈述。

你说你的规则集开始

 iptables -P INPUT DROP iptables -I INPUT -i vlan2 -m state --state NEW -j DROP iptables -I FORWARD -i vlan2 -m state --state NEW -j DROP 

那么你可以询问一些额外的规则的基本原理,看看前两条规则中没有的内容。 我们一个接一个。

 iptables -I INPUT -p tcp --tcp-flags ALL ALL -j DROP 

这个规则不受接口的限制,所以它适用于所有 INPUTstream量,不像前两种。 它过滤掉圣诞树数据包 。 这些数据包是渎职者,即没有理由让他们上网,所以过滤出来是一件合理的事情。

 iptables -I INPUT -p tcp --tcp-flags ALL NONE -j DROP 

同样,没有TCP数据包应该没有标志设置,所以这是另一个基本的networking健康线,这再次不受接口的限制。

 iptables -I INPUT -p tcp ! --syn -m state --state NEW -j DROP 

没有不是SYN数据包的数据包应该与NEW状态匹配,也就是说,在build立的TCP数据stream中间不应该有SYN数据包。 拒绝做任何事情; 另一个networking健康检查。

 iptables -I INPUT -f -j DROP 

拒绝碎片。 我不确定这是一个好主意,但有一些。

你可能会问,为什么要这些规则,如果政策是DROP无论如何打扰。 答案是,你有其他的, ACCEPTstream量的后来的规则,如果它没有被你列出的明确的DROP规则所拒绝,这些规则可能匹配,从而ACCEPT以上规则所影响的恶意stream量。