NgixProxy_Pathfinder/README.md

163 lines
5.1 KiB
Markdown

# 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:
```bash
./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/`.
1. **Crie o arquivo de configuração**:
Crie um arquivo `.conf` em `conf.d/` (ex: `meusite.com.br.conf`). Use um dos arquivos existentes como modelo.
**Modelo Básico (com SSL):**
```nginx
# 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;
}
}
```
2. **Aplique as alterações**:
```bash
docker compose restart nginx-proxy
```
*No 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.conf` para ajustar os limites de requisições por segundo.
- **Bloqueio de Bots**: Edite `snippets/security_maps.conf` para adicionar novos User-Agents à lista negra.
- **Cache**: Edite `snippets/cache_zones.conf` para definir novas zonas ou tempos de cache.
### 3.1. Modificar Regras do WAF (ModSecurity)
O WAF agora utiliza uma estrutura modular de regras localizada na pasta `modsec_rules/`.
- **Arquivos Específicos**: Regras para Gitea, Nextcloud, Exchange, Zabbix, etc. ficam em seus respectivos arquivos `.conf`.
- **Global**: `global-exceptions.conf` contém apenas whitelists de rede interna.
- **Aplicação**: Após editar qualquer regra, reinicie o container do WAF para aplicar:
```bash
docker compose restart modsecurity
```
> **Nota Técnica**: O arquivo `modsec.conf.template` na raiz é injetado no container durante o boot para contornar problemas de permissão e garantir o carregamento das regras customizadas.
### 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:
```bash
docker compose logs nginx-proxy | grep "SSL"
```
- **Forçar Renovação**:
Se precisar renovar um certificado imediatamente:
```bash
docker compose exec nginx-proxy /scripts/renew_ssl.sh
```
- **Reload sem Downtime (Recomendado)**:
Para aplicar alterações de configuração (vhosts, SSL) sem derrubar conexões ativas:
```bash
./scripts/reload.sh
```
### 5. Monitorar e Debugar
- **Verificar Status dos Containers**:
```bash
docker compose ps
```
- **Ver Logs em Tempo Real**:
```bash
docker compose logs -f
```
- **Verificar se o WAF (ModSecurity) bloqueou algo**:
```bash
docker compose logs modsecurity | grep "Access denied"
```
- **Verificar Banimentos do Fail2ban**:
```bash
docker compose exec fail2ban fail2ban-client status nginx-badbots
```
---
## 🏗️ Visão Geral da Stack
```mermaid
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*