慢速攻击该怎么拦截?

wen 网络安全 9

本文目录导读:

慢速攻击该怎么拦截?

  1. 核心思路:缩短超时时间与限制连接资源
  2. 总结:标准防御配置(以 Nginx 为例)

慢速攻击(Slow Rate Attack,如 Slowloris、Slow HTTP POST、Slow Read 等)是一种利用 HTTP 协议设计缺陷的拒绝服务攻击,它不像传统 DDoS 那样发送大量流量,而是通过极慢的速度发送不完整的请求,占用服务器连接池,导致正常用户无法访问。

拦截慢速攻击需要结合反向代理、Web 服务器配置、专业防护设备以及网络层策略,以下是具体、可行的拦截方法:

核心思路:缩短超时时间与限制连接资源

优化 Web 服务器配置(最直接有效)

这是针对应用层(如 Nginx、Apache、IIS)的根治疗法。

  • 针对 Nginx:

    • client_body_timeout:设置读取客户端请求体的超时时间(建议 5-10 秒)。

    • client_header_timeout:读取客户端请求头的超时时间(建议 5-10 秒)。

    • keepalive_timeout:长连接保持时间(建议 15-30 秒)。

    • limit_conn:限制单个 IP 的并发连接数。

    • limit_req:限制单个 IP 的请求速率。

    • 配置示例:

      http {
          client_body_timeout 10s;
          client_header_timeout 10s;
          keepalive_timeout 15s;
          # 限制每个 IP 最多 10 个连接
          limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
          limit_conn conn_limit 10;
          # 限制每个 IP 每秒最多 5 个请求
          limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
          limit_req zone=req_limit burst=10 nodelay;
      }
  • 针对 Apache:

    • TimeOut:设置全局超时(建议 10-30 秒)。
    • KeepAliveTimeout:长连接超时(建议 5-15 秒)。
    • MaxRequestWorkers:限制最大并发请求数。
    • LimitRequestBody:限制请求体大小(对抗慢速 POST)。
    • 推荐模块:安装 mod_reqtimeout 模块。
      <IfModule reqtimeout_module>
          RequestReadTimeout header=10-20,minrate=500
          RequestReadTimeout body=10-20,minrate=500
      </IfModule>

      解释:10-20 秒后超时,且传输速率低于 500 字节/秒则断开。

  • 针对 IIS:

    • 在“请求筛选”中设置:maxAllowedContentLength长度上限)、maxUrl(URL 长度)、maxQueryString(查询字符串长度)。
    • 在“ASP.NET”或“HTTP 响应标头”中,调整 connectionTimeoutheaderWaitTimeout

部署反向代理与负载均衡器

在前端架设 Nginx、HAProxy、Traefik、Cloudflare 或 AWS ELB。

  • HAProxy 配置示例:
    # 限制 HTTP 请求头大小
    tune.http.maxhdr 50
    # 超时设置
    timeout http-request 10s
    timeout http-keep-alive 30s
    # 限制单个 IP 的连接数(每个后端)
    stick-table type ip size 100k expire 30s store conn_cur
    tcp-request content track-sc0 src
    tcp-request content reject if { src_conn_cur ge 10 }
  • 作用:反代作为“缓冲层”,可以丢弃不符合预期行为(如长时间不发送完整数据)的连接,保护后端真实服务器。

使用 Web 应用防火墙(WAF)

无论是云 WAF(AWS WAF、Cloudflare、阿里云 WAF)还是开源 WAF(ModSecurity),通常都内置了针对慢速攻击的规则。

  • 关键行为:WAF 检测并阻止那些长时间未完成请求头或请求体的会话。
  • 配置项:开启“HTTP 协议验证”、“请求速率限制”、“连接数限制”。

网络层与系统层优化

  • iptables 连接限制(Linux):
    # 限制每个 IP 对 80 端口的并发连接数为 50
    iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j REJECT --reject-with tcp-reset
  • 内核参数调优:加速半连接(SYN)回收和超时。
    sysctl -w net.ipv4.tcp_syn_retries=2   # 减少 SYN 重试次数
    sysctl -w net.ipv4.tcp_synack_retries=2
    sysctl -w net.ipv4.tcp_fin_timeout=10  # 缩短 TIME_WAIT
    sysctl -w net.ipv4.tcp_tw_reuse=1      # 允许重用 TIME_WAIT 连接
    sysctl -w net.ipv4.tcp_tw_recycle=0    # 不建议开启(NAT 环境有问题),建议关闭

专业 DDoS 防护服务

如果攻击规模较大(超过服务器带宽或并发能力),上述方法可能不足,此时应使用专业服务:

  • CDN + DDoS 防护:Cloudflare、Akamai、阿里云 DDoS 高防、腾讯云 DDoS 防护,它们在全球节点自动丢弃慢速攻击流量。
  • 流量清洗服务:机房或上游 ISP 提供的 Anti-DDoS 设备(如 Arbor、Radware)。

标准防御配置(以 Nginx 为例)

建议按以下顺序执行:

  1. 配置 Nginx 超时client_body_timeout 10s; client_header_timeout 10s;
  2. 启用 HTTP 请求速率限制:限制每 IP 每秒的请求数。
  3. 启用连接数限制:限制每 IP 的并发连接。
  4. 安装 ModSecurity + OWASP CRS:开启 slowloris 等相关规则。
  5. 配置内核参数:缩短 FIN_WAIT/TIME_WAIT 超时。
  6. 如果服务器满载:立即添加 Cloudflare 或其他 CDN/WAF 作为前端。

注意:配置超时和连接限制时,需结合业务正常情况(例如上传大文件需要较长时间)进行调优,如果误杀正常用户(如校园网、企业 VPN 后的用户),可以将限制放宽至 30s 或通过 IP 白名单豁免。

抱歉,评论功能暂时关闭!