立即增大conntrack表容量并清理无效连接可快速止血:临时调大net.netfilter.nf_conntrack_max(如131072),再执行conntrack -D --state INVALID,UNREPLIED释放空间,同时定位高频源IP限速封禁。

立刻增大连接跟踪表容量,同时清理无效连接,可快速止血。
临时扩大 conntrack 表大小
这是最直接有效的临时手段。无需重启服务,运行命令即可生效:
-
查看当前设置:
sysctl net.netfilter.nf_conntrack_max -
临时调大(例如设为 131072):
sudo sysctl -w net.netfilter.nf_conntrack_max=131072 -
确认生效:
sysctl net.netfilter.nf_conntrack_count查看当前已用条目数,确保远低于新上限
注意:该值不宜盲目设得过高,需结合内存估算(每个 conntrack 条目约占用 300–400 字节),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 未开启、或业务存在连接复用缺失等问题。










