单站点占满带宽 定位封禁恶意访问
现象描述
服务器带宽异常通常表现为入向或出向流量持续飙高,整体带宽被单一站点或少数请求耗尽,导致其他业务无法正常访问。在共享IP或多站点托管环境下,这种异常往往源于某个网站被恶意刷流量、CC攻击或存在非法内容下载。
可能原因
- 网页被放置了大型文件或遭受盗链,产生高频下载请求。
- 站点遭遇CC攻击,大量代理IP发起并发请求。
- 应用程序存在逻辑漏洞,被攻击者循环调用消耗带宽的接口。
- 网站页面引用了超大图片、视频等静态资源,且无缓存策略。
定位异常站点的方法
1. 使用流量监控工具
通过服务器自带的带宽监控(如iftop、nethogs)或IDC提供的流量分析面板,查看当前占用带宽的IP、连接数及进程。针对Web服务器,可使用nginx自带的访问日志按请求字节数排序,找出流量消耗最大的域名和URI。
2. 按连接数筛选
执行netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr,快速定位产生大量连接的来源IP。若大量IP来源分散,则更可能为CC攻击或恶意爬虫。
3. 检查Web访问日志
对Apache或Nginx访问日志进行分析:awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20可查看请求次数最多的IP;结合响应字节数awk '{sum[$1]+=$10}END{for(i in sum) print sum[i],i}' access.log | sort -rn | head找到消耗流量最大的客户端。
4. 区分站点与虚拟主机
若服务器配置了多个站点(虚拟主机),可在Nginx/Apache配置中为每个站点单独开启访问日志并按天切割。通过日志大小对比,或借助日志分析工具(如GoAccess、AWStats)生成各站点流量报表,快速锁定异常站点。
封禁恶意访问的操作步骤
1. 临时封禁IP
若判断为单个或少量IP攻击,可立即在防火墙层面封禁。以iptables为例:iptables -A INPUT -s 1.2.3.4 -j DROP;使用fail2ban可自动完成封禁操作。
2. Web层屏蔽
在Nginx中可通过deny指令屏蔽指定IP或网段;Apache则使用Require all denied配合Require not ip。对高频恶意UA,可通过if条件或map模块进行拦截。
3. 启用Web应用防火墙
若攻击变种频繁,建议部署WAF产品(如ModSecurity、云WAF),通过规则拦截恶意请求,识别并阻断攻击特征。同时可设置带宽或请求频率阈值,达到峰值自动触发防护策略。
4. 限制连接数
在Nginx中配置limit_conn_zone和limit_req_zone,限制单IP连接数和请求速率。Apache对应使用mod_evasive模块。注意封禁前需确认访问来源是否包含正常业务IP,避免误伤。
5. 设置CDN或高防
若攻击流量超过机房防御阈值,可先将域名接入CDN隐藏源站IP,或使用高防IP服务,将带宽压力转移到清洗节点。
长期防护建议
- 为各站点配置独立带宽限制(如Nginx的
limit_rate),避免单站影响母机。 - 定期分析访问日志,建立正常访问基线,异常波动及时预警。
- 对图片和静态文件启用CDN缓存,降低源站带宽占用。
- 关闭不必要的文件上传功能,限制下载文件大小,防止恶意拖拽。
结语
定位并封禁恶意访问的核心在于“快速发现单站流量异常”和“精准阻断攻击源”。通过流量监控、日志分析、程序层面限流,结合防火墙和WAF策略,可以有效恢复服务器带宽,保障业务稳定运行。建议日常运维中做好日志保存和备份,以便事后溯源取证。