diff --git a/nginx/sites-available/unifi.itguys.com.br.conf b/nginx/sites-available/unifi.itguys.com.br.conf index be24cf7..af9a21b 100644 --- a/nginx/sites-available/unifi.itguys.com.br.conf +++ b/nginx/sites-available/unifi.itguys.com.br.conf @@ -1,104 +1,136 @@ -# ============================================================================== -# ARQUIVO: /etc/nginx/sites-available/unifi.itguys.com.br.conf (VERSÃO MINIMALISTA) -# AUTOR: Gemini (Especialista NGINX) -# DATA: 21/09/2025 +# ================================================================================================= +# ARQUIVO DE CONFIGURAÇÃO NGINX PARA O UNIFI NETWORK CONTROLLER # -# DESCRIÇÃO: -# Configuração MÍNIMA e EXPLÍCITA para diagnóstico do UniFi Controller. -# REMOVEMOS toda a complexidade (cache, múltiplas locations, snippets) para -# focar em estabelecer a comunicação básica com o backend. -# ============================================================================== +# OBJETIVO: +# Atuar como um proxy reverso seguro para a interface web do UniFi Controller. +# +# URL: https://unifi.com.br +# Backend: https://172.16.254.123:8443 +# +# PRINCIPAIS CARACTERÍSTICAS DESTA CONFIGURAÇÃO: +# +# 1. SEM CACHE (Versão Inicial): +# - Esta configuração desativa intencionalmente todo tipo de cache (`proxy_buffering off`, +# `proxy_cache off`) e envia headers (`Cache-Control`, `Expires`) para instruir +# navegadores e proxies a não armazenarem nada em cache. Isso é fundamental para +# testar e validar que toda a comunicação com o backend está funcionando +# corretamente antes de introduzir otimizações. +# +# 2. SUPORTE A WEBSOCKETS: +# - O UniFi Controller utiliza WebSockets para comunicação em tempo real (atualização de +# dispositivos, alertas, estatísticas e autenticação, incluindo 2FA). As diretivas +# `Upgrade` e `Connection` na seção de proxy são essenciais para que essa +# comunicação persistente funcione através do NGINX. Um timeout de leitura +# elevado (`proxy_read_timeout`) previne que conexões ativas sejam encerradas +# prematuramente. +# +# 3. SEGURANÇA (SSL/TLS E HEADERS): +# - Redirecionamento automático de HTTP para HTTPS. +# - Configuração de SSL/TLS baseada nas recomendações modernas (Mozilla Intermediate), +# priorizando protocolos e cifras seguras (TLSv1.2, TLSv1.3). +# - HSTS (Strict-Transport-Security) para forçar o navegador a usar apenas HTTPS. +# - Inclusão de headers de segurança para mitigar ataques como Clickjacking +# (X-Frame-Options) e Cross-Site Scripting (X-XSS-Protection). +# +# BLOCOS DE CONFIGURAÇÃO: +# +# - server (porta 80): Redireciona todo o tráfego HTTP para HTTPS. +# - server (porta 443): Bloco principal que lida com o tráfego HTTPS. +# - ssl_*: Diretivas de configuração do certificado e segurança TLS. +# - location /: Define como as requisições são encaminhadas (proxy) para o +# backend do UniFi Controller. +# +# AUTOR: Gemini (Especialista NGINX) +# VERSÃO: 1.0 (Base, sem cache) +# ================================================================================================= -upstream unifi_backend_web { - server 172.16.254.123:8443; -} - -upstream unifi_backend_inform { - server 172.16.254.123:8080; -} - -# ============================================================================== -# BLOCO 1: Redirecionamento de HTTP (porta 80) para HTTPS -# ============================================================================== +# --- Bloco 1: Redirecionamento de HTTP para HTTPS --- +# Redireciona permanentemente (301) qualquer tentativa de acesso via HTTP +# para a versão segura (HTTPS), garantindo que a comunicação seja sempre criptografada. server { listen 80; listen [::]:80; - server_name unifi.itguys.com.br; + server_name unifi.com.br; - location /.well-known/acme-challenge/ { - root /var/www/html; + # Para renovação do Certbot (Let's Encrypt) + location ~ /.well-known/acme-challenge/ { + allow all; + root /var/www/html; # Ajuste este caminho se necessário } + location / { return 301 https://$host$request_uri; } } -# ============================================================================== -# BLOCO 2: Servidor Principal - Proxy Reverso para a Interface Web (HTTPS) -# ============================================================================== +# --- Bloco 2: Configuração Principal do Servidor HTTPS --- +# Este é o bloco principal que serve o conteúdo do UniFi Controller via HTTPS. server { listen 443 ssl http2; listen [::]:443 ssl http2; - server_name unifi.itguys.com.br; + server_name unifi.com.br; - # --- CONFIGURAÇÕES DE SSL --- - ssl_certificate /etc/letsencrypt/live/unifi.itguys.com.br/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/unifi.itguys.com.br/privkey.pem; - include /etc/nginx/snippets/ssl_params.conf; + # --- Configurações de SSL/TLS --- + # Substitua pelos caminhos corretos do seu certificado. + # Se usar Certbot, os caminhos serão algo como: + # ssl_certificate /etc/letsencrypt/live/unifi.com.br/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/unifi.com.br/privkey.pem; + ssl_certificate /caminho/para/seu/certificado/fullchain.pem; + ssl_certificate_key /caminho/para/seu/certificado/privkey.pem; - # --- LOGS --- - access_log /var/log/nginx/unifi.itguys.com.br.access.log; - error_log /var/log/nginx/unifi.itguys.com.br.error.log warn; - - # --- ROTA ÚNICA E EXPLÍCITA PARA TODA A APLICAÇÃO --- + # Configurações de segurança TLS baseadas nas recomendações da Mozilla + # (Consulte: https://wiki.mozilla.org/Security/Server_Side_TLS) + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 1d; + ssl_session_tickets off; + ssl_dhparam /etc/nginx/dhparam.pem; # Gere com: openssl dhparam -out /etc/nginx/dhparam.pem 4096 + + # --- Headers de Segurança --- + # HSTS (Strict-Transport-Security) - Força o navegador a usar HTTPS por 6 meses + add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always; + # Prevenção de Clickjacking + add_header X-Frame-Options "SAMEORIGIN" always; + # Prevenção de MIME-type sniffing + add_header X-Content-Type-Options "nosniff" always; + # Proteção contra XSS + add_header X-XSS-Protection "1; mode=block" always; + + # --- Bloco 3: Configuração do Proxy Reverso --- location / { - # --- CABEÇALHOS DEFINIDOS MANUALMENTE --- - # Protocolo e cabeçalhos para suporte a WebSocket + # --- Configurações do Proxy --- + # Endereço do seu UniFi Controller. + # IMPORTANTE: O UniFi Controller usa HTTPS na porta 8443, então o proxy_pass + # deve usar o esquema "https" + proxy_pass https://172.16.254.123:8443; + + # --- Headers para o Backend --- + # Repassa informações do cliente original para o backend, essencial para logs e + # funcionamento correto da aplicação. + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # --- Suporte a WebSocket --- + # Essencial para a comunicação em tempo real do UniFi (2FA, stats, etc). proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - # Cabeçalhos padrão (substituindo o snippet proxy_params.conf) - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - - # Cabeçalho de segurança CSRF do UniFi - proxy_set_header X-Csrf-Token $cookie_csrf_token; - - # --- CONFIGURAÇÕES DE CONEXÃO --- - # Medida de diagnóstico para evitar problemas com buffering + proxy_set_header Connection "Upgrade"; + + # Timeout longo para manter conexões WebSocket ativas. + proxy_read_timeout 86400s; # 24 horas + + # --- Desativação Explícita de Cache --- + # Garante que NGINX não fará buffer nem cache das respostas. proxy_buffering off; - - # Parâmetros para conexão com o backend HTTPS - proxy_ssl_verify off; - proxy_ssl_server_name on; - - proxy_pass https://unifi_backend_web; - } -} - -# ============================================================================== -# BLOCO 3: Servidor para o "Inform" dos Dispositivos (HTTP na porta 8080) -# ============================================================================== -server { - listen 8080; - listen [::]:8080; - server_name unifi.itguys.com.br; - - access_log /var/log/nginx/unifi-inform.log; - error_log /var/log/nginx/unifi-inform.error.log; - - location / { - # Definindo os cabeçalhos manualmente aqui também para consistência - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - - proxy_read_timeout 600s; - proxy_send_timeout 600s; - proxy_pass http://unifi_backend_inform; + proxy_cache off; + + # --- Headers de Controle de Cache para o Cliente --- + # Instrui o navegador a não fazer cache de nenhum conteúdo. + add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; + expires -1; } }