您的位置: 新闻资讯 > 行业动态 > 正文

别让Slow HTTP DOS拖垮你的网络!这些预防方法你必须知道(图文)


来源:mozhe 2025-04-14

Slow HTTP DOS 是什么?


{"type":"load_by_key","key":"auto_image_0_0","image_type":"search"}
在了解 Slow HTTP DOS 之前,我们先来做个有趣的类比。想象你经营着一家热闹的餐馆,每天都有很多顾客来享受美食。正常情况下,顾客们进门点餐、用餐,吃完后结账离开,一切都有条不紊地进行着。
但突然有一天,来了一群不怀好意的人。他们一进门就占据了餐桌,却不点餐,或者点了餐也故意拖延时间,慢悠悠地做一些无关紧要的事情,就是不结束用餐。更过分的是,他们还不断地要求服务员做一些琐碎的小事,让服务员忙得不可开交,无法去服务其他正常的顾客。随着时间的推移,餐馆里的餐桌都被这些捣乱的人占满了,真正想用餐的顾客却进不来,你的生意就无法正常开展了。
在网络世界里,也存在类似的 “捣乱者”,这就是 Slow HTTP DOS 攻击。简单来说,Slow HTTP DOS 是一种应用层拒绝服务攻击(DoS,Denial of Service),它主要针对 HTTP 协议发起攻击 。攻击者通过精心构造并向目标服务器发送特制的 HTTP 请求,这些请求就像是餐馆里捣乱的顾客一样,故意给服务器 “找麻烦”。它们以极低的速度发送 HTTP 请求,并且尽量长时间地保持与服务器的连接不释放。
我们知道,服务器处理请求的能力是有限的,就像餐馆的餐桌数量和服务员的精力有限一样。当攻击者发送的这些恶意请求达到 Web Server 对于并发连接数的上限,并且恶意占用的连接一直不被释放时,服务器就无法接受新的正常请求了,就如同餐馆被捣乱的人占满,真正的顾客进不来一样,最终导致拒绝服务,使正常用户无法连接服务器,无法享受服务器提供的服务,比如无法正常访问网站、使用在线应用等。

Slow HTTP DOS 攻击原理详解

(一)利用 HTTP 协议特性


HTTP 协议就像是网络世界中大家都遵循的一套交流规则,它规定了客户端(比如我们使用的浏览器)和服务器之间如何进行交互。在正常的交互中,客户端发送一个完整的 HTTP 请求,服务器接收到后进行处理,然后返回响应。然而,攻击者却巧妙地利用了 HTTP 协议对请求完整性的依赖这一特性来发动攻击。
当我们发送一个 HTTP 请求时,它包含请求行、请求头和请求体等部分。在请求头中,有一些重要的字段,比如 Content - Length,它告诉服务器请求体的长度是多少;还有 Connection 字段,常见的值有 Close 和 Keep - Alive,Close 表示请求完成后就关闭连接,而 Keep - Alive 则表示保持连接,以便后续可以复用这个连接进行其他请求,这样可以减少建立新连接的开销 。
攻击者正是利用这些规则,以一种合法但恶意的方式来操作。比如,他们会不发送完整的请求头,在 HTTP 协议中,请求头是以两个连续的 “\r\n”(换行符)来标识结束的,如果攻击者一直不发送这两个换行符,服务器就会认为请求头还没有接收完,从而持续等待。又比如,攻击者会声明一个超大的 Content - Length,告诉服务器将要发送一个非常大的数据体,但实际上却以极其缓慢的速度发送数据,可能每 10 秒甚至更长时间才发送 1 个字节。这样一来,服务器为了接收这个声明中的大文件,就会一直保持连接,分配资源来等待数据的到来,而这些资源(如连接数、内存等)是有限的,随着越来越多这样的恶意请求到来,服务器的资源就会被逐渐耗尽 。

