我的nginx
实例每隔几天就会被一些恶意机器人使用随机查询参数值攻击。
/var/log/nginx/access.log:209.107.204.224 - - [14/Mar/2023:16:01:42 +0100] "GET /?ttrp353217=ttrp540516 HTTP/1.1" 501 560 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
当它发生时,它会很快导致资源匮乏,并最终导致普通客户的 HTTP 501/504。
查询ttrp
参数名称/值始终包含一个随机数。
这是某个知名的机器人吗?
有没有办法配置nginx
来阻止包含特定查询参数正则表达式的请求?据我所知,如果查询参数存在,我可以阻止请求,但查询参数不存在则不能以前缀开头存在……
我暂时屏蔽了该地址,但那个地址可能会改变。
答案1
使用 fail2ban 解析日志并在设定的时间段内阻止匹配的地址。
另一种选择是使用 Cloudflare,它可以自动免费完成这些操作,甚至更多。
我想说,在 2023 年,如果没有 Cloudflare,任何公开托管都是一个坏主意。
免责声明:不,我与 CF 没有任何关联,也未得到其支持。但多年来我一直在免费使用他们的服务,我的服务器从未出现过宕机。
答案2
您需要的是 WAF(Web 应用程序防火墙)。Cloudflare 是一种解决方案,如之前的答案所述。但我个人使用纳克西以防止这些攻击。
您可以将 Naxsi 与 Fail2Ban 和 UFW 集成以自动阻止不良 IP。