iptables -m length 模块通过匹配IP层Total Length字段高效拦截异常长度扫描包,如TCP SYN扫描的40–55字节短包、SSH探测的<55字节首包及1501+字节非分片TCP包,但无法解析载荷或处理分片重组。

iptables 的 -m length 模块不能识别“扫描器名字”,但能高效拦截具备**可量化长度特征**的扫描指纹包——这类包往往为绕过常规端口探测或适配特定工具逻辑,刻意构造超短、固定或反常长度,与真实业务流量存在明显统计偏差。关键不是匹配内容,而是抓住“异常长度+协议上下文”这个轻量高性价比组合。
聚焦典型指纹长度区间,按协议分层拦截
不同扫描行为在 IP 层总长上呈现稳定模式,直接匹配比解析载荷更可靠:
- TCP SYN 扫描常用极短包:合法最小 SYN(无选项)为 60 字节(20 字节 IP 头 + 20 字节 TCP 头 + 20 字节以太网填充),但 Masscan 等工具常发 40–55 字节包。可拦截:
iptables -A INPUT -p tcp --syn -m length --length 0:59 -j DROP - SSH 握手探测多为畸形 ClientHello 前导:正常 SSH 协议协商首包通常 ≥ 55 字节,
iptables -A INPUT -p tcp --dport 22 -m length --length 0:54 -j DROP - TLS 握手探测(如 nmap -sV 针对 443)常发送超短 ClientHello:含基础扩展的最小合法 ClientHello 总长一般 ≥ 75 字节,
iptables -A INPUT -p tcp --dport 443 -m length --length 0:74 -j DROP - DNS 放大攻击反射包常具固定长度:攻击者伪造源 IP 向开放 DNS 递归服务器发 32 字节查询(如仅含查询头),可精准拦截:
iptables -A INPUT -p udp --sport 53 -m length --length 32 -j DROP
叠加协议状态和标志位,大幅降低误报
单纯按长度拦截会误伤合法小包(如纯 ACK、空 UDP 保活)。必须结合连接状态和 TCP 标志缩小范围:
- 只对新建连接的 SYN 包做短长度检查,排除已建立连接的干扰:
iptables -A INPUT -m state --state NEW -p tcp --syn -m length --length 0:59 -j DROP - 过滤 ICMP 探测时排除标准 echo request(通常 84 字节):
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 0:64 -j DROP(64 字节以下基本无合法用途) - 针对 UDP 扫描,限制常见扫描端口(如 161/162 SNMP、137 NetBIOS)的超短请求:
iptables -A INPUT -p udp -m multiport --dports 161,162,137 -m length --length 0:32 -j DROP
先记录再拦截,避免业务中断
上线前务必用 LOG 规则观察真实流量分布,确认无误后再启用 DROP:
- 记录所有
iptables -I INPUT -m state --state NEW -p tcp -m length --length 0:59 -j LOG --log-prefix "SHORT-TCP-NEW: " - 记录 > 1500 字节的非分片 TCP 包(可能为畸形握手或 Jumbo Frame 探测):
iptables -I INPUT ! -f -p tcp -m length --length 1501: -j LOG --log-prefix "LARGE-TCP-NONFRAG: " - 查看日志:
tail -f /var/log/messages | grep "SHORT-TCP-NEW\|LARGE-TCP-NONFRAG"
注意模块边界,不越界强求
length 模块只看 IP 层 Total Length 字段,它无法:
- 区分 TCP payload 和 total length(所以不能写“TCP 数据段长度 >1000”)
- 识别分片后重组的总长(后续分片长度独立计算,易被绕过)
- 解析 TLS 加密载荷或 HTTP User-Agent(需 string 模块且仅限明文)
若需更精细控制(如“UDP 载荷长度为 0”或“TCP MSS = 1460”),应改用 -m u32 或交由应用层代理处理。length 是快筛第一道关,不是万能解。

















