遇到服务器卡顿或无法访问时,先别急着扩容,第一时间查看带宽使用率和系统资源占用。如果带宽瞬间打满且来源 IP 分散,大概率是遭遇了 DDoS 攻击而非正常业务峰值。但需注意,单凭带宽高不能直接定性,需结合业务场景综合判断,避免误封正常业务流量。
先说结论:区分关键在于流量突发的可预测性与资源消耗的合理性,正常峰值通常伴随业务增长且 IP 分布符合用户规律,而攻击流量表现为无业务关联的瞬间激增和异常资源占用。
- 先判断:对比日常基线,看流量是否突发激增且无业务关联
- 优先做:开启防火墙限流或接入高防服务,优先保障核心业务存活
- 再验证:观察响应时间和错误率,确认攻击流量是否被清洗
准备工具与权限
以下命令大多需要 root 权限,请在命令前加 sudo 或切换至 root 用户。若系统未安装监控工具,可先执行安装:
# CentOS/RHEL
sudo yum install iftop -y
# Ubuntu/Debian
sudo apt-get install iftop -y核心命令实操
通过以下命令快速查看当前网络连接和带宽占用情况,帮助初步判断:
# 查看实时带宽占用和连接 IP(需要 root 权限)
sudo iftop -P
# 查看系统资源占用
top -c
# 查看网络连接数统计(推荐使用 ss 替代 netstat)
sudo ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn流量特征日志分析
对比 Web 服务器日志(如 Nginx access.log)是区分流量的关键。正常流量与攻击流量在日志中表现明显不同:
正常业务峰值日志特征:
192.168.1.5 - - [10/Nov/2023:10:00:01 +0800] "GET /product/123 HTTP/1.1" 200 1024 "-" "Mozilla/5.0..."特点:请求 URL 分散,User-Agent 正常,状态码多为 200,访问频率符合人类操作间隔。
DDoS 攻击流量日志特征:
10.0.0.1 - - [10/Nov/2023:10:00:01 +0800] "GET / HTTP/1.1" 200 1024 "-" "Mozilla/5.0..."
10.0.0.2 - - [10/Nov/2023:10:00:01 +0800] "GET / HTTP/1.1" 200 1024 "-" "Mozilla/5.0..."
10.0.0.3 - - [10/Nov/2023:10:00:01 +0800] "GET / HTTP/1.1" 200 1024 "-" "-"特点:同一秒内大量不同 IP 请求同一 URL,User-Agent 缺失或一致,存在大量非正常地域 IP。
防御配置示例
确认攻击后,可采取以下措施拦截异常流量:
1. 主机防火墙拦截(iptables):
# 拦截特定攻击 IP
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# 保存规则(CentOS)
sudo service iptables save2. 云安全组配置:
登录云厂商控制台,在安全组入方向添加规则,禁止异常 IP 段访问 80/443 端口,或开启云盾/DDoS 防护基础功能。
验证与常见坑
验证方法:采取防御措施后,观察服务器响应时间是否恢复到正常范围(如<200ms),网站是否能正常访问。检查日志中是否还有大量异常请求被拦截的记录。如果带宽使用率回落到日常水平,且 CPU 内存占用正常,说明防御措施生效。
常见坑:
- 误伤正常用户:过于严格的防火墙规则可能会拦截正常的大流量用户,比如爬虫或 API 调用者。建议先观察再封禁,或设置白名单。
- 忽视业务活动:在进行促销活动前,务必提前调整流量基线阈值,避免将正常活动流量误判为攻击。单凭带宽高就判断为攻击可能导致误封正常业务流量。
- 仅依赖单一指标:不要只看带宽,有些攻击流量不大但请求复杂,同样能拖垮服务器。需综合带宽、资源、日志多维度判断。