以下两者有何区别:
iptables ... -m state --state NEW
和
iptables ... --syn
第一个应该选择新连接,但据我所知,新连接是通过发送 TCP syn 标志来建立的。另一个的意思就是 - 带有 syn 标志的数据包。
当上述命令返回不同结果时,您能给出任何实际的例子吗?
答案1
该--syn
标志对于检查 TCP 流量很有用,但NEW
状态可用于其他协议(包括TCP
),如UDP
和ICMP
。我可以说这比TCP 选项NEW
更通用。--syn
从 iptables 手册中,你可以读到:
NEW meaning that the packet has started a new connection,
or otherwise associated with a connection which has not seen packets in both directions
举个例子,一个DNS请求会匹配NEW
状态,但是它不会匹配带有--syn
选项的规则。简单来说,它是一个UDP数据报。
此外,该--syn
选项还可用于检查具有不良标志组合的 TCP 数据包并丢弃它们。
另外,您可以同时使用这两个选项来检查NEW
没有第一个数据包的 TCP 流--syn
并丢弃它们,例如:
$ sudo iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
bad_tcp_packets
在这里,我们将这些类型的数据包添加到名为“被丢弃/记录”等的用户定义链中...
答案2
另外一点。--syn
可以在表中使用raw
,但--new
不能(因为在原始表中对数据包进行分类还为时过早)。