阿里云服务器带宽跑满排查是通过云监控和服务器内部网络工具定位占用公网带宽的进程、连接或攻破流量,并采取封禁、限速、扩容或接入CDN等方式恢复业务的过程。
在控制台确认带宽使用方向与时间点
登录阿里云控制台,进入云服务器ECS实例列表,点击目标实例,在“监控”页签中选择“公网带宽”监控指标,将时间范围切换为“1小时”或“6小时”,查看出方向和入方向的带宽使用率曲线,如果出方向持续接近实例带宽上限,说明服务器正在向外部大量发送数据,常见于大文件下载、接口返回大量数据、视频流、数据库被拖取或恶意程序上传,如果入方向带宽跑满,通常为外部请求量过大、cc攻破、端口扫描或大文件上传,记录带宽跑满的起始时间、持续时间、峰值和方向,后续与日志和连接状态进行对照。
安装网络监控工具
多数Linux发行版默认未安装流量分析工具,先执行以下命令安装:
CentOS/Anolis:
yum install -y epel-release && yum install -y iftop nethogs nload vnstat
Ubuntu/Debian:
apt update && apt install -y iftop nethogs nload vnstat
安装完成后,使用以下工具逐层定位流量。
使用nload查看网卡实时速率
执行 nload -u M,屏幕上方为入方向流量,下方为出方向流量,观察当前速率是否等于或接近实例带宽上限,如果出方向速率长时间维持在带宽最大值,而正常业务并不会产生如此大的出流量,需要进一步按进程和连接排查,如果入方向速率占满,先检查是否被攻破或存在异常请求。
使用iftop查看连接级流量
执行 iftop -n -i eth0,若网卡名称不是eth0,先使用 ip a 确认,界面会列出本机与远程IP之间的实时流量速率,右侧数字表示最近2秒、10秒、40秒的平均速率,按 Shift+S 切换源端口显示,按 Shift+D 切换目标端口显示,按 P 暂停刷新,重点记录流量最大的远程IP和端口,如果是出方向跑满,通常可以看到某个远程IP持续大量接收数据;如果是入方向跑满,会看到大量外部IP向本机某端口发送请求。
使用nethogs按进程定位
执行 nethogs eth0,直接显示出站和入站流量最大的进程名及PID,若发现 nginx、httpd、java、php-fpm 等Web相关进程占用高,进入对应应用日志排查;若发现 sshd、rsync、scp 等进程异常高,检查是否存在未授权的文件传输;若发现未知名称进程,记录PID并进入异常进程排查流程。
按进程查看网络连接
执行 lsof -i -P -n | grep ESTABLISHED 查看所有已建立连接及对应进程,再执行 ss -tanp | grep ESTABLISHED 查看TCP连接,若某个进程关联大量外部IP同一端口连接,可能为对外服务被刷,使用 ls -l /proc/PID/exe 查看进程可执行文件路径,cat /proc/PID/cmdline 查看启动命令,systemctl status PID 或 crontab -l 确认是否自启动。
检查Web服务访问日志
若定位到Web服务带宽占用高,立即检查访问日志,Nginx默认日志路径为 /var/log/nginx/access.log,Apache为 /var/log/httpd/access_log,执行:
tail -n 1000 /var/log/nginx/access.log
分析请求频率最高的IP:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 20
分析请求频率最高的URL:
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 20
分析状态码分布:
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
若发现某个IP请求数远高于正常用户,或某个URL被反复下载,可初步判断为恶意刷取或爬虫,对异常IP直接封禁,对异常URL在源站或CDN层限制访问。
检查TCP连接状态与攻破特征
执行 ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn 查看连接状态统计,大量 SYN_RECV 提示可能遭受SYN Flood攻破;大量 TIME_WAIT 通常是短连接访问频繁,需优化内核参数或使用连接复用;大量 ESTABLISHED 且来自相同IP段,可能是cc攻破或扫描,执行 ss -tan | grep ':80' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -n 30 统计访问80端口最多的IP,对来源IP进行归属地查询,若来自异常地区或数据中心,直接封禁。
检查异常进程与生产程序
有些恶意程序会占用大量出带宽进行数据外传或参与攻破,执行 top -c 按CPU排序,ps aux --sort=-%cpu | head -n 20 查看高CPU进程,检查 /tmp、/dev/shm、/var/tmp 下是否有可执行文件,执行 ls -l /tmp /dev/shm /var/tmp 查看最近修改文件,使用 crontab -l、ls -l /etc/cron* 检查计划任务,是否存在陌生任务,对可疑进程执行 kill -9 PID 前先备份文件路径,避免影响系统。
封禁异常IP与限速
对确认的异常IP,可以使用云服务器安全组或系统防火墙封禁,安全组在控制台入方向和出方向添加拒绝规则,优先级高于允许规则,系统防火墙示例:
iptables -A INPUT -s 1.2.3.4 -j DROP
iptables -A OUTPUT -d 1.2.3.4 -j DROP
若异常IP数量较多,使用 ipset 批量管理:
ipset create blacklist hash:ip hashsize 4096
ipset add blacklist 1.2.3.4
iptables -A INPUT -m set --match-set blacklist src -j DROP
针对Web服务带宽占用,可在Nginx中配置限速:
limit_rate 200k;
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 5;
配置后执行 nginx -t && systemctl reload nginx 生效。
十一、接入CDN与OSS分流
若是正常业务但带宽不足,将图片、视频、安装包等静态文件迁移至阿里云OSS存储,并启用CDN加速,在OSS控制台创建Bucket,上传文件后开启公共读或使用签名URL,将源站中静态资源链接替换为CDN域名,CDN边缘节点会缓存内容,减少源站公网带宽消耗,同时配置CDN的带宽上限、IP访问频率限制和Referer防盗链,防止CDN流量被恶意盗刷。
十二、升级带宽或切换计费方式
如果排查后确认是正常业务流量增长导致带宽跑满,需要在控制台升级实例带宽,按固定带宽计费的实例,在“升降配”中选择更高带宽值,支付后立即生效,按使用流量计费的实例,虽然带宽上限可设置较高,但需评估流量费用,还可以在业务高峰期前使用弹性带宽或临时升级,降低长期成本。
十三、配置云监控告警
在阿里云控制台进入“云监控”,选择“报警规则”创建规则,产品选择“云服务器ECS”,监控项选择“公网带宽使用率”,统计周期1分钟,阈值设置为80%或90%,连续出现3次触发报警,通知方式可勾选短信、邮件、钉钉机器人、电话等,当带宽再次接近上限时,系统会主动通知,避免业务中断后才处理。
十四、抓包分析隐藏流量
如果上述步骤仍未定位流量来源,使用 tcpdump 抓取数据包分析:
tcpdump -i eth0 -s 0 -w /tmp/traffic.pcap
抓取一段时间后停止,将文件下载到本地使用Wireshark打开,查看协议分布、源和目标IP、端口及数据量,重点检查UDP大包、DNS请求频繁、ICMP隧道等异常协议,抓包时注意磁盘空间,可限制抓包大小:
tcpdump -i eth0 -s 0 -C 100M -W 5 -w /tmp/traffic.pcap