2012-02-24 72 views
1

我试图模拟一个缓慢的http读取攻击对我的本地主机上运行的Apache服务器。 但似乎是,服务器没有抱怨,只是等待客户端阅读。Http服务器 - 缓慢读取

这是我做的:

  1. 请求一个巨大的文件(比如说〜1MB)从HTTP服务器
  2. 从服务器读取的循环中,等待100秒的响应连续读取

由于文件很大并且客户端接收缓冲区很小,服务器必须以多个块发送文件。但是,在客户端,我在连续读取之间等待100秒。因此,服务器经常轮询客户端,并发现客户端的接收窗口大小为零,因为客户端尚未读取接收缓冲区。

但它看起来像服务器不打扰打破连接,它默默地继续轮询客户端。服务器在客户机窗口大小> 0时发送数据,并再次返回等待客户机。

我想知道是否有任何apache配置参数可以设置为在等待客户端读取数据之后从服务器端断开连接。

回答

1

也许这对你更有用(简单并节省你的时间):http://ha.ckers.org/slowloris/这是一个发送部分HTTP请求的Perl脚本,Apache服务器让连接保持打开状态(现在对新用户不可用)并且如果执行在Linux环境下(Linux不会限制硬件功能以外的线程),您可以有效地阻止所有打开的套接字,从而防止其他用户访问服务器。它使用最小的带宽,因为它不会将请求泛滥到服务器,它只是缓慢地将套接字作为人质。你可以在这里下载文件:http://ha.ckers.org/slowloris/slowloris.pl

为了防止这样的攻击(当然,减轻)在这里看到:https://serverfault.com/questions/32361/how-to-best-defend-against-a-slowloris-dos-attack-against-an-apache-web-server

您也可以使用负载平衡器或循环设置。

+0

谢谢@mesh。我看到了这次攻击,但我特别关注了我描述的攻击。让我知道你是否知道服务器配置选项来重置连接。 – sachin2182 2012-02-24 06:54:51

+0

@ sachin2182 - 不确定这是否适用于您的目的,http://httpd.apache.org/docs/2.0/mod/core.html#timeout在httpd.conf或.htaccess中放置'TimeOut xyz'其中xyz是在杀死连接之前最多要等待的秒数。如果您有快速连接,我建议大概10秒钟。 – ionFish 2012-02-24 07:01:36

+0

timeout指令用于客户端发送的请求。假设服务器在一段时间内没有收到客户端的请求(它期望的),那么如果我们想要中断连接,那么可以使用这个选项。 – sachin2182 2012-02-24 07:16:36

0

尝试slowhttptest测试您描述的缓慢读取攻击。 (它也可以用于测试头缓慢发送。)