场景:基于 Linux 的路由器(Asuswrt-Rmerlin 380.65)运行 iptables v1.4.14,顶部有以下规则。路由器的目的是为内部客户端提供互联网访问。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
答案1
迈克尔·汉普顿 (Michael Hampton) 完全正确,在没有完整规则的情况下回答问题可能会产生误导,但我们仍然可以做出一些明确的陈述。
你说你的规则集以
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
此规则不受接口限制,因此适用于全部 INPUT
与前两种方式不同,它过滤掉圣诞树包。这些数据包是恶意的,也就是说,它们没有理由出现在网络上,因此将它们过滤掉是合理的。
iptables -I INPUT -p tcp --tcp-flags ALL NONE -j DROP
同样地,任何 TCP 数据包都不应该不标志设置,因此这是另一条基本的网络健康线,它同样不受接口的限制。
iptables -I INPUT -p tcp ! --syn -m state --state NEW -j DROP
任何非 SYN 数据包都不应与状态匹配NEW
,也就是说,在已建立的 TCP 流中间不应出现 SYN 数据包。拒绝任何符合条件的数据包;另一次网络健康检查。
iptables -I INPUT -f -j DROP
拒绝碎片。我不确定这是不是一个好主意,但有些人这么做。
您可能会问,如果政策DROP
无论如何都是如此,为什么还要费心制定这些规则。答案是,您还有其他较晚的规则ACCEPT
,这些规则可能会匹配这些流量,因此上述规则会影响恶意流量,前提是这些流量尚未被您列出的ACCEPT
明确规则拒绝。DROP