linux系统不默认记录tcp连接完整日志,需组合ss/netstat、/proc/net/tcp、定时采样脚本及服务日志实现连接状态捕获与异常追溯。

Linux 系统本身不默认记录 TCP 连接的完整历史日志,但可通过组合工具实现连接状态捕获、实时监控与异常记录。关键在于区分“实时连接快照”和“持久化连接日志”——前者由内核提供(如 /proc/net/tcp),后者需主动配置采集策略。
直接查看当前 TCP 连接状态
这是最常用、开销最小的方式,适用于快速诊断:
-
ss -tuln:替代 netstat 的现代命令,列出所有监听端口(-tTCP,-uUDP,-l监听,-n数字格式) -
ss -tun state established:只显示已建立的活跃连接 -
netstat -anpt | grep :80:查特定端口(如 80)的连接及对应进程 -
cat /proc/net/tcp | wc -l:粗略统计当前 TCP 连接总数(含各种状态)
统计连接状态分布,识别异常倾向
TCP 状态数量能反映服务健康度。例如大量 TIME_WAIT 可能是短连接频繁;大量 SYN_RECV 可能遭遇 SYN Flood 攻击:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
-
ss -t state established | wc -l:统计 ESTABLISHED 连接数 -
ss -t state time-wait | wc -l:统计 TIME_WAIT 数量 - 一键汇总:
ss -t state all | awk '{print $1}' | sort | uniq -c | sort -nr
生成可追溯的连接日志(非默认,需手动配置)
系统不自动写入连接日志,但可通过脚本定期采样并归档:
- 每分钟记录一次连接快照:
echo "$(date): $(ss -t state established | wc -l)" >> /var/log/tcp_established.log - 检测突增并保存详情:当 3 秒内连接数增长超阈值(如 500),执行
ss -tunap > /var/log/tcp_alert_$(date +%s).log - 配合 cron 定期轮转:
find /var/log/ -name "tcp_alert_*.log" -mtime +7 -delete
结合系统日志定位连接上下文
虽然内核不记连接细节,但服务进程(如 sshd、nginx、mysql)会在各自日志中记录连接事件:
-
grep "Accepted" /var/log/auth.log:SSH 成功登录(含源 IP 和时间) -
tail -f /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr:统计访问最多的客户端 IP -
journalctl -u nginx --since "2 hours ago" | grep "connect":查 systemd 服务的近期连接相关日志
不复杂但容易忽略:真正的“TCP 连接日志”不是现成文件,而是靠实时工具 + 定时采集 + 服务日志三者拼合出来的证据链。重点不是存下一切,而是按需捕获关键状态变化。










