我的服务器被DDoS了?从带宽监控图揪出异常流量
上周三凌晨3点,手机突然疯狂震动——来自UptimeRobot的告警短信堆满了通知栏。睡眼惺忪地打开监控面板,看到带宽使用曲线那个夸张的尖峰时,我瞬间清醒了:这绝对不是正常流量!今天就来分享如何像侦探一样,从带宽图中识别异常攻击行为。
正常流量 vs 攻击流量的波形差异
先看两张对比图(模拟数据):
# 正常日流量(平滑曲线)
08:00 12Mbps |-----
12:00 45Mbps |--------------
18:00 38Mbps |------------
23:00 8Mbps |---
# 攻击日流量(剧烈波动)
03:00 12Mbps |-----
03:05 892Mbps|################################
03:30 15Mbps |-----
正常流量就像心跳图,有规律的波峰波谷;而DDoS攻击往往表现为:瞬时陡增、持续高位、不符合业务周期。那次我的服务器在凌晨3点突然冲到平时10倍的带宽用量——这个时间点根本不会有用户活跃。
四个关键特征点
通过这次事件,我总结了攻击流量的识别特征:
- 斜率异常:正常流量变化斜率≤45°,攻击流量往往接近90°垂直上升
- 协议比例失衡:突然出现大量ICMP/UDP包(正常业务以TCP为主)
- 来源集中:TOP10 IP的流量占比超过80%
- 非常规端口:大量流量指向非常用端口(比如我的案例中出现123端口暴增)
实战排查工具链
当时我用了这套组合拳定位问题:
# 实时流量分析
iftop -nNP # 查看实时连接
nethogs eth0 # 按进程统计流量
# 历史数据分析
vnstat -h # 小时级流量统计
goaccess /var/log/nginx/access.log # 日志可视化
最终发现是来自某ASN的UDP反射放大攻击。这里有个血泪教训:我的Nginx之前没配置UDP端口限制,导致攻击者利用DNS查询进行流量放大。
防御措施三步走
根据这次经验,我完善了防御策略:
- 第一层:Cloudflare代理 + 防火墙UDP端口白名单
- 第二层:Nginx限速配置(如下代码)
- 第三层:服务器层面启用SYN Cookie和连接数限制
# Nginx限速配置示例
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
location / {
limit_req zone=api burst=20 nodelay;
limit_conn perip 10;
}
现在我的监控系统增加了智能基线告警——当流量偏离历史平均值3个标准差时立即触发通知。毕竟凌晨3点被吵醒的滋味,体验一次就够了!
你有遇到过类似情况吗?欢迎在评论区分享你的攻防故事~
楼主分析得很专业啊,我上次服务器被DDoS时也是凌晨被吵醒,带宽直接爆表 😅
学到了!平时都没注意过协议比例这点,以后排查问题又多一个角度
UDP反射放大攻击真的很常见,我们现在把所有不用的UDP端口都封了