(二)三大攻击类型剖析

  1. Slow Headers(Slowloris)攻击
    • 攻击方式:这种攻击方式就像是一个人在点菜时,一直说自己要点菜,但就是说不清楚,一直不停地说一些无关紧要的话,让服务员一直等着。攻击者通过向目标服务器持续发送未完成的 HTTP 头部来占用服务器的连接池。比如,正常的 HTTP 头部应该类似这样:

 
GET /index.html HTTP/1.1
Host: example.com
User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Connection: Keep - Alive
注意最后有两个连续的换行符 “\r\n\r\n”,表示头部结束。而攻击者发送的 HTTP 头部可能是这样:

 
GET /index.html HTTP/1.1
Host: example.com
User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Connection: Keep - Alive
X - a: b\r\n
这里没有 “\r\n\r\n” 结尾,并且每隔一段时间(比如几分钟)就再发送一个类似 “X - a: b\r\n” 这样的键值对数据。
  • 利用机制:Web 服务器在处理请求时,必须接收完整的头部才能开始处理请求。由于攻击者发送的头部不完整,服务器就会一直等待,这些未完成的连接会占用服务器的连接资源,当连接池被占满时,新的正常请求就无法建立连接,从而达到拒绝服务的目的。比如,一个服务器的连接池最大可以容纳 1000 个连接,攻击者通过大量发送这种未完成头部的请求,占满了这 1000 个连接,那么其他正常用户想要访问服务器时,就会因为无法建立连接而无法访问。
  1. Slow Body(HTTP POST 攻击)
    • 攻击方式:想象一下,你去餐厅吃饭,点了一份餐,告诉服务员你要加很多很多的配料,让服务员准备好接收这些配料,但你却一点点地给服务员,每次只给一点点,让服务员一直等着。在这种攻击中,攻击者通过声明一个超大的 Content - Length,比如设置为 100MB 甚至更大,然后以极慢的速度发送数据体。例如,使用工具发送一个 HTTP POST 请求,设置 Content - Length 为 100000000(表示 100MB 左右),然后每 10 秒才发送 1 个字节的数据。
    • 占用资源原理:服务器在接收到声明了大 Content - Length 的 POST 请求后,会为这个请求分配内存缓冲区来接收数据。由于攻击者发送数据的速度极慢,这个连接会一直保持存活,并且占用着服务器分配的内存资源。随着这种恶意请求的增多,服务器的内存会被逐渐耗尽,无法再处理新的请求,最终导致拒绝服务。比如,服务器总共只有 1GB 的内存可用于处理请求,每个这种恶意请求占用 10MB 内存,当有 100 个这样的恶意请求时,服务器内存就被占满,无法再为新的正常请求分配内存。
  1. Slow Read 攻击
    • 攻击方式:就好比你在餐厅用餐,服务员给你上菜后,你一直慢慢地吃,吃一口就停很长时间,让服务员不能及时收拾桌子给其他顾客使用。攻击者通过调整 TCP 窗口大小来实现攻击。在正常的 TCP 通信中,客户端和服务器会协商一个窗口大小,这个窗口大小表示客户端能够接收的数据量。攻击者会将 TCP 窗口大小设置得非常小,比如设置为 512 字节,然后在接收服务器发送的数据时,以极低的速率接收。
    • 导致响应数据滞留原理:当客户端请求一个大文件时,服务器会根据 TCP 协议将文件拆分成多个小包发送。由于客户端设置的窗口大小很小,服务器每次只能发送少量的数据,并且客户端接收速度极慢,这就导致大量的响应数据滞留在服务器的内存中。比如,客户端请求一个 10MB 的文件,服务器将其拆分成多个 512 字节的小包发送,客户端每次接收完一个小包后,很久才通知服务器可以接收下一个小包,这样服务器就需要不断地缓存未被接收的小包,占用大量内存,最终导致服务器资源耗尽,无法正常服务。

Slow HTTP DOS 攻击的危害


