立即增大conntrack表容量并清理无效连接可快速止血:临时调.net.netFilter.nf_conntrack_max(如131072),再执行conntrack -D –state INVALID,UNREPLIED释放空间,同时定位高频源IP限速封禁。
字节),128K 条目约需 40–50MB 内存。
快速清理陈旧/无效连接记录
清空部分“僵死”连接能立即释放空间,尤其适用于短连接突发或存在大量 TIME_WaiT/UNREPLIED 状态的情况:
- 清空整个表(谨慎,会中断所有 NAT 连接):
sudo conntrack -F - 更安全的做法:只删除超时的、未建立的连接:
sudo conntrack -D --state INVALID,UNREPLIED - 若使用 firewalld,也可执行
sudo firewall-cmd --direct --remove-rules ipv4 filter OUTPUT后重载(仅在规则干扰时考虑)
检查并限制高频小包连接源
表满常是攻击或异常客户端导致,需快速定位源头:
- 查当前连接最多 IP:
sudo conntrack -L | awk '{print $7}' | cut -d= -f2 | sort | uniq -c | sort -nr | head -20 - 配合 iptables 限速封禁(临时应急):
sudo iptables -I input -s x.x.x.x -m limit --limit 5/sec --limit-burst 10 -j ACCEPT && sudo iptables -A INPUT -s x.x.x.x -j DROP - 关注是否大量来自 docker 容器、kubernetes nodePort 或健康检查探针(如 http 204 响应后不关闭连接)
验证与观察
操作后必须确认是否缓解:
- 持续监控:
watch -n 1 'conntrack -S | grep -E "(entries|searched|invalid)"' - 检查日志是否停止刷屏:
sudo dmesg -t | grep "table full" | tail -5 - 观察网络是否恢复通顺,特别是 SNAT/NAT 场景下的出向连接
临时缓解只是第一步,后续需分析 conntrack 超限根因——比如长连接未及时回收、nf_conntrack_tcp_be_liberal 未开启、或业务存在连接复用缺失等问题。