云服务器怎么限流?Nginx和防火墙防CC攻击方案
服务器被CC攻击或异常流量打满,是运维常见的问题。CC攻击的特点是流量不一定大,但请求频率高,消耗CPU和连接数。机房防御对CC攻击效果有限,需要在服务器层面做限流。本文说明Nginx限速、连接数限制、防火墙规则三种限流方法。
一、限流的目标
限流的目标是保障正常用户访问,同时拦截恶意请求。具体目标包括。
第一是限制单IP请求频率。正常用户每秒请求几次,恶意请求可能每秒几十次。限制单IP的请求频率,可以拦截大部分CC攻击。
第二是限制并发连接数。正常用户同时打开几个连接,恶意请求可能打开几百个连接。限制单IP的并发连接数,可以防止连接数耗尽。
第三是限制带宽。恶意请求可能下载大文件,占满带宽。限制单IP的下载速度,可以保障其他用户的带宽。
第四是限制总连接数。服务器的连接数有上限,如果被恶意请求占满,正常用户无法连接。限制总连接数,保障服务可用。
二、Nginx限速配置
Nginx提供limit_req和limit_conn两个模块,分别限制请求频率和并发连接数。
限制请求频率:在http块中定义限流区,在server或location块中应用。配置示例:
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
location / {
limit_req zone=req_limit burst=20 nodelay;
}
}
}
配置说明:rate=10r/s表示每个IP每秒允许10个请求,burst=20表示允许20个请求排队,nodelay表示超过速率的请求立即返回503。10m表示限流区占10MB内存,可以记录约16万个IP。
限制并发连接数:类似配置,用limit_conn_zone和limit_conn。配置示例:
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
location / {
limit_conn conn_limit 20;
}
}
}
配置说明:limit_conn conn_limit 20表示每个IP最多20个并发连接。超过的连接会被拒绝。
需要查看各机房的防御规格和实时价格,可以访问厦门电信云服务器产品页结合账号情况查看,该机房提供100G防御和封海外封UDP特性。
三、Nginx限速配置
Nginx提供limit_rate指令,限制单个连接的下载速度。配置示例:
location /download/ {
limit_rate 500k;
}
配置说明:limit_rate 500k表示单个连接下载速度限制为500KB/s。如果同时有10个连接,总带宽是5MB/s。可以根据业务需求调整。
对于下载站、视频站,限速可以防止个别用户占满带宽。对于普通建站,限速需求不高,但可以作为防护手段。
四、防火墙限流规则
Linux的iptables或firewalld也可以做限流。
iptables限制单IP连接数:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT
配置说明:限制每个IP到80端口的并发连接数不超过50,超过的连接被拒绝。
iptables限制单IP请求频率:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
配置说明:每个IP每分钟最多100个请求,突发200个。超过的请求被丢弃。这种方式比Nginx限流更底层,但配置更复杂。
firewalld也可以用rich rule做限流,配置比iptables简单。对于大多数场景,Nginx限流已经足够,iptables作为补充。
五、防CC攻击的综合方案
单靠限流不足以完全防住CC攻击,建议综合使用多种手段。
第一是限流。用Nginx和iptables限制请求频率和连接数,拦截大部分恶意请求。
第二是验证码。对可疑请求弹出验证码,正常用户可以快速通过,自动化脚本无法通过。验证码在登录、注册、提交等敏感接口配置。
第三是IP黑名单。发现恶意IP后加入黑名单,后续请求直接拒绝。黑名单可以自动更新,根据请求特征动态添加。
第四是WAF。Web应用防火墙可以识别CC攻击特征,自动拦截。WAF可以自建(如ModSecurity)或使用云服务。
第五是CDN。CDN节点可以过滤部分恶意请求,减轻源站压力。CDN通常提供基础的CC防护功能。
第六是机房防御。如果攻击流量大,需要机房层面的清洗。厦门电信100G防御可以清洗流量攻击,但CC攻击需要在应用层处理。
六、限流配置对照
| 方法 | 限制对象 | 适用场景 | 配置难度 |
|---|---|---|---|
| Nginx limit_req | 请求频率 | API接口、登录接口 | 低 |
| Nginx limit_conn | 并发连接 | 下载站、视频站 | 低 |
| Nginx limit_rate | 下载速度 | 大文件下载 | 低 |
| iptables connlimit | 并发连接 | 全站防护 | 中 |
| iptables limit | 请求频率 | 全站防护 | 中 |
| 验证码 | 自动化请求 | 敏感接口 | 中 |
| WAF | 攻击特征 | 全站防护 | 高 |
七、限流的注意事项
第一是避免误杀。限流阈值设置太低,正常用户会被拦截。建议先用宽松阈值,观察一段时间后调整。限流日志要记录,便于分析。
第二是区分接口。不同接口的限流阈值不同。静态资源可以宽松,登录接口要严格。建议按接口配置不同的限流策略。
第三是白名单。搜索引擎爬虫、监控系统、合作伙伴的IP可以加入白名单,不限流。避免影响正常业务。
第四是告警。限流触发时告警,说明可能有攻击或异常。告警后及时分析,判断是攻击还是业务增长。
第五是结合日志分析。限流日志、访问日志结合分析,可以识别攻击特征,优化限流策略。发现新的攻击模式时,及时调整规则。关于安全加固的完整清单,可以参考云服务器安全加固一文中关于防火墙配置和日志审计的说明。
八、小结
云服务器限流是防CC攻击和异常流量的重要手段。Nginx的limit_req、limit_conn、limit_rate分别限制请求频率、并发连接、下载速度;iptables的connlimit和limit提供更底层的限流;验证码、IP黑名单、WAF、CDN是补充手段。建议综合使用多种方法,避免误杀正常用户,结合日志分析优化策略。厦门电信100G防御机房适合对防御有要求的业务,配合服务器层限流可以形成完整防护。