iptables 中的 tcp 标志:RST SYN 和 RST 和 SYN RST 之间有什么区别?什么时候使用 ALL?

Kri*_*ris 11 firewall iptables tcp flags

我正在为虚拟专用服务器开发防火墙,我正在研究的一件事是端口扫描仪。TCP 标志用于保护。我有2个问题。
规则:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP
Run Code Online (Sandbox Code Playgroud)

第一个参数表示检查带有 SYN 标志的数据包 第二个参数表示确保设置了标志 ACK、FIN、RST SYN
并且在这种情况下(有匹配项),丢弃 tcp 数据包

第一个问题:
我理解 RST 和 RST/ACK 的含义,但在第二个参数中使用了 RST SYN。
RST SYN 和 RST 和 SYN RST 有什么区别?
3 次握手中是否有“SYN RST”标志?

第二个问题是关于两者之间的区别

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP    
Run Code Online (Sandbox Code Playgroud)

-p tcp --tcp-flags ALL SYN,ACK,FIN,RST SYN -j DROP    
Run Code Online (Sandbox Code Playgroud)

什么时候应该使用 ALL ?
当我使用ALL时,这是否意味着如果带有syn标志的tcp数据包没有设置ACK“和”FIN“和”RST SYN标志,就不会有匹配?

Jul*_*ent 18

这个:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP
Run Code Online (Sandbox Code Playgroud)

意思是“查看标志 syn、ack、fin 和 rst 并匹配设置了标志 SYN 和所有其他未设置的数据包”

tcp-flags 的第一个参数是您正在考虑的标志,第二个参数是您要匹配的掩码。如果你正在使用

--tcp-flags SYN,ACK SYN
Run Code Online (Sandbox Code Playgroud)

那么它将匹配具有 [SYN=1 ACK=0] 的数据包,但它不会匹配具有 [SYN=1,ACK=1] 或 [SYN=0,ACK=1] 或 [SYN=0,ACK] 的数据包=0]

在上面的规则中,您仅匹配 SYN 数据包。


Sma*_*ger 16

我想你对这个开关感到困惑。

--tcp-flags开关只需要两个参数。第一个参数是要检查的标志。第二个参数是第一个参数中应该为匹配设置的标志。因此你的线路:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP
Run Code Online (Sandbox Code Playgroud)

是说:“如果仅从这四个中设置了 SYN 标志,则匹配。(空格分隔第一个和第二个参数。)

-p tcp --tcp-flags ALL SYN -j DROP
Run Code Online (Sandbox Code Playgroud)

意味着检查所有标志并匹配那些设置 SYN 的数据包。您的第三个示例语法错误,因为它提供了三个参数。您的第一条规则会丢弃所有新进入的 TCP 连接,这可能不是您想要的。

该交换机主要用于丢弃设置了无意义 TCP 标志的数据包。例如,您不会获得同时设置 SYN 和 RST 或 SYN 和 FIN 的合法数据包。从 my* 防火墙脚本之一中获取此片段:

${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,URG SYN,URG -j DROP
Run Code Online (Sandbox Code Playgroud)

这些检查不应该自然发生的 TCP 标志的特定组合并丢弃数据包。

更多阅读手册页

*(monmotha-2.3.8 的调整版本)