使Nginx服务器响应缓慢


8

因此,我的网站上有一个垃圾邮件发送者。我可以使用“拒绝”来阻止他的IP,但是他只需要更改他的IP,就必须继续与他玩猫和老鼠。

相反,我很好奇是否有一种方法可以配置nginx使其对IP的响应更加缓慢。

这样一来,他也许会决定该站点无法正常运行,让我一个人呆着。

谢谢

Answers:


7

Nginx指令limit_rate可让您指定要对限制响应进行评分的速度,例如

location / {
  if ($slow) {
    limit_rate 4k;
  }
}

Nginx文档在这里。(从文档中,您将看到您的后端可以做出决定,并请求Nginx限制客户端的速率)

如何获得此$slow变量集取决于您的配置。最简单的方法是通过geo映射进行设置:

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

“地理位置”映射是$slow基于客户端IP地址的依赖项。默认情况下为0,如果客户端IP地址在1.2.3.0/24子网中,则为1 。在此处查看有关“ geo”的Nginx文档

使用“ fail2ban”是整个解决方案的合理演变。您可以使用“ fail2ban”来自动检测异常活动并为Nginx收集IP,然后重新加载Nginx,以便它重新读取需要减速和/或阻止的IP地址列表。


5

如果您想欺骗冒犯的用户以为他仍然未被您注意,则可以使用nginx的请求限制模块(http://wiki.nginx.org/HttpLimitReqModule)。

首先定义一个请求限制区域:

http {
    limit_req_zone  $binary_remote_addr  zone=spammers:1m   rate=30r/m;
}

该区域将使用违规者的IP地址来识别请求并将请求限制为每分钟30次(1/2秒)。请注意,该区域的内存大小设置为1 MiB,这意味着它可以处理1 MiB /每个请求存储区64个字节= 16384个垃圾邮件发送者地址(对于我们的情况而言,这可能是一个过高的选择)。如果需要,分别进行调整。

接下来,我们定义了一种指令,该指令将使用(不幸的是,如果不幸的话)情况通过限制器实际路由罪犯:

location / {
    if ($remote_addr = 1.2.3.4) {
        limit_req   zone=spammer  burst=5;
    }
}

您可以在服务器的访问日志中查看工作成果。

请注意,这种黑客攻击方式无法很好地扩展,因为每次违规者更改IP时,您都必须更新配置文件(更不用说在其中包含更多IP了,如果情况允许,则意味着更多),但是它可以正常工作。


1
您也可以将我的答案与Alexander Azarov的地理区块结合起来,使其更具扩展性!
Panagiotis PJ Papadomitsos 2012年

2

解决此垃圾邮件发送者的最佳方法是正确安装和配置fail2ban。Fail2ban将在日志文件中搜索模式,并阻止所有向您的站点发送垃圾邮件的IP。当然,您必须将其配置为搜索正确的模式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.