Rate limit só por IP é erro: as camadas que eu protejo no meu SaaS
Aparece um baita de um timeout e você não entende o que aconteceu. Muito vibe coder esquece o limite de requisição, e quem lembra coloca só por IP. Eu vou te mostrar por que isso é um erro catastrófico e como eu limito em todas as camadas.
🎧 PREFERE OUVIR? · 12 min · Podcast Em Produção
Este artigo também é um episódio do podcast Josimar JMV | Em Produção — o mesmo vídeo, só o áudio, normalizado pra fone.
Gravei esses 12 minutos no canal @josimarjmv em 21 de outubro de 2026, direto, sem corte, como se fosse ao vivo. Assista e leia junto: aqui embaixo eu conto a mesma coisa por escrito, com as RFCs e o relato da Wikimedia que fui conferir depois.
rate limit é o limite de requisição que protege alguma coisa de excesso, e a resposta certa quando ele estoura é o HTTP 429. Limitar só por IP é erro: o provedor usa CGNAT e põe várias pessoas atrás do mesmo IP, e órgão público sai com um IP pra todo mundo. Eu combino IP e dispositivo, e aplico o limite em todas as camadas: DNS/CDN, proxy, aplicação (e formulário), proxy do banco e banco, além das filas. Porque a aplicação pode cair em qualquer lugar, inclusive por causa dela mesma.
A pergunta que eu faço pro júnior aqui na empresa
Isso já aconteceu várias e várias vezes na minha empresa, principalmente com a galera júnior. A conversa é sempre a mesma:
"O software que você está fazendo é local ou vai pra URL pública?" Vai pra URL pública. É acessível pela internet.
"Tem firewall, bloqueio de porta, tudo certinho?" Tem. Bacana.
"E está tratando limite de requisição, o famoso 429?" É aqui que a conversa muda.
Toda API que presta tem tratamento de rate limit. Dispara um monte de requisição pra API da OpenAI agora, pra transcrever áudio que seja, e você vai tomar o limite. Mas eu duvido que muita API de vibe code tenha isso. É básico, é padrão, e pouca gente trata. O meu checklist de quem sobe código feito com IA está em o que eu confiro antes de subir pra produção.
Por que isso vai ficar sério: robô com IA varrendo tudo
Eu já falei de segurança de box pirata. A box pirata vem com worm, com malware, com coisa pré-definida buscando padrão: porta SSH 22 aberta, porta 3000 do Node, que todo mundo que fez cursinho sobe na 3000. Já tem muita invasão assim. Agora imagina a hora que o invasor for uma mini LLM, que se adapta ao ambiente: entrou na box pirata, reconhece que é Android, sabe as portas, reconhece a rede. Mini LLMs focadas em invasão, em ataque, em DDoS.
E saíram as notícias de agentes de IA que se multiplicam. Não é literalmente se reproduzindo, mas escalando de ponta a ponta e acionando outros pontos. Se você já usou o SDK da Anthropic, você entende: ele sozinho cria outros agentes e vai embora, baseado na necessidade. Isso é bem fácil de fazer hoje.
Fui conferir o caso da Wikimedia que eu citei. Em 05/10/2026 a Wikimedia Foundation publicou que achou atividade de agentes "rogue" que ela atribui à OpenAI nos projetos dela: edições sem autorização, tentativas de usar uma ferramenta pública como proxy e milhões de requisições automatizadas às APIs, que podem ter contribuído pra uma queda parcial do Wikidata Query Service em maio. E não é a Wikipédia, é a Wikimedia, a fundação por trás dela. Em 2025 ela já tinha contado que 65% do tráfego mais caro dela vinha de robôs, enquanto os robôs eram só uns 35% das páginas vistas.
É esse o cenário: tráfego monstruoso varrendo tudo quanto é software e site. Quem não trabalhou limite de requisição vai cair.
Rate limit só por IP é um erro catastrófico
Aí vem a segunda pergunta: "você colocou limite baseado em quê?". IP. Aí é que está o erro.
O provedor usa um negócio chamado CGNAT, que basicamente permite que várias pessoas tenham o mesmo IP na internet. A faixa usada dentro da rede do provedor pra isso foi até reservada numa RFC, a RFC 6598 (100.64.0.0/10). Pro seu servidor, um monte de cliente chega com o mesmo IP. Bloqueou um, bloqueou todos.
- CGNAT do provedor. Várias casas atrás do mesmo IPv4 público.
- Órgão público. Usa o mesmo IP pra todo mundo. Se o seu cliente é prefeitura, você derruba a prefeitura inteira.
- Antigamente era pior. Tinha internet a rádio com um IP pra cidade inteira. Hoje melhorou, mas o CGNAT continua no IPv4. No IPv6 isso não entra.
Então o limite tem que ser mais inteligente: IP e dispositivo, e devolvendo 429 quando estoura. O 429 Too Many Requests está na RFC 6585, que ainda recomenda dizer na resposta quanto tempo esperar, pelo cabeçalho Retry-After. Quem vive de bloco de IP sabe o quanto IPv4 é escasso; eu contei a minha fila pelo meu bloco em comprar bloco de IPv4.
E cuidado com a IA que escreve o seu código. Pede "faz um tratamento de rate limit pra mim" sem instruir, e o primeiro que ela coloca é só IP. Por quê? Porque lá no GitHub, onde ela aprendeu com os júnior, a galera só botava IP, e aí dava pau. Até a documentação do módulo de limite do nginx apresenta o limite "em particular" por IP, e responde 503 por padrão. Se você quer 429, tem que pedir.
Rate limit em todas as camadas
O que é o limite de requisição? Uma proteção pra alguma coisa não receber excesso. E ele não é numa camada só. A gente tem rate limit a nível de API e tem rate limit a nível de proxy, pra requisição abusiva morrer antes de chegar na API.
| Camada | O que eu limito ali |
|---|---|
| DNS / CDN | Primeira barreira. Cloudflare e planos maiores de outros fornecedores já têm proteção; passou o DNS, o abuso já pode morrer ali. |
| Formulário | Captcha, Turnstile: é proteção de excesso de requisição. E o back-end do formulário também tem limite. |
| Proxy reverso | Na minha VM, na minha estrutura: limite no proxy pra requisição não chegar na API. |
| Aplicação / API | Limite por IP e dispositivo, devolvendo 429. Também pode e deve ter. |
| Proxy do banco | Se usa cluster, represa as conexões antes do banco. |
| Banco de dados | Pool de conexões controlado: abre, usa, fecha. |
| Fila e mensageria | Kafka, Redis, BullMQ ou o que você usar: limite pra get, pra insert, pra fila. |
Cloudflare tem limite próprio, e eu já tomei dele: contei em os limites da Cloudflare que ninguém te conta. As regras de rate limit da Cloudflare mostram o mesmo problema na tabela de planos: nos de entrada, a contagem é só por IP; nos maiores aparecem "IP com suporte a NAT", cabeçalho, cookie, ASN. Conferi em 22/10/2026.
Proteja a sua aplicação de você mesmo
"Como assim, me proteger de mim mesmo?" É rate limit dentro da sua própria rede.
A sua aplicação tem limite de requisição no banco de dados? Você fecha as conexões que abre? Ou ela é feita pra, toda hora que chega requisição, abrir conexão, abrir, ir enchendo o pool, enchendo, até travar tudo e dar limite excedido? Isso também é proteção de limite. Você faz na aplicação, obviamente. Mas se usa cluster, coloca também num proxy de banco de dados e represa, protegendo o banco.
E vale pra tudo: get, insert, fila, mensageria. Por quê? Porque a aplicação pode cair em qualquer lugar. Pode dar excesso de requisição em qualquer lugar. Pode dar loop, problema, em qualquer lugar. Escalar máquina não resolve isso, e eu já disse por quê em autoscale não salva aplicação mal feita.
Sem limite, a conta chega
Não é só cair. A nuvem não cobra por requisição? Quando você coloca uma CDN, não cobra por requisição? Pois é. E não estou falando só de arquivo estático: dependendo da abstração com que você trabalha, o Supabase da vida, a Vercel, os caras abstraem tudo, mas te cobram requisição.
Então ou você trabalha as proteções de requisição, ou toma surpresa na conta, ou o sistema cai, ou as duas coisas. Os riscos que me fazem não usar Supabase em produção estão em Supabase em produção: os 3 riscos, e o que eu testo antes de um pico de acesso está em escalar SaaS sem quebrar.
Onde eu ensino isso de verdade
São 20 anos de SaaS, e esse tipo de problema eu já vivi. Hoje eu estou com 19 sistemas autônomos conversando com a minha equipe, só de correção de bug; a maioria das coisas resolve sozinha, com um monte de guardrail pra poder subir. Eu pagaria bem caro pra ter esse norte antes de montar um SaaS.
É isso que eu levo pra Imersão de SaaS, presencial em São Paulo, três dias comigo e com a minha equipe: não é curso de programação, é gestão de SaaS inteira, mas com código, com o pipeline que eu uso pra desenvolver hoje, marketing, suporte, venda, atendimento e jurídico. Nunca foi tão fácil empreender, e nunca foi tão difícil, porque ficou fácil pra todo mundo e a régua disparou. Você consegue o primeiro, o quinto cliente; a hora que o negócio começa a subir, é aí que dá errado se você não tratou o básico.
Discorda? Concorda? Tem um caso parecido? Aqui não tem caixa de comentário de propósito: segunda-feira, ao meio-dia, eu faço live no canal e a gente conversa sobre isso ao vivo — sem corte, como sempre.
Ver as lives no canal @josimarjmv →Perguntas frequentes
O que é rate limit?
É o limite de requisição: uma proteção pra alguma coisa não receber requisição em excesso. Quando passa do limite, a resposta padrão é o HTTP 429 (Too Many Requests), definido na RFC 6585. Toda API que presta tem esse tratamento, e muita API de vibe code não tem.
Por que rate limit só por IP é erro?
Porque um IP não é uma pessoa. Provedor usa CGNAT, que põe várias pessoas atrás do mesmo IP público no IPv4, e órgão público costuma sair pra internet com o mesmo IP pra todo mundo. Se você limita só por IP, bloqueia gente inocente junto com o abusador. Eu combino IP com dispositivo.
O que é CGNAT e por que ele importa pro limite de requisição?
É o NAT do provedor: vários clientes compartilham o mesmo IPv4 público. A RFC 6598 reservou a faixa 100.64.0.0/10 pra esse uso dentro da rede do provedor. Pro seu servidor, todos esses clientes chegam com o mesmo IP. No IPv6 isso não acontece.
Em quais camadas eu aplico rate limit?
Em todas. O DNS/CDN protege o proxy, o proxy protege a aplicação, a aplicação protege o proxy do banco e o proxy do banco protege o banco. Vale também pra formulário (captcha, Turnstile e o back-end dele), fila e mensageria. Porque a aplicação pode cair em qualquer lugar.
O que é proteger a aplicação dela mesma?
É pôr limite dentro da sua própria rede. Exemplo: a aplicação abre conexão com o banco toda vez que chega requisição, não fecha, enche o pool até travar e dar limite excedido. Você controla isso na aplicação e, se usa cluster, também num proxy de banco de dados, represando antes de chegar no banco.
A IA que escreve código já coloca rate limit?
Se você não instruir, ela costuma colocar só por IP, que é o que mais aparece nos repositórios em que ela aprendeu. Eu peço explicitamente: rate limit em todas as camadas, por IP e dispositivo, devolvendo 429.
Rate limit ajuda a não tomar susto na conta da nuvem?
Ajuda. Nuvem, CDN e plataformas que abstraem a infraestrutura cobram por requisição ou por tráfego. Sem limite, um robô varrendo o seu sistema derruba ele ou vira conta no fim do mês.
Robô e agente de IA estão mesmo aumentando o tráfego?
Conferi em 22/10/2026: a Wikimedia Foundation publicou em 05/10/2026 que agentes que ela atribui à OpenAI fizeram milhões de requisições automatizadas às APIs dela e que esse tráfego pode ter contribuído para uma queda parcial do Wikidata Query Service em maio. Em 2025 ela já tinha relatado que 65% do tráfego mais caro dela vinha de robôs.
Baseado na gravação do canal @josimarjmv publicada em 21/10/2026 (11min56s), com transcrição própria das legendas do próprio vídeo.
O que veio da gravação e o que é apuração minha, com as fontes
Da gravação: o timeout que o vibe coder não entende e o rate limit que ele esquece nos endpoints; a conversa com os júnior da empresa sobre URL pública, firewall e o 429; a box pirata com worm e malware procurando porta 22 e porta 3000, e a ameaça de mini LLMs de invasão; as notícias de agentes de IA que se multiplicam e o SDK da Anthropic criando outros agentes; o caso da Wikimedia; o limite só por IP como erro catastrófico, o CGNAT, o órgão público com um IP pra todo mundo, a internet a rádio com um IP pra cidade inteira e o IPv6 fora disso; IP e dispositivo devolvendo 429; rate limit a nível de API e de proxy na minha empresa; a cadeia DNS → proxy → aplicação → proxy do banco → banco; formulário com captcha e Turnstile; proteger a aplicação de si mesma com o pool de conexões; filas com Kafka, Redis e BullMQ; a cobrança por requisição em nuvem, CDN, Supabase e Vercel; a IA que coloca rate limit só por IP porque aprendeu assim no GitHub; os 20 anos de SaaS, os 19 sistemas autônomos de correção de bug e a Imersão de SaaS presencial em São Paulo.
Apuração minha (22/10/2026): a atividade dos agentes atribuídos à OpenAI, com milhões de requisições automatizadas e a possível contribuição pra queda parcial do Wikidata Query Service em maio, está no texto da Wikimedia Foundation de 05/10/2026; os 65% do tráfego mais caro vindo de robôs, contra cerca de 35% das páginas vistas, estão no texto da Wikimedia de 01/04/2025; o código 429 e o cabeçalho Retry-After estão na RFC 6585; a faixa 100.64.0.0/10 do CGNAT está na RFC 6598; o limite por IP como exemplo e o 503 padrão do limit_req_status estão na documentação do nginx; as regras de rate limit e o Turnstile estão na documentação da Cloudflare.