我想减少机器人发送 GET URL 来测试网站“经典”安全漏洞所使用的流量和带宽。
类似 GET /.env GET /.git/config GET /phpinfo.php .. 的 URL
当我查看我的日志时,我发现有成千上万个这样的机器人。有些机器人会定期更改其 IP,有些机器人会不断更改其 User-Agent 字符串,……
因此,我正在考虑从我的日志中提取一个硬编码列表并向他们发送 403 Forbidden 或类似的内容,但我想让它足够快,以便 nginx 或 varnish 能够足够快地处理这个过滤器,以免影响它们的性能。
您是否尝试过使用这样的列表来处理这种持续的请求流,并且是否存在像 Nginx 或 Varnish 中的二叉树这样的特殊技巧,可以帮助配置大量路径列表以进行快速匹配?
403 Forbidden
如果您发送默认的 404,实际上可能会造成更大的伤害。403 Forbidden
可以解释为“这里有东西,请更加努力”。减少机器人使用的流量/带宽的唯一有效方法是在您的 Web 服务前面使用 Cloudflare 之类的服务。它们将根据您设置的规则过滤流量,您的原始服务器将获得更少的不良流量。
由于 Varnish 将其 VCL 配置编译为机器代码,因此即使项目列表不断增长,VCL 代码的执行速度也足够快,不必担心性能。
静态 URL 匹配
代码可以像这样简单:
正则表达式模式匹配
当然你也可以使用正则表达式来匹配 URL 模式,如下面的代码所示:
将正则表达式存储在单独的文件中
如果您想将阻止规则存储在单独的文件中,我可以推荐Varnish Enterprise和Varnish Pro的一部分的重写模块。
您可以创建一个包含模式的文本文件,如下所示:
这会将匹配的模式重写为,
/block
并且一旦我们看到/block
URL 出现,我们就返回synth(403)
。这将是相应的 VCL 代码:如果更改了 的内容
/etc/varnish/block.txt
,则必须通过 重新加载 VCL 文件sudo varnishreload
。这对缓存没有影响,也不会重新启动varnishd
进程,它只会重新加载 VCL 配置并加载/etc/varnish/block.txt
。如果你不想使用 403
其他答案和评论提到,
403
状态代码可能弊大于利,因为它们表明存在某些东西。您可以
return(synth(404))
改为调用,但也可以返回200
带有虚假内容的实际响应。这就是您可以在 Varnish 和 extend 中利用合成响应的地方vcl_synth
。以下是一个例子:
因此,如果您执行
return(synth(700))
,合成响应将转换为实际200
状态,并以一些Lorem ipsum内容作为响应主体。然而,
404
回应也可能有效。