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

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

我正在为虚拟专用服务器开发防火墙,其中一项研究就是端口扫描器。TCP 标志用于保护。我有两个问题。
规则:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

第一个参数表示检查带有标志 SYN 的数据包;第二个参数表示确保标志 ACK、FIN、RST SYN 已设置
;如果是这种情况(匹配),则丢弃 TCP 数据包

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

第二个问题是关于

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP    

-p tcp --tcp-flags ALL SYN,ACK,FIN,RST SYN -j DROP    

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

答案1

这:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

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

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

--tcp-flags SYN,ACK SYN

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

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

答案2

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

--tcp-flags开关仅接受两个参数。第一个参数是要检查哪些标志。第二个参数是第一个参数中应该为匹配设置的标志。因此您的行:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

意思是:“如果匹配仅有的SYN 标志由这四个设置。(空格将第一个参数和第二个参数分开。)

-p tcp --tcp-flags ALL SYN -j DROP

表示检查所有标志并将这些数据包与只不过SYN 集。第三个示例的语法不正确,因为它给出了三个参数。您的第一条规则将丢弃所有新传入的 TCP 连接,这可能不是您想要的。

交换机主要用于丢弃设置了无意义 TCP 标志的数据包。例如,您不会收到同时设置了 SYN 和 RST 或 SYN 和 FIN 的合法数据包。以下是我的一个*防火墙脚本中的代码片段:

${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

这些检查将不会自然出现的特定 TCP 标志组合并丢弃数据包。

更多阅读请见手册页

*(monmotha-2.3.8 的调整版本)

相关内容