Linux:无效的TCP标志

在教程和书籍中经常推荐使用iptables来过滤无效的TCP标志。 我不知道这些内核是否已经被内核本身或iptables状态模块过滤了。 有没有人有关于此的进一步的信息?

我猜TCP规范不禁止一些无效的标志configuration。 有些系统可能会select发送(或曾经发送)奇怪的标志组合,但是现在只有“坏人”发送它们(对于FIN扫描等),所以build议将它们过滤掉。

顺便说一下,这里是我使用的iptables规则来过滤掉(可能从frozentux iptables教程得到这些)

#new not syn -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP 

过滤奇怪的TCP标志通常是一个好主意,有两个原因:

  1. 它可以防止几种types的networking扫描
  2. 一些(旧的)系统在发送奇怪的TCP标志时可能performance不好

在iptables中,你必须手工对这些数据包进行过滤(据我所知),其他的防火墙,比如PF有“scrubbing”模块。 清理是一组标准规则,它试图从stream中删除无效数据包,确保所有数据包具有相同的TTL等。

新版本的内核不响应带有无效TCP标志的消息。 您可以通过使用该工具发送带有无效标志Hping3的数据包进行testing。 如果您需要使用iptables,我离开我的脚本:

 #!/bin/bash # -- UTF 8 -- iptables="/sbin/iptables" CADENA="put INPUT, FORWARD or OUTPUT" IPWS="put destination IP" IFACE_Nro1="put input interface (example: wlan0 or eth0)" $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags FIN,RST FIN,RST -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN,PSH SYN,FIN,PSH -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN,URG SYN,FIN,URG -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN,RST SYN,FIN,RST -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL SYN,FIN,RST,PSH -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,PSH -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL ALL -j DROP $iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL NONE -j DROP