直接读取 /proc/net/nf_conntrack 是获取防火墙连接跟踪状态最轻量、最可靠的方式,不依赖外部工具,实时反映内核连接快照,适用于脚本监控与快速诊断。
直接读取 `/proc/net/nf_conntrack`(注意:现代内核已弃用 `ip_conntrack`,统一使用 `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(非所有内核版本支持),若该值非零,表明已有连接因表满被强制清理。
