Nginx de limite de taxa com base em um pedido anterior

2

Não é um problema, mas recebo um grande número de scanners de vulnerabilidades e de criativos de script que acessam meu site constantemente.

Meu site não roda o WordPress, mas é constantemente escaneado para explorações do WordPress e tenta acessar URLs inexistentes, como /admin /wp-admin.php .

O que eu gostaria de fazer é limitar o número de IPs específicos quando eles atingirem qualquer URL em uma lista negra. Eu sei que não posso parar completamente as crianças do script, mas gostaria de atrasá-las para desencorajá-las. Por exemplo:

  1. Digamos que estou executando um verificador de vulnerabilidades que primeiro tenta /wp-admin.php .
  2. O Nginx vê esse local específico e adiciona meu IP a uma lista de IPs proibidos ou com limite de taxa por um período de tempo.

Existe uma maneira de conseguir isso puramente através da configuração do Nginx? Eu sei que é possível usar o OpenResty / Lua, mas até onde eu sei, é uma tarefa de alto esforço.

O Fail2ban também não é uma opção, já que estou correndo atrás de um balanceador de carga e, portanto, preciso contar com X-Forwarded-For cabeçalhos, o que obviamente não é compatível com o iptables.

    
por arrtchiu 14.02.2017 / 05:32

1 resposta

0

De acordo com esta postagem , é possível classificar o limite de Nginx da seguinte forma:

location /account/login/ {
    # apply rate limiting
    limit_req zone=login burst=5;

    # boilerplate copied from location /
    proxy_pass http://myapp;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

e teste-o após um reinício da seguinte forma:

for i in {0..20}; do (curl -Is https://example.com/accounts/login/ | head -n1 &) 2>/dev/null; done
    
por 21.02.2017 / 23:29