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表是否溢出










