所以我的网站上有一个垃圾邮件发送者。我可以使用“拒绝”来阻止他的 IP,但随后他只会更改他的 IP,而我将不得不继续和他玩猫捉老鼠。
相反,我很好奇是否有一种方法可以配置 nginx 以更慢地响应他的 IP。
那样的话,也许他会认为该站点运行不正常而让我一个人呆着。
谢谢
Nginx 指令limit_rate让你指定你想要限制响应的速度,例如
location / {
if ($slow) {
limit_rate 4k;
}
}
Run Code Online (Sandbox Code Playgroud)
Nginx 文档在这里。(从文档中您会看到您的后端可能会做出决定并要求 Nginx 对客户端进行速率限制)
如何获得此$slow变量集取决于您的配置。最简单的方法是通过geo映射设置它:
geo $slow {
default 0;
1.2.3.0/24 1;
}
Run Code Online (Sandbox Code Playgroud)
“地理”映射是$slow基于客户端 IP 地址的依赖项。默认情况下为 0,如果客户端 IP 地址在1.2.3.0/24子网中,则为 1 。在此处查看有关“geo”的 Nginx 文档
使用“fail2ban”是整个解决方案的合理演变。您可以使用“fail2ban”自动检测异常活动并收集 Nginx 的 IP,然后重新加载 Nginx,以便它重新读取需要减慢和/或阻止的 IP 地址列表。
如果您想让违规用户认为他仍然没有被您注意到,您可以使用 nginx 的请求限制模块 ( http://wiki.nginx.org/HttpLimitReqModule )。
首先定义一个请求限制区:
http {
limit_req_zone $binary_remote_addr zone=spammers:1m rate=30r/m;
}
Run Code Online (Sandbox Code Playgroud)
该区域将使用攻击者的 IP 地址来识别请求并将请求限制为每分钟 30 个(1 / 2 秒)。请注意,该区域的内存大小设置为 1 MiB,这意味着它可以处理 1 MiB / 每个请求桶 64 字节 = 16384 个垃圾邮件发送者地址(这对于我们的案例来说可能有点过头了)。如果必须,请分别调整。
接下来,我们定义了一个指令,该指令将使用(邪恶的,不幸的是)if case 来实际通过限制器路由攻击者:
location / {
if ($remote_addr = 1.2.3.4) {
limit_req zone=spammer burst=5;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在服务器的访问日志中查看您的劳动成果。
请注意,此 hack 不能很好地扩展,因为每次攻击者更改 IP 时您都必须更新配置文件(更不用说在其中包含更多 IP,这意味着更多情况),但它有效。
| 归档时间: |
|
| 查看次数: |
1568 次 |
| 最近记录: |