这些 iptables 规则是必要的吗?

这些 iptables 规则是必要的吗?

场景:基于 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

相关内容