使 Nginx 服务器响应缓慢

使 Nginx 服务器响应缓慢

我的网站上有一个垃圾邮件发送者。我可以使用“拒绝”来阻止他的 IP,但他会更改 IP,而我不得不继续与他玩猫捉老鼠的游戏。

相反,我很好奇是否有办法配置 nginx 以使其对他的 IP 的响应速度更慢。

这样他也许就会认为这个网站运行不正常而不再打扰我了。

谢谢

答案1

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。请参阅 Nginx 文档中的“地理”这里

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

答案2

如果你想欺骗违规用户,让他认为你仍然没有注意到他,你可以使用 nginx 的请求限制模块(http://wiki.nginx.org/HttpLimitReqModule)。

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

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

此区域将使用罪犯的 IP 地址来识别并将请求限制为每分钟 (1/2 秒) 30 个。请注意,该区域的内存大小设置为 1 MiB,这意味着它可以处理每个请求存储桶 1 MiB/64 字节 = 16384 个垃圾邮件发送者地址(对于我们的情况,这可能有点过头了)。如果有必要,请分别进行调整。

接下来,我们定义一个指令,该指令实际上会使用(不幸的是,是邪恶的)if 案例通过限制器来路由违规者:

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

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

请注意,这种黑客攻击的扩展性不佳,因为每次攻击者更改 IP 时您都必须更新配置文件(更不用说在其中包含更多 IP,这意味着更多的 if 情况),但它确实有效。

答案3

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

相关内容