Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

03 - Firewall e Security Groups

#firewall#nacl#security-groups#vpc#waf
video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Firewall e Security Groups

Firewalls são o controle de tráfego da rede: decidem o que entra, o que sai e o que é inspecionado no caminho, e em arquitetura de produção eles são a primeira linha de contenção quando a aplicação falha. A diferença conceitual central do tema é stateful contra stateless: um firewall com estado entende conexões e permite automaticamente o retorno do fluxo que ele autorizou, enquanto um firewall sem estado avalia cada pacote isoladamente e exige regra explícita para os dois sentidos. Na AWS, essa distinção se materializa em dois instrumentos complementares: os security groups, com estado, aplicados por instância ou interface de rede, e as network ACLs, sem estado, aplicadas por sub-rede. A relevância arquitetural está no princípio do menor privilégio aplicado à rede: o desenho deve permitir apenas o necessário, com origem identificada, e qualquer permissão ampla é dívida de segurança que se acumula silenciosa. O WAF entra como camada complementar, acima da rede, avaliando o conteúdo da requisição HTTP, e a combinação dos três níveis é o que constitui defesa em profundidade real.

Conceito: stateful versus stateless

O firewall stateful mantém tabela de conexões: quando a regra autoriza a conexão de entrada na porta 443, o pacote de retorno é aceito automaticamente, porque a conexão já existe na tabela. Isso simplifica radicalmente as regras, pois só o sentido iniciante precisa ser declarado, e habilita recursos que dependem do contexto, como identificar tráfego relacionado em FTP e rastrear tempo de vida de sessão.

O firewall stateless não guarda contexto: cada pacote é avaliado sozinho contra a lista de regras, na ordem numérica, e a primeira regra que casa define a ação. Para uma conexão de entrada funcionar, a ACL precisa permitir o pacote de entrada e o pacote de resposta de saída, o que significa regra para a porta de destino e regra para a faixa de portas efêmeras de retorno.

A consequência operacional é direta: regras stateless são mais verbosas, mais propensas a erro e mais difíceis de auditar, mas o custo por pacote é menor e o comportamento é determinístico, sem risco de estouro de tabela de sessões sob ataque. Por isso, o padrão arquitetural na AWS usa a NACL como cinto de segurança bruto na borda da sub-rede, bloqueando CIDRs maliciosos conhecidos, e os security groups como política fina por workload.

Aspecto Security Group (stateful) Network ACL (stateless)
Escopo de aplicação Instância ou interface de rede Sub-rede inteira
Estado de conexão Retorno permitido automaticamente Regra explícita nos dois sentidos
Avaliação de regras Todas as regras são avaliadas Primeira regra que casa decide
Permitem ou negam Só permitem, negação implícita Permitem e negam explicitamente
Número de regras Dezenas por grupo Numeração de 1 a 32766
Caso ideal Política por aplicação e porta Bloqueio bruto de CIDR na borda

Security groups em profundidade

O security group é um firewall virtual com estado associado a instâncias EC2, interfaces elásticas, Lambda em VPC, RDS, ElastiCache e outros serviços. Ele só permite, nunca nega: tudo que não está explicitamente permitido é bloqueado, e a regra declara protocolo, faixa de porta e origem, que pode ser CIDR, prefix list ou outro security group.

A referência entre security groups é o recurso que muda a qualidade do desenho: em vez de permitir a porta 5432 a partir do CIDR da VPC inteira, a regra permite a porta 5432 a partir do security group da camada de aplicação. O resultado é que a permissão acompanha a identidade do workload, e não a topologia, e novas instâncias da aplicação herdam o acesso automaticamente sem tocar em regra nenhuma.

O grupo de saída é a metade esquecida: o default permite tudo para fora, e ambientes maduros o restringem para os destinos reais, como endpoints de serviço da AWS, DNS e ranges de integração. Restringir saída reduz a capacidade de exfiltração de dados e limita a blast radius de uma invasão, e é um dos itens de auditoria mais recorrentes em frameworks de compliance.

# Desenho de três camadas com security groups encadeados (Terraform)
resource "aws_security_group" "alb_publico" {
  name   = "sg-alb-publico"
  vpc_id = aws_vpc.principal.id

  ingress {
    description = "HTTPS do mundo, terminado no balanceador"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    description = "Saida apenas para a camada de aplicacao"
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    security_groups = [aws_security_group.app.id]
  }
}

resource "aws_security_group" "app" {
  name   = "sg-camada-app"
  vpc_id = aws_vpc.principal.id

  # Aceita trafego SOMENTE do security group do balanceador,
  # e nao do CIDR da VPC: a origem e a identidade, nao a topologia
  ingress {
    description     = "API vindas apenas do ALB"
    from_port       = 8080
    to_port         = 8080
    protocol        = "tcp"
    security_groups = [aws_security_group.alb_publico.id]
  }

  egress {
    description = "Acesso ao banco e endpoints AWS"
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    security_groups = [aws_security_group.banco.id]
  }
}

resource "aws_security_group" "banco" {
  name   = "sg-camada-banco"
  vpc_id = aws_vpc.principal.id

  ingress {
    description     = "PostgreSQL apenas da camada de aplicacao"
    from_port       = 5432
    to_port         = 5432
    protocol        = "tcp"
    security_groups = [aws_security_group.app.id]
  }
}

Network ACLs em profundidade

