Linux:无效的 TCP 标志

Linux:无效的 TCP 标志

教程和书籍中经常建议使用 iptables 过滤无效的 TCP 标志。我想知道内核本身或 iptables 状态模块是否已经过滤了这些标志。有人对此有进一步的信息吗?

答案1

我猜 TCP 规范并没有禁止某些无效的标志配置。有些系统可能选择发送(或曾经发送)奇怪的标志组合,但现在只有“坏人”才会发送它们(用于 FIN 扫描等),因此建议将它们过滤掉。

顺便说一下,下面是我用来过滤掉这些的 iptables 规则(可能从 frostytux 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

答案2

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

  1. 它可以防止多种类型的网络扫描
  2. 一些(较旧的)系统在发送奇怪的 TCP 标志时可能会出现问题

在 iptables 中,您必须手动过滤此类数据包(据我所知),其他防火墙(如 PF)具有“清理”模块。清理是一组标准规则,旨在从流中删除无效数据包,确保所有数据包具有相同的 TTL 等。

答案3

新版本的内核不会响应带有无效 TCP 标志的消息。您可以使用工具 Hping3 发送带有无效标志的数据包进行测试。如果您需要使用 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

相关内容