iptables过滤非法数据包的关键在于识别协议异常特征而非简单封端口,通过TCP标志位、UDP长度、ICMP类型白名单及HTTP明文载荷匹配实现高效单包检测。

iptables 过滤特定协议的非法数据包,关键不是“封端口”,而是识别该协议在真实网络中哪些行为属于异常或攻击特征。它不解析协议语义,但能基于协议结构、标志位、长度、固定字段位置等做高效单包匹配。下面分四类常见协议场景说明实用做法。
TCP 协议:拦截非法标志组合与状态异常
TCP 层的非法请求多来自扫描器或畸形构造包,不能依赖 --state NEW 配合 ! --syn 这类逻辑冲突规则。应直接用 --tcp-flags 精准捕获:
Xmas 扫描(FIN+URG+PSH 全置):
iptables -I INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROPNull 扫描(所有标志清零):
iptables -I INPUT -p tcp --tcp-flags ALL NONE -j DROPSYN+FIN 同时置位(违反 RFC):
iptables -I INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP孤立 FIN 包(无 ACK/SYN,常用于 FIN 扫描):
iptables -I INPUT -p tcp --tcp-flags ALL FIN -j DROP
这些规则必须插入链首(用 -I),并在 INVALID 状态过滤之前执行。
UDP 协议:限制长度与响应特征
UDP 无连接,非法请求常表现为极小包、固定长度反射包或伪造响应:
拒绝所有 ≤64 字节的 UDP 包(避开 DNS 正常查询,但拦多数反射探测):
iptables -A INPUT -p udp -m length --length 0:64 -j DROP拦截长度恰好为 8 字节的 UDP(纯头无载荷,常见于伪造 DNS 响应):
iptables -A INPUT -p udp -m u32 --u32 "20 & 0xFFFF = 8" -j DROP若服务只收请求不发响应,可封禁目的端口为 DNS(53)但源端口也为 53 的包(典型反射攻击特征):
iptables -A INPUT -p udp --sport 53 --dport 53 -j DROP
ICMP 协议:放行必要类型,阻断滥用行为
完全禁 ICMP 会影响路径 MTU 发现和错误反馈。应白名单式放行:
允许目标不可达(type 3)、超时(type 11)、参数错误(type 12):
iptables -A INPUT -p icmp --icmp-type 3 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p icmp --icmp-type 11 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p icmp --icmp-type 12 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT其余 ICMP 类型(如 echo-request / type 8)若非必需,统一丢弃:
iptables -A INPUT -p icmp -j DROP
HTTP/明文应用层协议:匹配路径与载荷特征(仅限未加密流量)
iptables 无法解密 HTTPS,也不能跨包重组,但对明文 HTTP 或部分 TLS 握手信息(如 SNI)仍可做有限防护:
封禁 Spring Actuator 敏感路径(需服务走 HTTP 或路径未加密):
iptables -A INPUT -p tcp --dport 8080 -m string --algo bm --string "/actuator/env" -j DROP拦截 Swagger 接口文档泄露:
iptables -A INPUT -p tcp --dport 8080 -m string --algo bm --string "/swagger.yaml" -j DROP匹配十六进制 shellcode 片段(如
eval(的 hex 形式):iptables -A INPUT -p tcp --dport 80 -m string --hex-string "|6576616C28|" --from 64 --to 1024 -j DROP
注意:所有 --string 规则必须限定 --from/--to 范围,避开 IP/TCP 头部,并搭配端口与协议条件,否则极易误杀。
不复杂但容易忽略。

















