掌握服务器端口连接数是判断网络状态、识别异常访问、优化服务性能的重要手段。尤其是在处理突发流量、排查DDoS攻击或负载不均时,快速定位端口连接状况能够显著提升排障效率。那么在Linux服务器环境下,我们该如何准确查看各端口连接数?本文主要讲解Linux服务器如何查看端口连接数相关常见命令。
在Linux中,每一个与外部建立的连接最终都会映射为一个“端口连接”。不论是用户访问网站、内网调用API接口、数据库查询请求,还是负载均衡下的服务探活,都涉及到底层的端口收发数据。一旦某个端口连接数异常增高,很可能说明此服务被攻击或配置不足。定期查看端口连接数,是一项基础但关键的服务器安全运维动作。
过去很多管理员习惯使用netstat -anp来查看连接数,但在新的Linux发行版中,netstat已不再推荐使用。现代Linux系统普遍使用的是ss(Socket Statistics)命令。
ss -tn sport = :80 | wc -l
这条命令的意思是:列出所有TCP协议中,源端口为80的连接,再统计总行数。这样就可以快速得知当前访问Web服务器(默认监听80端口)的连接数量。如果你用的是HTTPS服务,只需将:80替换为:443即可。
如何查看所有端口连接数量排行,有时我们并不清楚是哪个端口连接数暴增,可以用如下命令快速统计:
ss -tn | awk '{print $4}' | cut -d':' -f2 | sort | uniq -c | sort -nr
解释这条命令:ss -tn列出所有TCP连接,awk提取本地地址列,cut取出端口部分,uniq -c统计每个端口的连接数,最终用sort -nr按连接数从大到小排列。你会看到如下输出:
120 80
87 22
35 443
这表示80端口有120个连接,SSH的22端口有87个,HTTPS的443端口有35个。
仅仅知道连接数量是不够的,还要结合状态来看。例如很多连接处于TIME_WAIT状态,可能是因为短连接过多,而处于ESTABLISHED状态的连接才是活跃连接。
ss -ant | grep ':80 ' | grep ESTAB | wc -l
这条命令可以查看当前80端口的活跃连接数量。你也可以用grep TIME-WAIT替换,看有多少连接处于回收等待状态。
用lsof更细粒度查看进程与端口关系,如果你想知道哪个进程监听了哪些端口,并与哪些远程IP通信,lsof命令很有帮助:
lsof -i :80
它会显示监听80端口的所有进程、进程ID、连接状态、远程地址。配合grep ESTABLISHED可以筛选正在传输的连接。
结合ip命令进行客户端统计,如果你想知道是哪些IP在疯狂连接你服务器的某个端口,使用如下命令:
ss -tn dst :80 | awk '{print $5}' | cut -d':' -f1 | sort | uniq -c | sort -nr | head
可以统计出当前连接到80端口的前十个IP地址及连接数量。如果某个IP连接数特别高,有可能是爬虫或攻击行为。
将上述命令写入脚本,每分钟执行一次,配合日志记录与告警脚本,可以实现对端口连接数的实时监控。这对于大流量业务来说,是预警和自动化运维的重要组成。
Linux服务器查看端口连接数并不复杂,但如果掌握不熟练,可能会错过潜在风险信号。掌握ss命令的使用方式,结合awk、cut、sort等命令行工具,可以高效统计连接信息,判断是否存在异常。再配合lsof、ip等命令追踪来源,帮助我们及时应对攻击或性能瓶颈。
Linux服务器查看端口连接数常见问题
Q1:服务器80端口连接数高是否一定是攻击?
A1:不一定。如果你部署的是网站服务,连接数高可能是访问量大。但如果某个IP的连接数特别高、持续不断,就可能是CC攻击的表现。
Q2:如何让Linux显示监听所有端口的进程?
A2:使用命令:ss -tulnp,其中tulnp分别代表TCP、UDP、监听、进程号、服务名。
Q3:能否设置端口连接数阈值自动报警?
A3:可以,配合脚本加cron定时任务,每次记录连接数,一旦超过设定阈值,就发送邮件或钉钉报警。