直接读取 /proc/net/nf_conntrack 是获取防火墙连接跟踪状态最轻量、最可靠的方式,不依赖外部工具,实时反映内核连接快照,适用于脚本监控与快速诊断。

确认文件存在并可读
先检查系统是否启用 conntrack 模块:
- 运行 ls /proc/net/nf_conntrack,若返回文件路径说明模块已加载;
- 若提示“没有该文件”,可能是未启用防火墙(如 firewalld/iptables)、未加载 nf_conntrack 模块,或系统为极简内核(如某些容器镜像);
- 补救方式:执行 sudo modprobe nf_conntrack(临时加载),或确保 firewalld/iptables 服务处于 active 状态。
提取关键状态信息
该文件每行代表一个连接条目,格式固定。常用提取目标包括连接数、协议分布、异常状态等:
- 总连接数:sudo cat /proc/net/nf_conntrack | wc -l;
- 按协议统计:sudo cat /proc/net/nf_conntrack | awk '{print $1}' | sort | uniq -c;
- 查未响应连接(可能卡住或丢包):sudo cat /proc/net/nf_conntrack | grep '\[UNREPLIED\]';
- 查已确认且受保护连接(不易被清理):sudo cat /proc/net/nf_conntrack | grep '\[ASSURED\]';
- 定位特定IP通信:sudo cat /proc/net/nf_conntrack | grep '192.168.1.100'(替换为目标IP)。
构建简易实时监控循环
用 shell 循环+sleep 实现类 top 的刷新效果,无需额外工具:
- 基础命令:while true; do clear; echo "=== $(date) ==="; sudo cat /proc/net/nf_conntrack | wc -l; echo; sudo cat /proc/net/nf_conntrack | head -15; sleep 3; done;
- 更实用的精简版(只看数量与TOP 10):watch -n 2 'echo "Entries: $(sudo cat /proc/net/nf_conntrack | wc -l)"; sudo cat /proc/net/nf_conntrack | head -10';
- 注意:避免高频读取(如
关联内核参数判断是否瓶颈
仅看条目数不够,需结合上限和统计指标判断健康度:
- 当前使用量:sudo cat /proc/net/nf_conntrack | wc -l;
- 最大允许值:cat /proc/sys/net/netfilter/nf_conntrack_max;
- 若使用量持续 > 80% 最大值,或出现 conntrack: error: Cannot allocate memory,说明接近耗尽;
- 进一步检查早期丢弃计数:cat /proc/sys/net/netfilter/nf_conntrack_stat | grep early_drop(非所有内核版本支持),若该值非零,表明已有连接因表满被强制清理。











