iptables 新连接与 --syn

wan*_*son 17 linux iptables

有什么区别:

iptables ... -m state --state NEW
Run Code Online (Sandbox Code Playgroud)

iptables ... --syn
Run Code Online (Sandbox Code Playgroud)

第一个应该选择 NEW 连接,但 AFAIK 新连接是通过发送 TCP syn 标志建立的。另一个意思就是-带有syn标志的数据包。

当上述命令返回不同的结果时,您能举一些实际的例子吗?

Kha*_*led 10

--syn标志是检查TCP流量是有用的,但NEW可用于其他协议(包括状态TCP),如UDPICMP。我可以说这NEW--synTCP 选项更通用。

从 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
Run Code Online (Sandbox Code Playgroud)

例如,DNS 请求将匹配NEW状态,但不会匹配带有--syn选项的规则。简单地说,它是一个 UDP 数据报。

此外,该--syn选项可用于检查带有坏标志组合的 TCP 数据包以丢弃它们。

此外,您可以同时使用这两个选项来检查NEW没有--syn第一个数据包的TCP 流并丢弃它们,例如:

$ sudo iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
Run Code Online (Sandbox Code Playgroud)

在这里,我们将这种类型的数据包添加到一个用户定义的链中,称为bad_tcp_packets被丢弃/记录等......