Slow HTTP DOS 攻击带来的危害不容小觑,它就像隐藏在网络暗处的 “定时炸弹”,随时可能给网站和企业带来沉重打击。下面,我们通过一些真实的案例来感受一下它的破坏力。
某知名电商平台,在一次重要的促销活动期间,遭遇了 Slow HTTP DOS 攻击。攻击者精心策划,利用 Slow HTTP DOS 攻击的特性,以极低的速度发送大量 HTTP 请求,逐渐耗尽了服务器的连接资源。随着攻击的持续,服务器的负载越来越高,正常的交易请求无法得到处理。用户在下单时,页面长时间显示加载中,或者直接提示无法连接服务器。原本热闹的促销活动瞬间陷入僵局,大量潜在的交易就这样流失了。这次攻击不仅导致该电商平台在活动期间的直接经济损失高达数百万元,还严重损害了其在用户心中的形象。许多用户对平台的稳定性产生了质疑,一些老用户甚至因此转向了其他竞争对手的平台,导致用户流失率大幅上升 。
再比如,一家提供在线服务的知名网站,在遭受 Slow HTTP DOS 攻击后,服务中断了整整一天。这家网站主要为用户提供专业的信息查询和文件下载服务,用户群体广泛,包括企业用户和个人用户。攻击发生后,用户无法正常访问网站,无法获取所需的信息和文件,这给用户的工作和生活带来了极大的不便。对于企业用户来说,可能因为无法及时获取关键信息而影响业务决策,导致项目进度延误;对于个人用户来说,也会对网站的服务产生不满。网站的运营方为了恢复服务,紧急调动大量技术人员进行排查和修复,投入了大量的人力和物力成本。然而,即使服务最终恢复了正常,网站的声誉也已经受到了严重的损害,用户对其信任度降低,未来的业务发展也面临着巨大的挑战 。
从这些案例中,我们可以清晰地看到 Slow HTTP DOS 攻击带来的一系列严重后果:
  • 网站无法访问与业务中断:这是最直接的影响,服务器资源被恶意请求耗尽,正常用户的请求无法得到响应,网站就如同陷入了 “瘫痪” 状态,无法提供正常的服务。无论是电商平台的交易、在线服务网站的功能使用,还是其他各类网站的业务,都会因此被迫中断。
  • 用户流失:当用户在访问网站时频繁遇到无法连接、加载缓慢等问题,他们很可能会选择离开,转而寻找其他替代的平台或服务。一旦用户形成了这种负面体验,就很难再重新回来,这对于网站的长期发展来说是非常不利的,会直接导致用户数量的减少和用户群体的流失。
  • 经济损失:一方面,对于电商平台等以在线交易为主要业务的网站,攻击导致交易无法进行,直接造成了销售额的损失;另一方面,为了应对攻击,恢复服务,企业需要投入大量的人力、物力和财力进行应急处理和系统修复,这无疑增加了企业的运营成本。
  • 损害企业声誉:网站的不稳定和服务中断会让用户对企业的能力和可靠性产生怀疑,从而降低企业在市场中的声誉和形象。在竞争激烈的互联网市场中,良好的声誉是企业立足的根本,一旦声誉受损,企业需要花费大量的时间和精力去重新赢得用户的信任,这对企业的未来发展将产生深远的负面影响。

如何预防 Slow HTTP DOS 攻击?


面对 Slow HTTP DOS 攻击的威胁,我们不能坐以待毙,需要采取一系列有效的预防措施来保护我们的服务器和网站。下面将从服务器配置优化、流量监控与异常检测以及 Web 应用防火墙(WAF)的应用这三个方面来详细介绍预防方法。

(一)服务器配置优化

  1. 设置超时时间
