在教程和书籍中经常推荐使用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标志通常是一个好主意,有两个原因:
在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