--tcp-flags模块可以用于匹配 TCP 报文头部的标志位
比如tcp协议的建立过程中,我们都知道三次握手的原理,在其中主要靠tcp头中的标志位进行,其握手过程的报文是[SYN][SYN,ACK][ACK]
假设我们要匹配三次握手中的第一次握手
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j DROP
上面的命令表示检查 SYN、ACK、FIN、RST 四个位,其中 SYN 位必须为 1,其他位必须为 0
以此类推,匹配第二次握手和第三次握手则是
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST,URG,PSH ACK -j DROP