Linux TCP 封包过滤依托 netfilter 内核框架,通过 iptables/nftables 结合 conntrack 状态跟踪实现高效防护;需设默认 DROP 策略、防御 SYN 洪泛与端口扫描,并过渡至 nftables 及 eBPF 提升性能与可维护性。

Linux 系统中,TCP 封包过滤是构建网络边界的最基础也是最关键的防护手段。它不依赖应用层逻辑,直接在内核协议 栈处理流量,响应快、开销低、抗绕过能力强。核心在于精准识别恶意连接特征(如异常 端口、SYN 洪泛、非法标志位组合),并结合状态跟踪实现动态拦截。
iptables/netfilter:掌握状态化过滤的核心机制
iptables 并非独立 工具,而是用户空间对内核 netfilter 框架的配置接口。真正执行封包过滤的是内核中的 hook 点(如 PREROUTING、INPUT、FORWARD)。关键要理解 conntrack(连接跟踪)机制——它让 iptables 能识别“新建连接”(NEW)、“已建立连接”(ESTABLISHED)、“相关连接”(RELATED)等状态,避免简单放行所有回包导致规则失效。
- 默认策略设为 DROP,再按需添加 ACCEPT 规则,避免遗漏导致放行
- 对入站 SSH 只允许特定 IP 段:iptables -A INPUT -p tcp –dport 22 -s 192.168.10.0/24 -j ACCEPT
- 拒绝所有非法 TCP 标志组合(如 SYN+FIN、NULL 扫描):iptables -A INPUT -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
- 启用连接跟踪模块:modprobe nf_conntrack,确保 ESTABLISHED 规则生效
防御常见 TCP 攻击:从规则到实战配置
TCP 协议自身特性易被滥用,防护不能只靠 黑名单。需结合协议行为建模,用规则组合实现纵深过滤。
- SYN 洪泛防护:启用内核 SYN Cookies(sysctl -w net.ipv4.tcp_syncookies=1),同时限制新建连接速率:iptables -A INPUT -p tcp –syn -m limit –limit 1/sec –limit-burst 3 -j ACCEPT
- 端口扫描阻断:检测短时间多端口尝试,用 recent 模块记录并封禁:iptables -A INPUT -p tcp -m state –state NEW -m recent –set –name portscan –rsource,再加拒绝规则
- 伪造源 IP 防护 :在边界设备启用反向路径过滤(sysctl -w net.ipv4.conf.all.rp_filter=1),丢弃非 路由 可达的入包
现代替代方案:nftables 与 eBPF 的平滑演进
iptables 语法复杂、规则维护困难,nftables 作为其官方继任者,统一了 IPv4/IPv6/ARP 等表结构,支持更灵活的表达式和原子提交。而 eBPF 则将过滤逻辑下沉至内核可编程沙箱,实现毫秒级策略执行与实时流量分析。
- 用 nftables 重写经典防 SSH 暴力破解规则:nft add rule inet filter input tcp dport 22 ct state new limit rate 5/minute counter accept
- eBPF 程序可嵌入 XDP 层,在 网卡驱动 接收包时即过滤,规避内核协议栈开销,适合 DDoS 首道清洗
- 生产环境建议过渡路径:先用 nftables 替换 iptables,再对关键链路(如负载均衡器)试点 eBPF 加速
验证与持续运营:别让 防火墙 变成“透明墙”
规则写完不等于防护生效。必须验证匹配路径、监控命中计数、定期审计冗余规则,并与日志系统联动。
- 查看规则命中情况:iptables -L INPUT -v -n 或 nft list chain inet filter input
- 将 DROP 日志输出到独立文件(避免冲刷系统日志):iptables -A INPUT -j LOG –log-prefix “FW-DROP: “,配合 rsyslog 过滤
- 用 tcpdump 抓包比对:在规则前后分别抓包,确认恶意 SYN 是否真被拦截,而非被上层服务拒绝
- 自动化巡检脚本应检查:默认策略是否为 DROP、是否存在宽泛规则(如 0.0.0.0/ 0 全通)、conntrack 表是否溢出