状态检测防火墙过滤异常数据包的核心是状态跟踪、行为限速与畸形报文过滤协同:需验证nf_conntrack模块加载及conntrack表活跃,配置syn flood防护、icmp限速、invalid状态丢弃及tcp标志异常拦截,并严格遵循规则顺序。

配置状态检测防火墙过滤异常数据包,核心是让防火墙不仅看单个包的五元组,还要理解连接状态、识别协议行为异常,并在内核层面快速拦截非法流量。关键不在堆规则,而在“状态跟踪 + 行为限速 + 畸形报文过滤”三者协同。
启用并确认状态检测功能已生效
状态检测不是默认打开就完事,必须验证底层连接跟踪模块是否正常工作:
- Linux(firewalld / nftables):运行 lsmod | grep nf_conntrack,确保
nf_conntrack、nf_defrag_ipv4等模块已加载;若未加载,执行 modprobe nf_conntrack - Windows:进入“高级安全 Windows 防火墙”→“属性”,检查“域配置文件”“专用配置文件”“公用配置文件”三个页签中,“状态检测”选项均为“开启”(默认开启,但远程管理时可能被误关)
- 验证连接跟踪是否活跃:执行 conntrack -L | head -10,能看到 TCP ESTABLISHED、RELATED 或 UDP 条目,说明状态表正在运行
针对常见协议栈攻击设置精准过滤规则
仅靠状态检测无法防御半开连接泛滥或畸形报文,需配合协议特征规则主动清洗:
- SYN Flood 防护:先启用内核级防护 sysctl -w net.ipv4.tcp_syncookies=1,再用 iptables/nftables 对 SYN 包限速——例如 -A INPUT -p tcp --syn --dport 80 -m limit --limit 1/s --limit-burst 5 -j ACCEPT,超限直接 DROP
- Land/Smurf 类欺骗攻击:封禁源IP=目的IP的包(-A INPUT -s 192.168.1.1 -d 192.168.1.1 -j DROP),以及广播地址响应(-A INPUT -d 255.255.255.255 -j DROP)
- ICMP 异常流量:限制 ping 请求频次(-A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/s -j ACCEPT),丢弃超大 ICMP 包(如 >1024 字节的 ping of death 特征包)
过滤无效或非法状态的数据包
状态检测防火墙会自动拒绝不属于任何会话的非首包,但还需显式拦截明显违规的包:
- 丢弃 INVALID 状态连接:-A INPUT -m conntrack --ctstate INVALID -j DROP(这是最基础也最关键的兜底规则)
- 拒绝已关闭连接的 FIN/RST 泛滥(防 TearDrop 变种):-A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP(全标志置位)
- 禁止 TCP 标志组合异常包,如 SYN+FIN 同时出现:-A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
规则顺序与链路逻辑不能错
iptables/nftables 的匹配是顺序执行,INPUT 链必须严格遵循“可信放行 → 状态放行 → 限速放行 → 异常丢弃”层级:
- 开头放行本机回环、已建立连接(-A INPUT -i lo -j ACCEPT;-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT)
- 中间处理新连接:对 SSH、HTTP 等服务做速率控制或白名单限制
- 末尾统一拦截:-A INPUT -m conntrack --ctstate INVALID -j DROP 和 -A INPUT -j DROP 放在最后











