📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 12: Desenvolvimento Seguro. Recomendado revisar antes de começar.
v1.0 — Engenharia de Software & Práticas Profissionais
Trilha de Especialização Pedagógica
- Tecnologias: Nginx WAF, ModSecurity, JWKS, JWT Rotation, Rate Limiting, Zero Trust
- Arquivo Principal:
security_gateway.py
Arquitetura de proteção perimetral com Web Application Firewall (WAF), mitigação de ataques de força bruta com Token Bucket Rate Limiting e rotação periódica de chaves públicas/privadas JWT via JWKS (JSON Web Key Set).
import time
class RateLimiter:
def __init__(self, limite_por_minuto=60):
self.limite = limite_por_minuto
self.requisicoes = {}
def permitir(self, ip_origem: str) -> bool:
agora = time.time()
historico = self.requisicoes.get(ip_origem, [])
# Filtra apenas o ultimo minuto
historico = [t for t in historico if agora - t < 60]
if len(historico) >= self.limite:
return False
historico.append(agora)
self.requisicoes[ip_origem] = historico
return True
if __name__ == "__main__":
limiter = RateLimiter(limite_por_minuto=5)
ip = "192.168.1.50"
for i in range(7):
permitido = limiter.permitir(ip)
print(f"Requisicao {i+1} de {ip}: {'PERMITIDA' if permitido else 'BLOQUEADA (429 Too Many Requests)'}")
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd seguranca_04_waf_rate_limiting_jwt
docker-compose up -d
python audit_security.py
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/seguranca_04_waf_rate_limiting_jwt
A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta sec-python/:
flowchart TD
subgraph Entrada["Camada de Entrada & CLI"]
IN1["Interface de Comando / API"] --> IN2["Parser & Sanitização"]
end
subgraph Dominio["Camada de Domínio & Regras"]
DM1["Modelos de Domínio"] --> DM2["Processamento Algorítmico"]
end
subgraph Armazenamento["Persistência & Recursos"]
ST1["Banco de Dados / Arquivo"] --> ST2["Transações ACID & Logs"]
end
subgraph Qualidade["Validação & Qualidade"]
QA1["Testes Automatizados"] --> QA2["Checkpoints CP-01..05 PASS"]
end
Entrada --> Dominio
Dominio --> Armazenamento
Armazenamento --> Qualidade
style Entrada fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
style Dominio fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
style Armazenamento fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px
| ID | Persona | História de Usuário | Critério de Aceite | Prioridade |
|---|---|---|---|---|
| US-01 | Engenheiro de Borda | Desejo Web Application Firewall (WAF) inspecionando requisições | Filtragem de padrões maliciosos em headers, query params e bodies | Alta |
| US-02 | Arquiteto de APIs | Desejo rate limiting por IP/token usando algoritmo Token Bucket | Prevenção de ataques de negação de serviço (DoS) e força bruta | Alta |
| US-03 | Desenvolvedor de Segurança | Desejo emissão e validação de tokens JWT com expiração e rotação | Suporte a Access Token curto e Refresh Token com revogação em blacklist | Alta |
| US-04 | Operador de SOC | Desejo telemetria e alertas em tempo real de requisições bloqueadas | Logs estruturados em JSON contendo IP, motivo do bloqueio e timestamp | Média |
| US-05 | Auditor de Gateways | Desejo testes de estresse validando comportamento sob rajadas de tráfego | Testes unitários assegurando retorno HTTP 429 Too Many Requests quando excedido | Média |
| ID | Descrição do Requisito | Criticidade |
|---|---|---|
| RF-01 | Motor de regras WAF com detecção de padrões anômalos e assinaturas | Alta |
| RF-02 | Algoritmo de Rate Limiting Token Bucket com recarga contínua | Alta |
| RF-03 | Mecanismo completo de autenticação JWT com assinatura e rotação segura | Alta |
| RF-04 | Lista negra (blacklist) em memória para revogação imediata de tokens | Média |
| RF-05 | Suíte de testes de rajada e tentativa de evasão de filtros | Média |
| ID | Especificação Arquitetural | Criticidade |
|---|---|---|
| RNF-01 | Latência de inspeção de requisição inferior a 5ms por chamada | Alta |
| RNF-02 | Assinatura criptográfica segura prevenindo adulteração de claims | Alta |
| RNF-03 | Thread-safety garantido nas operações do bucket de tokens | Média |
| RNF-04 | Padrão de código limpo com separação em middlewares encadeáveis | Média |
| RNF-05 | Organização dos fontes na subpasta sec-python/ | Alta |
| User Story | Requisito Funcional | Requisito Não-Funcional | Módulo / Artefato de Código | Status de Homologação |
|---|---|---|---|---|
| US-01 | RF-01 |
RNF-01, RNF-02 |
sec-python/security_gateway.py |
Testado |
| US-02 | RF-02 |
RNF-01, RNF-03 |
sec-python/security_gateway.py |
Testado |
| US-03 | RF-03 |
RNF-02, RNF-04 |
sec-python/security_gateway.py |
Testado |
| US-04 | RF-04 |
RNF-02, RNF-04 |
sec-python/security_gateway.py |
Testado |
| US-05 | RF-05 |
RNF-01, RNF-05 |
sec-python/security_gateway.py |
Testado |
| Checkpoint | Escopo da Validação | Artefato Verificado | Status |
|---|---|---|---|
| CP-01 | Inicialização & Estrutura de Pastas | sec-python/ |
PASS ✅ |
| CP-02 | Modelagem de Domínio & Regras Centrais | Domain Models |
PASS ✅ |
| CP-03 | Persistência & Operações de I/O | Storage / Data |
PASS ✅ |
| CP-04 | Interface de Operação & Usabilidade | CLI / GUI / API |
PASS ✅ |
| CP-05 | Homologação com Suíte de Testes | Test Suite |
PASS ✅ |