AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1177620
Accepted
Jerome WAGNER
Jerome WAGNER
Asked: 2025-03-26 00:15:22 +0800 CST2025-03-26 00:15:22 +0800 CST 2025-03-26 00:15:22 +0800 CST

处理机器人扫描数千个 URL 以查找安全配置错误

  • 772

我想减少机器人发送 GET URL 来测试网站“经典”安全漏洞所使用的流量和带宽。

类似 GET /.env GET /.git/config GET /phpinfo.php .. 的 URL

当我查看我的日志时,我发现有成千上万个这样的机器人。有些机器人会定期更改其 IP,有些机器人会不断更改其 User-Agent 字符串,……

因此,我正在考虑从我的日志中提取一个硬编码列表并向他们发送 403 Forbidden 或类似的内容,但我想让它足够快,以便 nginx 或 varnish 能够足够快地处理这个过滤器,以免影响它们的性能。

您是否尝试过使用这样的列表来处理这种持续的请求流,并且是否存在像 Nginx 或 Varnish 中的二叉树这样的特殊技巧,可以帮助配置大量路径列表以进行快速匹配?

nginx
  • 2 2 个回答
  • 74 Views

2 个回答

  • Voted
  1. Tero Kilkanen
    2025-03-26T00:32:02+08:002025-03-26T00:32:02+08:00

    403 Forbidden如果您发送默认的 404,实际上可能会造成更大的伤害。403 Forbidden可以解释为“这里有东西,请更加努力”。

    减少机器人使用的流量/带宽的唯一有效方法是在您的 Web 服务前面使用 Cloudflare 之类的服务。它们将根据您设置的规则过滤流量,您的原始服务器将获得更少的不良流量。

    • 2
  2. Best Answer
    Thijs Feryn
    2025-03-26T18:14:04+08:002025-03-26T18:14:04+08:00

    由于 Varnish 将其 VCL 配置编译为机器代码,因此即使项目列表不断增长,VCL 代码的执行速度也足够快,不必担心性能。

    静态 URL 匹配

    代码可以像这样简单:

    sub vcl_recv {
        if(req.url == "/.env" || req.url == "/.git/config" || req.url == "/phpinfo.php") {
            return(synth(403));
        }
    }
    

    正则表达式模式匹配

    当然你也可以使用正则表达式来匹配 URL 模式,如下面的代码所示:

    sub vcl_recv {
        if(req.url ~ "^/\.(env|git)(/.*|$)" || req.url == "/phpinfo.php") {
            return(synth(403));
        }
    }
    

    将正则表达式存储在单独的文件中

    如果您想将阻止规则存储在单独的文件中,我可以推荐Varnish Enterprise和Varnish Pro的一部分的重写模块。

    您可以创建一个包含模式的文本文件,如下所示:

    "^/\.(env|git)(/.*|$)" "/block"
    "^/phpinfo\.php$" "/block"
    

    这会将匹配的模式重写为,/block并且一旦我们看到/blockURL 出现,我们就返回synth(403)。这将是相应的 VCL 代码:

    vcl 4.1;
    
    import rewrite;
    
    sub vcl_init {
        new rs = rewrite.ruleset("/etc/varnish/block.txt");
    }
    
    sub vcl_recv {
        set req.url = rs.match_rewrite(req.url);
        if(req.url == "/block") {
            return(synth(403));
        }
    }
    

    如果更改了 的内容/etc/varnish/block.txt,则必须通过 重新加载 VCL 文件sudo varnishreload。这对缓存没有影响,也不会重新启动varnishd进程,它只会重新加载 VCL 配置并加载/etc/varnish/block.txt。

    如果你不想使用 403

    其他答案和评论提到,403状态代码可能弊大于利,因为它们表明存在某些东西。

    您可以return(synth(404))改为调用,但也可以返回200带有虚假内容的实际响应。这就是您可以在 Varnish 和 extend 中利用合成响应的地方vcl_synth。

    以下是一个例子:

    sub vcl_synth {
        if(resp.status == 700) {
            set resp.status = 200;
            set resp.http.Content-Type = "text/plain";
            set resp.body = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
            return(deliver);
        }
    }
    

    因此,如果您执行return(synth(700)),合成响应将转换为实际200状态,并以一些Lorem ipsum内容作为响应主体。

    然而,404回应也可能有效。

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve