在运维和网络安全的日常工作中,最让人头疼的场景之一就是——服务器突然卡顿、业务中断、网站打不开。你第一反应可能是:“是不是被攻击了?”
但很多时候,业务宕机也可能是代码Bug、数据库慢查询、机房网络波动或者硬件故障导致的。如何快速、准确地判断服务器是否真的被攻击了,是每一个运维人员和网络安全从业者必须掌握的核心技能。
今天,我们就从网络层、系统层、应用层三个维度,系统性地拆解——服务器被攻击时,到底会表现出哪些“异常信号”。
一、网络层异常信号:流量堵死了
服务器被攻击,最直观的表现就是网络层面的异常。
1. 带宽被占满
现象:服务器出网/入网带宽持续跑满,甚至超过带宽上限。监控图中带宽曲线呈“一条直线”或者“剧烈抖动并冲顶”。
如何判断:登录云平台或机房流量监控系统,查看带宽使用率。如果带宽长时间处于90%以上,且无明显业务峰值(如大促、秒杀),则有极大概率是被DDoS攻击了。
2. 大量无效连接
现象:使用   netstat -an   或   ss -an   命令,发现大量   SYN_RECV   状态的半连接,或者大量   TIME_WAIT   状态的连接。
如何判断:在终端执行以下命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
如果   SYN_RECV   数量异常高(正常情况应极少),说明可能正在遭受 SYN Flood攻击。
3. 丢包率飙升
现象:  ping   目标服务器出现大量丢包,或通过   mtr   工具看到某跳路由丢包严重。
如何判断:使用   ping -c 100 服务器IP  ,如果丢包率超过1%甚至更高,且业务无大流量活动,需要警惕DDoS攻击。
二、系统层异常信号:CPU和内存“爆了”
网络没堵,但服务器反应迟钝、SSH连接慢,这时候要检查系统资源。
1. CPU 长时间 100%
现象:  top   或   htop   命令显示 CPU 占用持续 100%,尤其是   us  (用户态)或   si  (软中断)高居不下。
如何判断:
如果是   us   高,查看是哪个进程占用了CPU,如果是一个陌生的进程或者 Web 服务器进程(如   httpd  /  nginx  )异常繁忙,且 QPS 远高于正常值,可能是 CC攻击。
如果是   si   高,说明系统在疯狂处理网络中断,往往是大量小包攻击导致的。
2. 内存被耗尽
现象:  free -m   显示可用内存几乎为0,Swap 被大量使用。
如何判断:结合   top   按内存排序(按   M   键),查看是否有进程异常占用内存。注意:一些攻击脚本会在内存中运行大量进程。
3. 连接数异常
现象:  ss -s   命令显示总连接数远超业务正常水平。
如何判断:正常业务连接数一般在几百到几千,如果你看到几万甚至几十万的连接数,明显异常。可以通过   netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n   查看哪些IP的连接数最多,找出攻击源。
三、应用层异常信号:网站“卡死”了
网络和系统层面看起来正常,但用户反馈网站很慢,或者某些接口超时——这时候要检查应用层。
1. 请求量异常激增
现象:通过 Web 访问日志(如 Nginx access log)或应用日志,发现某个 URL 的请求量在短时间内暴增,且请求 IP 分散、User-Agent 高度相似或重复。
如何判断:执行   tail -f access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20   查看请求最多的 IP。如果前几个 IP 的请求次数远超正常水平(如每秒几千次),基本可以确认是 CC攻击。
2. 数据库查询变慢
现象:数据库监控显示慢查询数量激增,连接池被打满。
如何判断:打开数据库的慢查询日志,查看是否是因为某些高频请求触发了复杂的 SQL 查询,导致数据库资源被耗尽。CC攻击者特别喜欢找那些需要大量计算的动态页面(如复杂搜索、联表查询)来下手。
3. 出现大量 5xx 错误
现象:监控报警显示   502 Bad Gateway  、  503 Service Unavailable  、  504 Gateway Timeout   等错误激增。
如何判断:
  502   通常是因为后端服务(如 PHP-FPM、Tomcat)崩溃或响应超时。
  503   是因为服务器负载过高,无法处理新请求。
  504   是网关等待后端响应超时。
这些错误如果和请求量激增同时出现,十有八九是被攻击了。
四、常见攻击类型的“症状对照表”
为了方便快速排查,整理了一份症状对照表:| 异常现象 | 可能原因 | 对应攻击类型 | 
| 带宽跑满,ping丢包严重 | 流量洪水 | DDoS攻击(UDP Flood、ICMP Flood等) | 
| 大量 SYN_RECV 半连接 | 连接耗尽 | SYN Flood攻击 | 
| 连接数异常高,CPU正常 | 连接耗尽 | 连接耗尽攻击 | 
| CPU 100%,带宽正常 | 应用层请求过多 | CC攻击/HTTP Flood | 
| 请求量激增,IP分散,UA相似 | 应用层攻击 | CC攻击 | 
| 数据库慢查询激增 | 针对动态页面的攻击 | CC攻击(动态页面攻击变种) | 
| Web日志出现大量 404/403 | 扫描/试探 | 恶意扫描/漏洞探测 | 
| 服务器出现陌生进程/异常文件 | 被入侵 | WebShell/后门 | 

五、三分钟快速排查脚本
这里提供一个简单的排查命令,可以直接复制到终端执行:
echo "=== 1. 系统负载 ==="
uptime
echo ""

echo "=== 2. CPU占用TOP10进程 ==="
ps aux --sort=-%cpu | head -11
echo ""

echo "=== 3. 内存占用TOP10进程 ==="
ps aux --sort=-%mem | head -11
echo ""

echo "=== 4. 网络连接状态统计 ==="
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
echo ""

echo "=== 5. 连接数最多的TOP10 IP ==="
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10
echo ""

echo "=== 6. 当前带宽使用情况 ==="
ifstat -t 1 1
如果发现系统负载异常高 + SYN_RECV 数量异常 + 某IP请求次数异常多这三个条件同时满足,基本可以断定——服务器被攻击了。
六、发现被攻击后,应该怎么做?
确认服务器被攻击后,建议按以下步骤快速响应:
立即开启高防防护:如果已经使用了高防CDN或高防IP,确认防护是否生效,节点是否正常转发流量。
启用CC防护策略:在WAF或安全加速产品中开启CC智能防护引擎、精准访问控制、人机验证等策略。
封禁恶意IP:通过IP黑名单或云防火墙,临时封禁明显异常的IP段(如来自特定地区、数据中心IP等)。
联系安全厂商:如果自身防护能力不足,及时联系云盾等安全厂商的技术支持,寻求7x24小时的应急响应帮助。
保留日志证据:保留攻击期间的访问日志、系统日志、流量监控数据,用于事后分析和溯源。
七、结语
服务器被攻击不是灾难,灾难是——攻击来了你还不知道。 掌握本文介绍的判断方法,你就能在攻击发生的几分钟内快速定位问题,及时启动防护策略,将损失降到最低。
总结一下核心思路:
看网络:带宽是否占满?丢包是否严重?连接数是否异常?
看系统:CPU是否跑满?内存是否耗尽?连接数是否爆炸?
看应用:请求量是否激增?数据库是否变慢?5xx错误是否增多?
三者结合,攻击者无所遁形。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