live-de-python icon indicating copy to clipboard operation
live-de-python copied to clipboard

Live sobre Rate Limits

Open tiagojulianoferreira opened this issue 1 year ago • 2 comments

Olá!

Outro dia desenvolvi um app simples com Python e FastAPI, para verificação de cadastro numa base LDAP em que um requisito era ser o mais fácil possível, pensando em usuários com baixíssimo letramento digital.

Minha preocupação foi com algum tipo de ataque de negação de serviço (DDoS) , usar um captcha dificultaria para o usuário.

Numa pesquisa rápida vi que existem bibliotecas como RateLimiter que implementam limites de requisições numa faixa de tempo, pelo mesmo host, bloqueando tentativas muito recorrentes.

Como sou SysAdmin, me questiono se seria a melhor abordagem? De qualquer modo, para implementações simples parece fazer sentido né? Ou mesmo como uma feature do sistema para o usuário poder definir suas políticas de requisição nos endpoints?

No fim, acabei optando em usar o fail2ban, ao qual eu estava mais habituado, mas fica como sugestão para uma live futura, caso não tenha sido apresentado ainda.

Abraço!

tiagojulianoferreira avatar Mar 13 '24 14:03 tiagojulianoferreira

+1 nesse! Acho que todo mundo que sobe app em produção sofre com isso

guites avatar Mar 16 '24 00:03 guites

É uma excelente sugestão de live, mas me preocupo que a configuração para mitigação de DDoS pode variar dependendo de como você vai subir sua aplicação para produção, então acredito que isso pode complicar um pouco pra escolher um caminho pro roteiro da live..

Se está em produção, então imagino que esteja usando um servidor web / proxy reverso como nginx, traefik ou qualquer outro, então alguns caminhos seriam esses:

  1. Somente uma instância da sua aplicação web Usar uma biblioteca pra adicionar um Rate Limiter parece aceitável, mas não dispensa o uso de um servidor web.

  2. Múltiplas instâncias e somente um balanceador de carga Geralmente o próprio servidor web já permite configurar Rate Limiting, veja:

  3. Múltiplos balanceadores de carga Aqui já começa a complicar ainda mais, pois para o rate limiting funcionar bem é necessário que todos os servidores web compartilhem as informações de Rate Limiting, mas dependendo do servidor web escolhido talvez ele permita usar um banco de dados como o redis para armazenar estes dados, ou você pode usar algum serviço de WAF pra ficar na frente dos balanceadores de carga.

Mas independente de que haja um Rate Limiter configurado, na grande maioria das vezes é indispensável usar Cloudflare para servir como escudo para sua aplicação.

d3cryptofc avatar Mar 16 '24 11:03 d3cryptofc