|
|
||
|---|---|---|
| .gemini | ||
| conf.d | ||
| fail2ban | ||
| legacy | ||
| modsec_rules | ||
| scripts | ||
| snippets | ||
| ssl | ||
| .dockerignore | ||
| .gitignore | ||
| Dockerfile | ||
| README.md | ||
| deploy.sh | ||
| docker-compose.yml | ||
| modsec_includes.conf | ||
| nginx.conf | ||
README.md
NGINX Pathfinder Proxy
Solução moderna de Proxy Reverso containerizado, construída com NGINX, ModSecurity WAF e automação de SSL.
🚀 Funcionalidades
🛡️ Segurança em Primeiro Lugar
- ModSecurity WAF: Conjunto de Regras OWASP (CRS) integrado rodando como proxy sidecar/frontend.
- Fail2ban: Serviço "cão de guarda" que bane IPs com comportamento suspeito (bots ruins, excesso de erros 4xx/5xx).
- Mapas de Segurança: Bloqueio automatizado de User-Agents maliciosos e restrições de rede interna.
⚡ Performance
- HTTP/3 (QUIC): Habilitado para conexões modernas de baixa latência.
- Compressão Brotli: Melhores taxas de compressão que o Gzip padrão.
- Headers More: Manipulação avançada de cabeçalhos para respostas limpas.
🔒 SSL Automatizado
- Renovação Zero-Touch: O Certbot integrado verifica a validade diariamente.
- Auto-Renovação: Renova automaticamente certificados próximos do vencimento (<= 3 dias).
- Injeção Inteligente: Injeta automaticamente os snippets de desafio ACME nas configurações dos sites.
🛠️ Como Trabalhar neste Repositório
Pré-requisitos
- Docker & Docker Compose instalados
- Acesso à internet (para baixar imagens e validar SSL)
1. Implantar o Servidor (Deploy)
Para iniciar toda a infraestrutura:
./deploy.sh
Este script detecta seu IP público, configura o ambiente e sobe os containers.
2. Adicionar um Novo Site
Todas as configurações de sites ficam na pasta conf.d/.
-
Crie o arquivo de configuração: Crie um arquivo
.confemconf.d/(ex:meusite.com.br.conf). Use um dos arquivos existentes como modelo.Modelo Básico (com SSL):
# Backend (para onde vai o tráfego) upstream meu_backend { server 192.168.1.10:8080; } # Redirecionamento HTTP -> HTTPS server { listen 80; server_name meusite.com.br; include /etc/nginx/snippets/acme_challenge.conf; # Importante para SSL return 301 https://$host$request_uri; } # Bloco HTTPS server { listen 443 ssl; http2 on; server_name meusite.com.br; ssl_certificate /etc/nginx/ssl/meusite.com.br.crt; ssl_certificate_key /etc/nginx/ssl/meusite.com.br.key; include /etc/nginx/snippets/ssl_params.conf; location / { proxy_pass http://meu_backend; include /etc/nginx/includes/proxy_backend.conf; } } -
Aplique as alterações:
docker compose restart nginx-proxyNo reinício, o script de pre-flight validará o DNS e injetará configurações de SSL necessárias.
3. Modificar Configurações Globais
As configurações globais são modularizadas na pasta snippets/.
- Rate Limiting: Edite
snippets/rate_limit.confpara ajustar os limites de requisições por segundo. - Bloqueio de Bots: Edite
snippets/security_maps.confpara adicionar novos User-Agents à lista negra. - Cache: Edite
snippets/cache_zones.confpara definir novas zonas ou tempos de cache.
4. Gerenciar Certificados SSL
O sistema gerencia isso automaticamente, mas você pode intervir manualmente se necessário.
-
Verificar Validade: Verifique os logs do startup para ver o status de todos os domínios:
docker compose logs nginx-proxy | grep "SSL" -
Forçar Renovação: Se precisar renovar um certificado imediatamente:
docker compose exec nginx-proxy /scripts/renew_ssl.sh
5. Monitorar e Debugar
-
Verificar Status dos Containers:
docker compose ps -
Ver Logs em Tempo Real:
docker compose logs -f -
Verificar se o WAF (ModSecurity) bloqueou algo:
docker compose logs modsecurity | grep "Access denied" -
Verificar Banimentos do Fail2ban:
docker compose exec fail2ban fail2ban-client status nginx-badbots
🏗️ Visão Geral da Stack
graph LR
Internet((Internet)) --> WAF[Container ModSecurity]
WAF -- Tráfego Limpo --> Proxy[Container NGINX Proxy]
Proxy --> Backend1[App 1]
Proxy --> Backend2[App 2]
Logs[Logs Compartilhados]
WAF -.-> Logs
Proxy -.-> Logs
F2B[Container Fail2ban]
F2B -- Lê --> Logs
F2B -- Bane IP --> WAF
Mantido por IT Guys