Apache安全挑战,在不阻止IP的情况下拒绝特定请求

时间:2014-01-23 19:11:18

标签: apache security webserver

我一直在尝试使用我们的服务器(apache 2.2,windows,php)解决过去两周的大问题。

使用我们系统的客户是联络中心公司。  他们有大约120个运营商,所有运营商都使用相同的IP连接到我们的网络服务器,即他们的传出IP。

我们一直遭受其中一些运营商的DoS攻击。  这些是简单的浏览器攻击,即5或10个运营商只会持有  F5键并在他们不应该时请求服务器。

我们几乎无法提高攻击者正在使用的这些特定网址的性能。这是一个软件,而不是一个公共门户网站,因此很多屏幕都有大量的处理和实时查询。

我们确实设法生成了一个php保护,它将识别多个请求,并在用户登录后通过使用带有包含我们软件中的userID的cookie的控制机制将用户在php中列入黑名单。

这在某种程度上有效,但由于请求已由网络服务器发送和处理,因此有点“太迟”了。 即使响应现在是最小的并且不会给服务器带来更多麻烦,理想情况下我们想要像mod_evasive这样的东西,但是拒绝单个请求而不是阻止IP。

举例说明:如果用户在3秒生成中调用相同的URL,5次,我们将拒绝每个下一个请求30秒,但仅拒绝该用户的请求(由某个cookie标识)。

1 个答案:

答案 0 :(得分:0)

嗯,这更像是一个行政问题,而不是一个技术问题 - 告诉你的客户教育他们的用户。

但是如果你真的想在软件中这样做,那么下面的一些方案应该可行:

  • 为每个用户提供不同的Cookie(您已经这样做了吗?)。
  • 创建一个包含cookie和“请求计数”的数据库表。
  • 每当您的软件开始处理请求时,如果该会话的请求计数为> 3(或您认为合适的数字),立即中止,将请求计数设置为30,并向用户发出错误消息。特别是不要做那些昂贵的加工工作。
  • 如果请求计数小于3,请将其增加1并正常处理请求。
  • 让一些cron作业减少一个所有请求计数> 1。根据软件的典型用例,每分钟运行一次,或者在查询数据库的循环中每隔几秒运行一次,然后休眠一段时间。

将参数调整到您的软件或课程中。