TheCodeNaked

Quando Camadas de Segurança Colidem

Mesmo políticas de segurança perfeitas podem entrar em conflito. Um caso real mostrou como o NGINX, ao proteger demais, bloqueava requisições legítimas. Às vezes, o excesso de segurança é o verdadeiro inimigo da estabilidade.

Um Caso Real de Bloqueio por Rajadas e Falso Positivo em NGINX

1. O Sintoma Que Não Fazia Sentido

Durante os testes de uma aplicação corporativa baseada em Delphi FMX + REST API, um comportamento curioso começou a ocorrer.
O sistema funcionava perfeitamente em qualquer rede externa, inclusive em conexões 4G, mas falhava de forma intermitente dentro da rede interna de uma empresa japonesa de grande porte.

A equipe técnica local relatava erros aleatórios ao tentar atualizar múltiplos registros de agendamento. O servidor estava ativo, os logs limpos, e o consumo de recursos mínimo. Mesmo assim, em determinados momentos o sistema retornava erro de “excesso de conexões simultâneas”.

Um problema de rede?
De servidor?
Nenhum dos dois isoladamente — e foi justamente isso que tornou o caso tão interessante.


2. O Ambiente Controlado

O ambiente técnico era sólido e bem projetado:

  • Aplicativo cliente: Delphi FMX (Android/Windows) comunicando-se via REST.
  • Servidor: ambiente AWS com múltiplas instâncias da API.
  • Proxy reverso: NGINX balanceando as instâncias locais via estratégia least_conn.

O servidor operava com menos de 30% de memória e 3% de CPU, em plena estabilidade.
Nenhuma lentidão, nenhuma falha, nenhuma queda.

E ainda assim, os logs mostravam algo intrigante:

limiting requests, excess: 20.260 by zone "req_zone"

Ou seja: o próprio NGINX estava bloqueando as requisições.
Mas por quê? Não havia nenhum tráfego anormal, apenas uma máquina executando atualizações legítimas.


3. O Mecanismo Oculto: o Comportamento da Rede Corporativa

Após horas de análise comparativa, surgiu o padrão:
o erro ocorria apenas dentro da rede corporativa japonesa, nunca fora dela.

A hipótese — depois confirmada — era de que o firewall e os proxies internos da empresa estavam retendo e liberando as requisições em rajadas, em vez de encaminhá-las de forma contínua.

Esse comportamento é comum em redes corporativas modernas e pode ocorrer por diversas razões:

Inspeção HTTPS (SSL Inspection)
Firewalls corporativos avançados, como FortiGate ou Sophos, interceptam o tráfego HTTPS, descriptografam, inspecionam e recriptografam antes de repassar.
Esse processo introduz atrasos mínimos em cada requisição — que, somados, geram um buffer interno. Quando liberado, o servidor recebe um “pacote” de chamadas quase simultâneas.

  1. NAT (Network Address Translation)
    Vários dispositivos internos compartilham o mesmo IP público.
    Para o servidor, múltiplos usuários legítimos passam a parecer uma única máquina disparando diversas requisições simultâneas.
  2. Execuções Paralelas do Cliente
    Mesmo um único aplicativo pode enviar várias chamadas REST em sequência (por exemplo, ao atualizar dezenas de registros de uma vez).
    Em redes normais isso é transparente, mas sob inspeção corporativa, todas essas chamadas podem ser liberadas ao mesmo tempo.

4. O Outro Lado: Quando a Segurança Interpreta Segurança Como Ataque

Do lado do servidor, a configuração do NGINX era deliberadamente rígida, visando proteger contra floods e automações indevidas:

limit_req_zone $binary_remote_addr zone=req_zone:10m rate=20r/s;
limit_req zone=req_zone burst=20 nodelay;

Essa configuração é padrão em ambientes com múltiplos clientes, pois evita sobrecarga e ataques automatizados. O problema é que, quando uma rede corporativa libera várias requisições de uma vez, o NGINX interpreta essa rajada como um ataque coordenado, emitindo erro 429 (“Too Many Requests”).

Do ponto de vista do servidor, tudo estava correto.
Do ponto de vista do usuário, o sistema parecia falhar de forma aleatória.


5. A Correção: Segurança Inteligente em Vez de Segurança Cega

A solução não foi relaxar a segurança, mas torná-la mais inteligente.
Em vez de rejeitar as rajadas, o NGINX passou a aceitá-las e processá-las com um pequeno atraso interno:

limit_req_zone $binary_remote_addr zone=req_zone:10m rate=50r/s;
limit_req zone=req_zone burst=100 delay=2;

Agora, quando várias requisições chegam quase simultaneamente, o servidor as coloca em fila e processa de forma cooperativa, sem bloqueá-las.

O resultado foi imediato:

  • Nenhum erro 429.
  • Nenhuma queda.
  • Nenhum impacto perceptível no tempo de resposta.

6. A Lição: Camadas de Segurança Também Precisam Conversar

Este caso ensina algo fundamental:

A segurança é relacional, não isolada.

Uma política de segurança pode ser perfeita sozinha, mas ao interagir com outra igualmente segura, pode gerar um falso positivo.

Foi exatamente o que ocorreu aqui:

  • Do lado do servidor, um mecanismo legítimo de proteção contra ataques.
  • Do lado da empresa, uma rede corporativa cuidadosamente protegida.

O resultado? Um falso positivo de segurança.
Nenhum dos lados estava errado — apenas rígidos demais, ao mesmo tempo.


7. Reflexão Final

Na engenharia de software e infraestrutura, robustez não é sinônimo de rigidez. A verdadeira robustez está em entender o contexto, em reconhecer que nem toda anomalia é ameaça, e que cooperar é tão importante quanto proteger.

O ajuste no NGINX foi pequeno — mas o aprendizado foi grande.
Descobrimos que a segurança não é uma muralha, e sim uma ponte: precisa ser forte, mas flexível o suficiente para permitir que o que é legítimo continue fluindo.


TheCodeNaked Case Study — Outubro de 2025
Tema: Segurança cooperativa e interoperabilidade entre camadas.
Tags: SegurançaNGINXInspeção HTTPSDelphi REST APIFalso PositivoRedes CorporativasClean Architecture.

Sobre o autor

TheCodeNaked

No TheCodeNaked, programar é consequência, não ponto de partida. Antes do código, vem a dúvida, a análise, o contexto. Não seguimos fórmulas — questionamos. Criar software é pensar com clareza. O resto é só digitação.

TheCodeNaked

Criar com clareza. Codificar com intenção.

TheCodeNaked

Ótimo! Você se inscreveu com sucesso.

Bem-vindo de volta! Você acessou com sucesso.

Você se inscreveu com sucesso o TheCodeNaked.

Sucesso! Verifique seu e-mail para acessar com o link mágico.

As suas informações de faturamento foram atualizadas.

Seu pagamento não foi atualizado