Limitar pedidos no nginx: desacelerar robôs e tentativas de adivinhar senhas

VPS e Servidores··· 94 visualizações· 3 min de leitura

A resposta curta: o nginx tem um limitador de pedidos incorporado. Define-se uma «zona» que conta pedidos por endereço e uma regra numa localização, e quem passa do ritmo recebe um erro em vez de uma resposta. É a defesa mais barata contra robôs que martelam o wp-login.php ou uma API. Precisa de um VPS com acesso root e o nginx a servir o seu site.

O nginx e a configuração são seus: o nosso suporte não os escreve nem repara (veja Até onde vai o nosso suporte). Se ainda não tem o nginx montado, comece por Instalar o nginx no Ubuntu.

As duas peças

1 A zona, num arquivo dentro de /etc/nginx/conf.d/ (fica no contexto «http», fora de qualquer site):
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
2 A regra, dentro do bloco do seu site, na localização que quer proteger:
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
limit_req_status 429;
# o resto da configuração que já tem aqui
}
3 Teste e aplique: sudo nginx -t confirma que a sintaxe está certa, e sudo systemctl reload nginx aplica sem cortar links.
Parte Quer dizer
zone=login:10m O nome da zona e a memória para a sua contabilidade: dez megabytes dão para muitos endereços.
rate=5r/m Cinco pedidos por minuto, por endereço. Pode ser r/s para segundos.
burst=5 Deixa passar até cinco pedidos a mais de uma vez, antes de começar a recusar. Evita castigar uma pessoa que carrega a página e volta atrás.
nodelay Os pedidos dentro do burst passam já, em vez de serem atrasados.
limit_req_status 429 O erro devolvido: 429, «excessivos pedidos». Sem isto é 503, que parece uma avaria.
Atrás do Cloudflare, o endereço que o nginx vê é o do Cloudflare, não o do visitante: o limite passava a valer para todo mundo ao mesmo tempo. Diga ao nginx qual é o endereço verdadeiro com o módulo realip (as linhas set_real_ip_from e real_ip_header CF-Connecting-IP). Veja O Cloudflare: o que é e o que muda.
Vários usuários podem compartilhar o mesmo endereço (uma rede móvel, um escritório). Um limite apertado demais bloqueia pessoas de verdade. Comece largo, veja o registro e aperte aos poucos.
O limitador abranda, não impede: um robô paciente continua tentando. Para banir quem insiste, junte-lhe o fail2ban. E para proteger o login do WordPress em si, veja Proteger o login do WordPress.

Montou o limite e o seu site responde 429 a todo mundo? Abra um pedido com o bloco do nginx e uma linha do registro de acessos.

Abrir pedido de suporte

VEJA TAMBÉM

Instalar o nginx no Ubuntu e servir o seu site

Instalar o fail2ban num VPS contra tentativas de senha no SSH

Proteger o login do WordPress: três passos por ordem de efeito

Bloquear um endereço IP de visitar o seu site

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde R$ 36,30/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.