·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

服务器防CC攻击实战应用:精准控制每个IP请求:Nginx与OpenResty的攻防实战

11352 0
发表于 2025-8-24 09:47:13 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
没有防线,善意流量会淹没你;盲目限流,真实用户将离你而去——互联网服务的精密平衡术


每当遇到服务器突发高负载、恶意爬虫疯狂抓取、或竞争者的CC攻击,精准控制每个IP的请求就成了守护服务的最后防线。
最近研究了一下nginx和OpenResty的限速能力,本文把涉及到的一些技术原理和配置要点记录下来。
一、Nginx原生防控:第一道防火墙


核心模块:

    • limit_req_zone:请求速率限制(漏桶算法)• limit_conn_zone:并发连接控制

配置示例:
# 全局配置 (http块)
limit_req_zone$binary_remote_addr zone=ip_req:10m rate=30r/s;
limit_conn_zone$binary_remote_addr zone=ip_conn:5m;

server {
location / {
    # 限速:每秒30请求+10突发(nodelay立即处理突发)
    limit_req zone=ip_req burst=10 nodelay;
   
    # 每个IP最多20并发连接
    limit_conn ip_conn 20;
   
    # 封禁超限IP时返回429而非503
    error_page429 = @ratelimit;
  }

location@ratelimit {
    add_header Retry-After 10;
    return429'{"error": "Too Many Requests"}';
  }
}
关键参数计算:

    • 共享内存大小公式:1MB ≈ 16,000个IP状态• 突发值建议:burst = 正常峰值流量 × 1.5
二、OpenResty动态控制:智能防护体系


当需要差异化策略、行为分析、动态封禁时,原生Nginx力不从心。基于Lua的OpenResty提供了无限可能:
1. 官方武器库:lua-resty-limit-traffic

access_by_lua_block {
  local lim = require"resty.limit.req".new("ip_req_store", 100, 50)

-- 差异化限速:VIP用户放宽限制
local rate = is_vip(ip) and200or100
  lim:set_rate(rate)

if lim:incoming(ip) == "rejected"then
    ngx.header["Retry-After"] = 5
    return ngx.exit(429)
end
}2. 行为分析引擎:识别恶意模式

function detect_abnormal(ip)
  local dict = ngx.shared.ip_behavior
local key = ip..":pattern"

-- 统计10秒内请求路径熵值
local entropy = calculate_path_entropy(ip)

-- 熵值异常升高判定为扫描行为
if entropy > THRESHOLD then
    dict:set(key, "scanner", 600)
    returntrue
end
end3. 分布式封禁系统(Redis版)

local redis = require "resty.redis"
local red = redis:new()

-- 自动拉黑高频攻击IP
if req_count(ip) > 1000 then
  red:sadd("global:blacklist", ip)
  red:expire(ip, 3600)
end

-- 全局黑名单校验
if red:sismember("global:blacklist", ip) then
  ngx.exit(403)
end三、多层级防御架构

           ┌──────────────┐
           │ 前端WAF防护    │  (Cloudflare/AWS WAF)
           └──────┬───────┘
                  │
           ┌──────▼──────┐  动态规则
           │ OpenResty   ├─────────────┐
           │ 深度行为分析 │             │
           └──────┬──────┘             │
                  │                    ▼
           ┌──────▼──────┐      ┌──────────────┐
           │ Nginx       │      │  Redis集群    │
           │ 基础限流     │◀─────▶  分布式状态同步  │
           └──────┬──────┘      └──────────────┘
                  │
           ┌──────▼──────┐
           │ Fail2ban     │ (日志分析自动封IP)
           └─────────────┘四、实战优化策略


    1. 动静分离限流
if is_static_file(uri) then
  rate = 1000  -- 静态资源放宽
elseif uri == "/api/login" then
  rate = 2     -- 登录接口严格限制
end

    2. 区域性策略定制
local geo = require "resty.maxminddb"
local is_cn = geo.lookup(ip).country == "CN"

-- 国内IP放宽限制(防海外攻击)
lim:set_rate(is_cn and 200 or 50)

    3. AI动态权重调整
# Python模型预测IP风险值(OpenResty通过gRPC调用)
risk_score = model.predict(ip, request_pattern)
lua_rate = 1000 * (1 - risk_score)  # 高风险IP自动降权结语:精度与效率的平衡艺术


流量控制如同走钢丝:过严则伤及真实用户,过松则服务崩溃。OpenResty提供了前所未有的灵活性,但需记住:

    1. 始终监控效果:可以使用Prometheus+Granfa实时观察限流影响2. 渐进式实施:先观察基线流量,再设置阈值3. 保留逃生通道:动态配置中心支持秒级回滚


【附录:配置要点速查表】
场景Nginx原生方案OpenResty增强方案
基础速率限制limit_req_zonelua-resty-limit-traffic
请求特征分析Lua实时计算请求熵值
分布式状态同步Redis共享集群状态
动态封禁手动Fail2ban自动实时黑名单
慢速攻击防护client_body_timeout毫秒级请求超时控制
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

最新热评 加载中...
AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:216.73.216.122, 116.211.128.99,GMT+8, 2025-9-13 23:18 , Processed in 0.249786 second(s), 75 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表