A network ACL opera na borda da sub-rede e avalia todo pacote que entra e sai dela, sem exceção, incluindo tráfego entre instâncias da mesma sub-rede que se comunica via gateway. Cada sub-rede está associada a exatamente uma ACL, e a ACL default da VPC permite todo tráfego de entrada e saída, o que faz com que sua existência seja invisível até alguém criar regra.

As regras são numeradas de 10 em 10 por convenção, avaliadas da menor para a maior, e a primeira que casa determina a decisão, o que permite reservar números no meio para inserções futuras. A regra declara protocolo, faixa de portas, origem ou destino CIDR e ação de allow ou deny, e o deny explícito é a capacidade que o security group não tem: negar um CIDR específico antes de qualquer regra de permissão.

O fluxo de retorno é a pegadinha clássica da NACL: um cliente na sub-rede A conecta em um servidor na porta 443 e o sistema operacional escolhe uma porta efêmera de retorno, geralmente na faixa 1024 a 65535. A ACL da sub-rede do cliente precisa permitir entrada na 443 e saída na faixa efêmera, e a ACL da sub-rede do servidor o espelho, e restringir demais essa faixa quebra conexões de forma intermitente, conforme a porta sorteada.

O uso produtivo recomendado é contido: bloquear na borda os CIDRs conhecidos como maliciosos, fechar protocolos proibidos por política corporativa, como SMB saindo para a internet, e deixar a política fina para os security groups. Replicar em NACL a política completa por aplicação cria manutenção dupla e erros sutis de retorno.

Firewall de appliance e WAF

Entre os dois extremos existe a terceira camada: firewalls de inspeção, como os appliances virtuais atrás do Gateway Load Balancer, que analisam o conteúdo do pacote, detectam intrusão e aplicam política de rede corporativa em tráfego criptografado com TLS inspection. Esse nível é exigência em ambientes regulados de alta criticidade e tem custo de latência e de licença que precisa entrar na arquitetura.

O WAF opera acima de tudo isso: ele não vê pacote, ele vê requisição HTTP. Regras do AWS WAF no ALB, no CloudFront ou no API Gateway filtram SQL injection, cross-site scripting, padrões de user-agent, limites de taxa por IP e geo-bloqueio, e o bot control distingue tráfego humano de automação. O WAF também é stateful por requisição e cobra por regra e por requisição, o que incentiva conjuntos de regras enxutos e bem testados.

A divisão de responsabilidades correta é: NACL bloqueia endereço na borda, security group define quem alcança qual porta, WAF decide se a requisição HTTP é legítima, e o appliance de inspeção cobre os casos de conteúdo no pacote. Cada camada falha de forma independente, e é essa sobreposição que caracteriza defesa em profundidade, não a quantidade de ferramentas.

Diagnóstico de conexão recusada

O sintoma mais comum de erro de firewall é o timeout de conexão, e a ordem de investigação economiza horas. O timeout em nível de TCP indica pacote descartado silenciosamente, comportamento típico de security group bloqueando, enquanto connection refused indica resposta ativa de que a porta está fechada, o que normalmente significa processo parado no destino e não regra de rede. Nomes de erro diferentes apontam para camadas diferentes, e essa distinção é o primeiro passo.

# Testa a porta do destino a partir de uma maquina na mesma posicao de rede
nc -zv 10.0.2.15 8080

# Timeout com regra certa no SG indica processo parado; refused indica porta fechada
curl -v --connect-timeout 5 http://app-interna.exemplo.com.br:8080/healthz

# Rastreia onde o pacote morre na cadeia de roteamento
traceroute -T -p 8080 10.0.2.15

# No destino, confirma se o processo escuta na interface e porta esperadas
ss -tlnp | grep 8080

A sequência estruturada parte do destino para a borda: confirmar que o processo escuta na porta, confirmar o security group do destino com a origem correta, confirmar a NACL da sub-rede nos dois sentidos, inclusive a faixa efêmera, e confirmar a tabela de rotas da origem. Ferramentas de análise de alcance, como Reachability Analyzer na AWS, automatizam esse raciocínio e mostram qual componente rejeita o caminho, incluindo qual regra específica bloqueou o pacote.

Erros comuns e boas práticas

  • Regra de origem em CIDR largo: permitir o CIDR da VPC inteira destrói o isolamento entre camadas; referencie security groups, e não topologia.
  • Grupo de saída sempre 0.0.0.0/0: saída irrestrita facilita exfiltração e viola benchmarks de segurança; declare os destinos reais.
  • Replicar política completa na NACL: duplicidade com security group gera manutenção dupla e intermitência difícil de diagnosticar na faixa efêmera.
  • Números de regra NACL sem espaçamento: regras de 1 em 1 impedem inserção futura; numere de 10 em 10 e documente o esquema.
  • Auditoria sem automação: revisão manual de security group envelhece em semanas; use ferramentas de análise de configuração e alerta de regra em 0.0.0.0/0.
  • WAF sem modo de contagem antes do bloqueio: ativar regra em modo de bloqueio de imediato bloqueia cliente legítimo; conte primeiro, analise falso positivo e bloqueie depois.
  • Exceção permanente virando permanente: regra aberta para debug sem data de validade é a origem recorrente de incidente; toda exceção leva vencimento e dono.

A boa prática estrutural é tratar regra de rede como código revisado: security groups e ACLs declarados em IaC, com pull request, validação automatizada de regra perigosa e etiqueta de dono. A meta arquitetural é que o desenho da rede declare a intenção do negócio em termos de fluxo permitido, e que qualquer tráfego fora do desenho seja exceção visível, rastreável e temporária.