如何有效防御Apache服务器上的Slowloris慢速攻击?

来源:图像处理网作者:香港程序员头衔:程序员
导读:本期聚焦于香港程序员创作的《如何有效防御Apache服务器上的Slowloris慢速攻击?》,敬请观看详情。Slowloris慢速攻击通过极低速率维持大量半开HTTP连接,长期占用Apache工作进程使服务不可用。传统防火墙难以识别这类合法外观的请求。防御核心在于限制单连接资源占用时长与并发数。启用Apache的mod_reqtimeout模块可设定请求头与正文接收超时,丢弃异常缓慢连接。配合mod_status监控并发状态,及时排查异常。亦可引入反向代理或负载均衡层做连接速率管控,从架构上缓解应用服务器压力。

Slowloris是一种针对Apache等线程或进程模型Web服务器的应用层拒绝服务攻击方式。与发动海量流量的洪水攻击不同,Slowloris仅使用极少的带宽,通过极慢的速度向服务器发送HTTP请求,并持续保持连接不关闭,从而耗尽服务器可用的连接槽或工作进程。理解其原理是构建防御体系的第一步。

如何有效防御Apache服务器上的Slowloris慢速攻击?

慢速攻击的底层原理与Apache的脆弱点

Apache在默认使用prefork或worker多进程/多线程模型时,每一个客户端连接都会占用一个独立的子进程或线程。Slowloris攻击工具在建立TCP连接后,以极低频率(例如每隔很久才发送几个字节)发送不完整的HTTP请求头,使Apache认为请求尚未发送完毕,于是为该连接保留进程资源并持续等待。由于Apache默认对请求完成时间没有严格限制,这些半开连接可以维持数小时。

当此类连接数量超过Apache配置的并发上限(如MaxClients或MaxRequestWorkers)时,服务器便无法接受新的正常连接,形成拒绝服务。因为这种流量在单个连接上看似正常的TCP和HTTP交互,传统基于流量阈值的网络防火墙很难将其与真实用户区分开。只有从应用层协议完整性和时间维度进行约束,才能准确识别并切断恶意连接。

除了经典的Slowloris头部慢发,还存在慢速POST正文发送、慢速读取响应等变体。它们共同特征是“以时间换资源”,用极少带宽拖死服务端连接池。因此防御设计必须围绕超时控制、并发隔离和前置过滤三个方向展开,而不是简单扩容带宽。

利用Apache内置模块实施超时与并发限制

Apache自带mod_reqtimeout模块,专门用于限制请求头与请求正文的接收时间。通过设定最小数据到达速率和整体超时,可以强制断开那些故意放慢速度的连接。在配置文件中加载该模块后,可使用RequestReadTimeout指令定义规则,例如要求请求头在20秒内至少按每秒100字节的速度到达,否则断开。

示例配置如下,展示了如何在Apache的虚拟主机或全局配置中启用请求超时防护:

# 启用mod_reqtimeout后,在配置中加入
<IfModule mod_reqtimeout.c>
  RequestReadTimeout header=20-40,minrate=100
  RequestReadTimeout body=30,minrate=200
</IfModule>

上述规则中,header=20-40表示请求头最迟40秒收完,若前20秒速率低于100字节每秒则断开;body则限制正文接收。这种细粒度时间约束让Slowloris难以维持长期占用。另外,使用mod_evasive这类第三方模块也能基于单IP连接数和请求频率进行临时封禁,作为补充手段。

除了超时,还应合理设置KeepAliveTimeout与MaxKeepAliveRequests,避免长连接被滥用。将KeepAlive关闭或设为较短时间(如5秒),可减少空闲连接停留。同时注意调整MaxRequestWorkers,使其与系统资源匹配,并结合mod_status页面监控当前连接状态,发现大量处于“读请求”状态的连接即可判定遭受慢速攻击。

架构层防御:反向代理与负载均衡的缓冲作用

单纯依赖Apache自身限制仍可能在大并发慢速攻击下性能受损,更稳健的方案是在Apache前增加反向代理层(如Nginx、HAProxy)。这些代理默认采用异步事件模型,能以极低资源维持大量连接,并将完整请求转发给后端Apache,从而屏蔽慢速特性。即使攻击者慢发,代理层也可先收完请求再一次性交给Apache处理。

以Nginx作为前端为例,其client_body_timeout和client_header_timeout能快速丢弃慢速连接,且单进程可支撑数万并发。配置片段如下:

server {
    listen 80;
    client_header_timeout 10s;
    client_body_timeout 10s;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
    }
}

在该结构中,Nginx承担了连接缓冲与超时清理职责,后端Apache仅处理已完整的请求,极大降低了被Slowloris拖垮的风险。若配合云厂商的WAF或DDoS防护产品,还能在边缘节点过滤异常低密度流量。从系统架构看,将“慢连接”消化在轻量代理层,是相比调优Apache更根本的解决思路。

企业环境中还可借助iptables或专业硬件防火墙做单IP并发数限制,例如限制每个源IP最多80个连接,迫使攻击者使用更多IP从而增加成本。多种手段叠加,才能构建面对Slowloris这类低速率攻击的有效防线。

SlowlorisApache慢速攻击防御修改时间:2026-08-17 20:06:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。