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

我正在为虚拟专用服务器的防火墙工作,我正在研究的其中一个端口扫描器。 TCP标志用于保护。 我有2个问题。
规则:

-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,这是否意味着如果与SYN标志的TCP数据包没有ACK“和”FIN“和”RST SYN标志设置,将不会有匹配?

这个:

 -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数据包。

我觉得你有这个开关困惑。

--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的调整版本)