跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何通过监控proc net ip_conntrack实时提取当前防火墙状态

直接读取 /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(非所有内核版本支持),若该值非零,表明已有连接因表满被强制清理。

相关文章