不同的服务器在设置超时时间时有着各自的方法。以 Apache 服务器为例,我们可以在其配置文件 httpd.conf 中进行相关设置。比如,使用 Timeout 指令来设置总请求超时时间,将其设置为一个合适的值,如 30 秒,代码如下:

 
Timeout 30
这就意味着如果一个请求在 30 秒内没有完成,Apache 服务器就会关闭这个连接,从而避免因为长时间等待恶意请求而占用资源 。
在 Nginx 服务器中,设置超时时间更为细致。我们可以通过设置 client_header_timeout 来指定等待客户端发送一个请求头的超时时间,以及使用 client_body_timeout 来设置请求体的读超时时间。例如,在 Nginx 的配置文件 nginx.conf 中添加如下配置:

 
http {
client_header_timeout 10s;
client_body_timeout 10s;
# 其他配置项
}
这样一来,当客户端在 10 秒内没有发送完整的请求头或者请求体时,Nginx 就会返回 HTTP 状态码 408(“Request timed out”),及时释放连接资源,防止被恶意占用 。
对于 Tomcat 服务器,我们可以在其 conf 目录下的 server.xml 文件中进行配置。通过修改 Connector 元素的 connectionTimeout 属性来设置连接超时时间。比如,将其设置为 20000 毫秒(即 20 秒),配置如下:

 
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
这表示如果客户端在 20 秒内没有成功建立连接,Tomcat 将放弃该连接尝试,有效减少了被攻击的风险 。
2. 限制连接数
以 Nginx 为例,我们可以使用 limit_conn_zone 和 limit_conn 模块来限制单个 IP 的并发连接数。首先,在 http 块中使用 limit_conn_zone 指令定义一个会话块,用于记录会话状态信息。例如:

 
http {
limit_conn_zone $binary_remote_addr zone=perip:10m;
# 其他配置项
}
这里的 $binary_remote_addr 表示请求客户端的 IP 地址,作为会话请求限制的 key,zone=perip:10m 表示会话块叫做 perip,内存容量为 10M 。
然后,在需要限制连接数的 server 或 location 块中使用 limit_conn 指令来设置最大连接数。比如,在 server 块中添加如下配置:

 
server {
listen 80;
server_name example.com;
limit_conn perip 10;
# 其他配置项
}
这就意味着每个 IP 地址最多只能同时建立 10 个连接到该服务器,当超过这个数量限制后,对于后续请求默认返回 503 response code,从而有效防止攻击者建立大量半开连接来耗尽服务器资源 。

(二)流量监控与异常检测

  1. 部署监控工具
Prometheus 和 Grafana 是非常强大的监控工具组合。Prometheus 是一个开源的实时监控系统,它通过 HTTP 协议从配置的目标拉取指标数据,并提供了一个高性能的时间序列数据库和强大的查询语言 PromQL 。我们可以使用它来实时监控服务器的连接数、请求速率等关键指标。例如,通过配置 Prometheus 的 job 来监控 Nginx 服务器,在 prometheus.yml 文件中添加如下配置:

 
scrape_configs:
- job_name: 'nginx'
static_configs:
- targets: ['nginx-server-ip:80']
这样 Prometheus 就会定期从指定的 Nginx 服务器 IP 地址的 80 端口拉取监控指标数据 。
Grafana 则是一个开源的数据可视化平台,它可以与 Prometheus 集成,将 Prometheus 采集到的数据以直观的图表和仪表盘形式展示出来。我们可以在 Grafana 中创建各种可视化面板,如折线图展示服务器连接数随时间的变化趋势,柱状图显示不同时间段的请求速率等,让我们能够更清晰地了解服务器的运行状态 。
2. 建立异常检测机制
我们需要为服务器的各项指标设定正常的流量阈值。比如,根据服务器的性能和以往的业务数据,设定服务器的正常并发连接数阈值为 500,请求速率阈值为每秒 1000 次。然后,通过监控工具(如 Prometheus 结合 Alertmanager)的规则配置,当连接数、请求速率等指标超出这些阈值时,自动触发警报。
同时,我们还可以编写自动化脚本,利用防火墙(如 iptables)的功能,当检测到某个 IP 的连接数或请求行为异常时,自动将其封禁。例如,使用 iptables 的规则来封禁 IP:

 
iptables -A INPUT -s 192.168.1.100 -j DROP
这条命令会将 IP 地址为 192.168.1.100 的所有连接请求都丢弃,从而阻止来自该异常 IP 的攻击 。

