我的网站上有一个垃圾邮件发送者。我可以使用“拒绝”来阻止他的 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。当然,您必须将其配置为搜索正确的模式。