147 lines
5.2 KiB
Markdown
147 lines
5.2 KiB
Markdown
# 🛡️ Nginx Pathfinder Proxy
|
|
|
|
Este repositório é o núcleo de inteligência e configuração do **Pathfinder Proxy**, instalado nativamente em **Ubuntu 24.04**. Ele combina performance extrema (HTTP/3, Brotli) com um motor de segurança multicamadas (PSDE + WAF + Fail2Ban).
|
|
|
|
---
|
|
|
|
## 🏗️ Estrutura de Pastas e Componentes
|
|
|
|
A configuração é modular para permitir manutenção rápida e alta disponibilidade.
|
|
|
|
- `nginx.conf`: O "cérebro" global. Configura workers, logs JSON e carrega os módulos dinâmicos.
|
|
- `conf.d/`: Contém as definições de cada site (**VHosts**).
|
|
- `snippets/`: Componentes reutilizáveis (SSL, Proxy, Cache, WAF).
|
|
- `modsec/`: Configuração do ModSecurity e regras do **OWASP Core Rule Set**.
|
|
- `dynamic/`: Arquivos modificados em tempo real (ex: `blacklist.conf` pelo Fail2Ban).
|
|
|
|
---
|
|
|
|
## 🧩 Guia de Snippets (Uso Obrigatório)
|
|
|
|
Para garantir o **Padrão Ouro**, todo site deve incluir os snippets básicos:
|
|
|
|
1. `include snippets/ssl_params.conf;`: Ativa TLS 1.3, HSTS e anuncia **HTTP/3 (QUIC)**.
|
|
2. `include snippets/proxy_params.conf;`: Headers padrão para o backend não perder o IP real do cliente.
|
|
3. `include snippets/modsecurity.conf;`: Ativa o WAF e a Blacklist dinâmica.
|
|
4. `include snippets/security_actions.conf;`: Toma a decisão final de bloquear (`444`) se o motor PSDE detectar risco alto.
|
|
5. `include snippets/cache_optimizer.conf;`: Otimiza a entrega de estáticos com cache inteligente.
|
|
|
|
---
|
|
|
|
## 🧠 Motor de Segurança PSDE (Pathfinder Security Engine)
|
|
|
|
Diferente de firewalls comuns, o Pathfinder usa o `security_maps.conf` para calcular um **Security Score** em tempo real baseado em:
|
|
- **Bad Bots:** Crawlers maliciosos e ferramentas de scan.
|
|
- **Suspicious URIs:** Tentativas de acesso a `.env`, `wp-admin`, `.git`, etc.
|
|
- **Methods:** Bloqueio de métodos HTTP incomuns em rotas sensíveis.
|
|
- **Risk Level:** Traduz o score em níveis (Limpo, Suspeito, Crítico) para os logs JSON.
|
|
|
|
---
|
|
|
|
## 🏆 Padrões Ouro de Configuração
|
|
|
|
### 1. Servidor de Arquivos (Performance & Caching)
|
|
Focado em minimizar uso de CPU e maximizar I/O.
|
|
```nginx
|
|
location /files/ {
|
|
sendfile on;
|
|
tcp_nopush on;
|
|
aio on;
|
|
directio 512;
|
|
include snippets/cache_optimizer.conf;
|
|
proxy_cache_valid 200 30d; # Cache longo
|
|
add_header Content-Disposition "attachment"; # Força download
|
|
}
|
|
```
|
|
|
|
### 2. Streaming de Vídeo (Continuidade & Buffer)
|
|
Evita travamentos e economiza banda com suporte a *Range Requests*.
|
|
```nginx
|
|
location /stream/ {
|
|
proxy_pass http://backend;
|
|
proxy_set_header Range $http_range;
|
|
proxy_set_header If-Range $http_if_range;
|
|
proxy_cache_key "$host$request_uri$http_range";
|
|
|
|
# Tuning de Buffer para vídeo
|
|
proxy_buffers 32 16k;
|
|
proxy_buffer_size 64k;
|
|
proxy_read_timeout 300s;
|
|
}
|
|
```
|
|
|
|
### 3. API Pesada / Traccar (Real-time & WebSocket)
|
|
Focado em manter conexões persistentes e rate limiting agressivo.
|
|
```nginx
|
|
location /api/ {
|
|
proxy_pass http://backend;
|
|
|
|
# Suporte a WebSocket (Vital para Traccar/Mobile)
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
|
|
# Rate Limit Estreito para APIs
|
|
limit_req zone=global_limit burst=20 nodelay;
|
|
|
|
# Timeouts curtos para liberar recursos
|
|
proxy_connect_timeout 5s;
|
|
proxy_send_timeout 30s;
|
|
proxy_read_timeout 30s;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Workflow Operacional: Ativando um Novo Site
|
|
|
|
Siga este procedimento para colocar um novo sistema no ar com segurança máxima:
|
|
|
|
### 1. Preparação no Repositório (Local)
|
|
1. Crie o arquivo `nginx/conf.d/nome-do-site.conf` seguindo o **Padrão Ouro**.
|
|
2. **Atenção:** Aponte os caminhos de certificado para `/etc/letsencrypt/live/nome-do-site/`.
|
|
3. Faça o commit e push para a branch `producao`.
|
|
|
|
### 2. Sincronização no Servidor (SSH)
|
|
1. Entre no servidor e vá para `/etc/nginx`.
|
|
2. Execute `sudo git pull origin producao`.
|
|
3. Valide a sintaxe: `sudo nginx -t`.
|
|
4. Recarregue o Nginx: `sudo systemctl reload nginx`.
|
|
|
|
---
|
|
|
|
## 🔐 Gestão de SSL (Let's Encrypt)
|
|
|
|
O Pathfinder Proxy usa o desafio **HTTP-01** via snippet `acme_challenge.conf`. Isso permite emitir certificados sem parar o Nginx.
|
|
|
|
### Emissão do Primeiro Certificado
|
|
Rode o comando abaixo substituindo o domínio:
|
|
```bash
|
|
sudo certbot certonly --webroot -w /var/lib/letsencrypt/ -d meusite.com.br -d www.meusite.com.br
|
|
```
|
|
*O Certbot criará o arquivo de validade na pasta `/var/lib/letsencrypt/` e o Nginx enviará para o Let's Encrypt através do snippet de ACME.*
|
|
|
|
### Automação de Renovação (Configuração Única)
|
|
Para que o Nginx atualize os certificados automaticamente, o sistema foi configurado com um **Post-Hook**. Toda vez que o Certbot renovar um certificado, o Nginx fará um reload.
|
|
|
|
**Verificar se o hook está ativo:**
|
|
`cat /etc/letsencrypt/cli.ini` (Deve conter `post-hook = systemctl reload nginx`)
|
|
|
|
---
|
|
|
|
## 🚀 Como Operar
|
|
|
|
### Sincronização
|
|
As alterações feitas aqui devem ser enviadas para a branch `producao`. No servidor, a sincronização é feita via `git pull` na pasta `/etc/nginx`.
|
|
|
|
### Validação
|
|
Sempre teste a configuração antes do reload:
|
|
```bash
|
|
sudo nginx -t
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
### Logs
|
|
Para auditoria de segurança, use o log JSON:
|
|
`tail -f /var/log/nginx/access_json.log | jq` (necessário instalar o `jq`)
|