AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 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

Manipulação de bots que escaneiam milhares de URLs em busca de configurações de segurança incorretas

  • 772

Gostaria de reduzir o tráfego e a largura de banda usados ​​por bots que enviam URLs GET para testar falhas de segurança "clássicas" em um site.

URLs como GET /.env GET /.git/config GET /phpinfo.php ..

quando olho meus logs, há milhares deles. Alguns dos bots mudam seus IPs regularmente, alguns deles continuam mudando suas strings User-Agent, ..

Então, eu estava pensando em uma lista codificada extraída dos meus logs e enviar a eles um 403 Forbidden ou algo assim, mas eu gostaria de torná-la rápida o suficiente para que o nginx ou o varnish pudessem lidar com esse filtro rápido o suficiente para que isso não afetasse seu desempenho.

Você já tentou lidar com esse fluxo constante de solicitações com essa lista? Existe algum truque especial, como uma árvore binária no Nginx ou Varnish, que pode ajudar a configurar uma lista enorme de caminhos para uma correspondência rápida?

nginx
  • 2 2 respostas
  • 74 Views

2 respostas

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

    Na verdade, pode doer mais se você enviar 403 Forbiddeno 404 padrão. 403 Forbiddenpode ser interpretado como "há algo aqui, tente mais".

    A única maneira eficaz de reduzir o tráfego/largura de banda usada por bots é usar um serviço como o Cloudflare na frente do seu serviço web. Eles filtrarão o tráfego de acordo com as regras que você definir e seu servidor de origem receberá menos tráfego ruim.

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

    Como o Varnish compila sua configuração VCL em código de máquina, a execução do código VCL será rápida o suficiente para não se preocupar com desempenho, mesmo que a lista de itens cresça.

    Correspondência de URL estática

    O código poderia ser tão simples quanto isto:

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

    Correspondência de padrões regex

    É claro que você também pode combinar padrões de URL com expressões regulares, conforme ilustrado no código abaixo:

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

    Armazene regexes em um arquivo separado

    Se você quiser armazenar as regras de bloqueio em um arquivo separado, posso recomendar o módulo de reescrita que faz parte do Varnish Enterprise e do Varnish Pro .

    Você pode criar um arquivo de texto com os padrões, que se parece com isto:

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

    Isso reescreverá os padrões correspondentes para /blocke assim que virmos a /blockURL entrar, retornaremos synth(403). Este seria o código VCL correspondente:

    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));
        }
    }
    

    Se você alterar o conteúdo de /etc/varnish/block.txt, você tem que recarregar o arquivo VCL através de sudo varnishreload. Isso não tem impacto no cache e não reiniciará o varnishdprocesso, ele apenas recarregará a configuração VCL e carregará /etc/varnish/block.txt.

    Caso você não queira usar 403

    Outras respostas e comentários referem-se ao fato de que um 403código de status pode causar mais danos do que benefícios, porque indica que algo está lá .

    Você poderia chamar return(synth(404))em vez disso, mas também poderia retornar uma 200resposta real com conteúdo falso. E é aí que você pode alavancar respostas sintéticas no Varnish e estender vcl_synth.

    Aqui está um exemplo:

    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);
        }
    }
    

    Então, se você executar um return(synth(700)), a resposta sintética será convertida em um 200status real com algum conteúdo Lorem ipsum como corpo da resposta.

    No entanto, uma 404resposta também poderia funcionar.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve