netstat显示实时信息,没有历史信息。
Conntrack会在最近的连接过期前记住X秒。这是因为iptable还有其他几个模块可以利用这些信息:例如,如果想禁止某个IP地址,如果它在某个时间框架内建立了X个新连接的话。
# conntrack -L -p tcp 2>/dev/null | awk '{++S[$4]; ++total} END {for (a in S) print a, S[a]; print "TOTAL", total}'
SYN_RECV 1
CLOSE_WAIT 27
CLOSE 28
ESTABLISHED 1515
SYN_SENT 33
TIME_WAIT 4689
TOTAL 6293
状态介绍
状态 | 数量 | 解释 | 风险 / 建议 |
---|---|---|---|
SYN_RECV | 1 | 服务器收到了 SYN,并回复了 SYN+ACK,等待客户端 ACK。正在握手中。 | 数量少正常;如果突然大量堆积,可能是网络丢包或 SYN Flood 攻击。 |
CLOSE_WAIT | 27 | 收到对方 FIN,但本机应用还没关闭 socket。 | 长期存在说明应用未及时 close() 连接,需排查代码或服务逻辑。 |
CLOSE | 28 | 连接已关闭,但 conntrack 表中还暂存,用于 NAT/回收。 | 少量正常,无需特别处理。 |
ESTABLISHED | 1515 | 正常通信中的活跃连接。 | 正常业务连接数。关注是否符合预期并监控变化趋势。 |
SYN_SENT | 33 | 本机发出 SYN,但还没收到回应。 | 少量正常;如果数量长期上升,需检查网络连通性或目标端口。 |
TIME_WAIT | 4689 | 主动关闭方完成四次挥手后,等待 2MSL 超时。 | 数量大很常见(如 Web 短连接);过多会占用 conntrack 表,必要时优化内核参数(如 tcp_tw_reuse 、tcp_tw_recycle )。 |
TOTAL | 6293 | conntrack 表中的 TCP 连接总数。 | 对比 nf_conntrack_max ,避免过满(满了会丢连接)。 |
调整 nf_conntrack_max
查看 nf_conntrack_max
的值,也就是 Linux Netfilter 连接跟踪系统允许的最大连接数,可以使用以下方法:
方法 1:通过
/proc
文件系统查看nf_conntrack_max
的值通常存储在/proc
文件系统中,可以用以下命令查看:cat /proc/sys/net/netfilter/nf_conntrack_max
方法 2:使用
sysctl
命令也可以用
sysctl
命令查询:sysctl net.netfilter.nf_conntrack_max
修改:
sudo sysctl -w net.netfilter.nf_conntrack_max=131072
要永久修改,可以在 /etc/sysctl.conf
或 /etc/sysctl.d/
的文件中添加:
net.netfilter.nf_conntrack_max=131072
然后应用更改:
sudo sysctl -p
检查当前连接数:要查看当前跟踪的连接数(以便与 nf_conntrack_max
比较),可以使用:
cat /proc/sys/net/netfilter/nf_conntrack_count
或者直接统计连接数:
conntrack -L | wc -l