(三)Web 应用防火墙(WAF)的应用


Web 应用防火墙(WAF)就像是网站的 “安全卫士”,它能够识别并拦截异常的 HTTP 请求。其工作原理主要是通过对 HTTP 请求进行深度检测,与预先设定的规则库进行匹配。比如,当 WAF 检测到一个 HTTP 请求的头部字段不完整,或者请求体发送速度极慢且声明了超大的 Content - Length 时,它就会根据规则判断这可能是一个 Slow HTTP DOS 攻击请求,并将其拦截 。
市面上有许多知名的 WAF 产品,阿里云 WAF 凭借其强大的防护能力和稳定的性能,为众多企业的网站保驾护航;腾讯云 WAF 也提供了全面的安全防护策略,能够有效地抵御各种类型的 Web 攻击,包括 Slow HTTP DOS 攻击 。
以阿里云 WAF 为例,我们在配置防御 Slow HTTP DOS 攻击的规则时,可以登录阿里云 WAF 控制台,在策略配置中找到针对 Slow HTTP 攻击的防护选项。在这里,我们可以设置连接超时时间、请求速率限制等参数。比如,将连接超时时间设置为 15 秒,即如果一个连接在 15 秒内没有完成正常的请求交互,阿里云 WAF 就会将其关闭;同时,设置单个 IP 的请求速率限制为每秒 20 次,当某个 IP 的请求速率超过这个限制时,WAF 会对后续请求进行拦截或限制,从而有效地防御 Slow HTTP DOS 攻击 。

总结与展望


在当今数字化时代,网络安全已成为我们生活和工作中不可或缺的重要组成部分,而 Slow HTTP DOS 攻击作为一种隐蔽且极具破坏力的网络威胁,时刻考验着我们的网络防御能力。通过本文的探讨,我们深入了解了 Slow HTTP DOS 攻击的本质,它就像网络世界中的 “慢性毒药”,利用 HTTP 协议的特性,以看似合法却恶意的方式,逐步耗尽服务器资源,导致网站无法访问,业务中断,给企业和用户带来巨大的损失 。
我们剖析了其三种主要攻击类型 ——Slow Headers、Slow Body 和 Slow Read 攻击,它们各自有着独特的攻击方式和危害机制,无论是通过发送不完整的请求头、声明超大 Content - Length 后缓慢发送数据体,还是调整 TCP 窗口大小使响应数据滞留,都能对服务器造成严重的影响 。面对这些威胁,我们也详细介绍了一系列行之有效的预防措施,从服务器配置优化,如合理设置超时时间和限制连接数,到部署流量监控与异常检测工具,实时掌握服务器运行状态,再到应用 Web 应用防火墙(WAF),为网站筑起一道坚固的安全防线 。
展望未来,随着网络技术的不断发展,网络攻击手段也将日益复杂多样,Slow HTTP DOS 攻击也可能会演变出更高级的形式。但我们有理由相信,网络安全领域也将不断创新和进步,新的防御技术和工具会不断涌现。人工智能和机器学习技术将在网络安全领域发挥更大的作用,它们能够实时分析海量的网络数据,自动识别异常行为,更精准地检测和防范 Slow HTTP DOS 攻击以及其他各种网络威胁 。
作为网络的使用者和建设者,我们每个人都应当重视网络安全。无论是个人网站的运营者,还是企业网络的管理者,都要时刻保持警惕,不断学习和更新网络安全知识,持续关注网络安全领域的最新动态,将所学的防御技术应用到实际中,共同维护网络世界的安全与稳定,让我们能够在安全的网络环境中畅享数字化带来的便利和机遇 。

关于墨者安全
墨者安全致力于安全防护、服务器高防、网络高防、ddos防护、cc防护、dns防护、防劫持、高防服务器、高防dns、网站防护等方面的服务,全网第一款指纹识别技术防火墙,自研的WAF指纹识别架构,提供任意CC和DDoS攻击防御。

热门文章

X

7x24 小时

免费技术支持

15625276999


-->