iptables -m conntrack --ctstate ESTABLISHED仅匹配已建立连接的数据包,不分析流量;真正分析需结合conntrack命令查状态、iptables计数器统计流量、LOG目标记录行为三类手段协同完成。

直接用 iptables -m conntrack --ctstate ESTABLISHED 本身不“分析”流量,它只是匹配并控制已建立连接的数据包。真正做流量分析,需要结合计数、日志、连接跟踪表查询三类手段协同完成。
查看ESTABLISHED连接的实时状态
conntrack 命令是底层连接跟踪机制的直接接口,比 iptables 更适合观察连接快照:
- 列出所有当前处于 ESTABLISHED 状态的连接:
conntrack -L -s ESTABLISHED - 只看 TCP 协议的已建立连接(更常用):
conntrack -L -p tcp --state ESTABLISHED - 按源 IP 统计 ESTABLISHED 连接数:
conntrack -L -p tcp --state ESTABLISHED | awk '{print $7}' | cut -d= -f2 | sort | uniq -c | sort -nr
用iptables规则统计ESTABLISHED流量大小
在 filter 表 INPUT/OUTPUT 链中添加带计数器的规则,可精确统计进出的已建连数据量:
- 统计所有入站 ESTABLISHED 流量(字节数和包数):
iptables -I INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
执行后运行iptables -vnx -L INPUT | grep ESTABLISHED查看实时字节/包计数 - 若只想统计特定服务(如 SSH),加端口限制:
iptables -I INPUT -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT - 注意:规则插入位置影响准确性——应放在 DROP 默认策略之前,且避免被更早的 ACCEPT 规则提前匹配跳过
记录ESTABLISHED连接的详细行为(需谨慎)
对调试或审计场景,可临时启用日志记录,但不建议长期开启(性能开销大):
- 记录每个 ESTABLISHED 包的五元组和时间戳:
iptables -I INPUT -m conntrack --ctstate ESTABLISHED -j LOG --log-prefix "ESTAB_IN: " --log-level 4 - 配合
dmesg -w或journalctl -k -f实时查看内核日志 - 为避免日志爆炸,建议加限速:
-m limit --limit 10/sec --limit-burst 20
关联分析:把conntrack和iptables规则联动起来
单纯看 ESTABLISHED 状态容易忽略上下文。建议组合使用:
- 先用
conntrack -L找出某个异常高活跃度的连接(如某 IP 占用上百 ESTABLISHED 条目) - 再查 iptables 是否有对应放行规则,以及该连接是否源自 NEW 规则允许的端口
- 最后用
ss -tni或netstat -tnp看进程绑定情况,确认是合法服务还是可疑进程


















