Temos um Nginx/PHP-FPM por trás de um balanceador de carga que é periodicamente raspado. Muitos dos scrapers atingiram com força a página 404 do nosso aplicativo.
Existe uma maneira no Nginx, possivelmente com omódulo limitador de taxaou um módulo diferente, para bloquear todo o tráfego com base em x-forward-for após atingir erros 404 em mais de 100 solicitações por minuto?
A documentação que encontrei paralimite-req-móduloparece que se baseia no recurso e não no status de retorno da página.
Há tráfego suficiente, para que cada nó esteja vendo tráfego 404 suficiente para que eles não precisem se comunicar sobre quem bloquear coletivamente.
Responder1
Você certamente pode fazer isso no nginx com o módulo limit_req_zone.
No nginx.conf configure uma zona:
limit_req_zone $binary_remote_addr zone=one:1000m rate=100r/m;
Você também pode usar X_Forwarded_For
em vez de binary_remote_addr
também.
No bloco de localização de configuração do seu site, apenas faça referência à zona:
limit_req zone=one burst=10 nodelay;
documento: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
Responder2
Você pode usar fail2ban e seguir a prisão com nginx para limitar a taxa de bots mal configurados
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local e adicione isto na parte inferior
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10
referências:https://rtcamp.com/tutorials/nginx/fail2ban