# 🛡️ 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 os comandos abaixo (substitua o domínio): 1. **Criar pasta de desafios (se não existir):** ```bash sudo mkdir -p /var/lib/letsencrypt && sudo chown www-data:www-data /var/lib/letsencrypt ``` 2. **Gerar o certificado:** ```bash sudo certbot certonly --webroot -w /var/lib/letsencrypt/ -d meusite.com.br -d www.meusite.com.br ``` > [!TIP] > **Atenção aos Caminhos:** Se o Certbot gerar uma pasta com final `-0001`, certifique-se de que o arquivo `.conf` do seu site em `/etc/nginx/conf.d/` aponta para o caminho exato gerado por ele. Você pode conferir os caminhos ativos com `sudo certbot certificates`. ### Automação de Renovação (Configuração Única) Para que o Nginx atualize os certificados automaticamente, o sistema usa 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`)