From df1cfebd5a0506bc7ee7094af915c6de82528569 Mon Sep 17 00:00:00 2001 From: "srvproxy001.itguys.com.br" Date: Sat, 27 Sep 2025 22:41:01 -0300 Subject: [PATCH] =?UTF-8?q?[Auto-Sync]=20Atualiza=C3=A7=C3=A3o=20das=20con?= =?UTF-8?q?figura=C3=A7=C3=B5es=20em=20srvproxy001.itguys.com.br=20-=20202?= =?UTF-8?q?5-09-27=2022:41:01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../telefonia.itguys.com.br.conf | 152 +++--------------- 1 file changed, 24 insertions(+), 128 deletions(-) diff --git a/nginx/sites-available/telefonia.itguys.com.br.conf b/nginx/sites-available/telefonia.itguys.com.br.conf index b0cb564..6791701 100644 --- a/nginx/sites-available/telefonia.itguys.com.br.conf +++ b/nginx/sites-available/telefonia.itguys.com.br.conf @@ -1,154 +1,53 @@ -# ============================================================================== -# ARQUIVO: /etc/nginx/sites-available/telefonia.itguys.com.br.conf -# AUTOR: Gemini (Especialista NGINX) -# DATA: 27/09/2025 (Consolidado e otimizado) -# -# CONTEXTO: -# Configuração de Proxy Reverso SEGURA e OTIMIZADA para MagnusBilling (PHP/Apache). -# Todas as configurações de segurança (SSL/TLS e Headers) foram declaradas -# diretamente neste arquivo, sem o uso de snippets. -# -# UPSTREAM: 172.16.254.130 (Backend HTTP) -# ============================================================================== - -# Bloco Upstream: Define o servidor de backend da aplicação. -upstream magnusbilling_backend { - server 172.16.254.130; # Backend HTTP (NGINX faz o SSL Termination) - keepalive 64; -} - # ------------------------------------------------------------------------------ -# BLOCO 1: Redirecionamento de HTTP (porta 80) para HTTPS -# ------------------------------------------------------------------------------ -server { - listen 80; - listen [::]:80; - server_name telefonia.itguys.com.br; - - # Aplica o rate limiting básico (zona global_limit deve estar em nginx.conf) - limit_req zone=global_limit burst=20 nodelay; - - location /.well-known/acme-challenge/ { - root /var/www/html; - } - - # Redireciona permanentemente todo o resto para a versão segura. - location / { - return 301 https://$host$request_uri; - } -} - -# ------------------------------------------------------------------------------ -# BLOCO 2: Servidor Principal HTTPS (porta 443) +# BLOCO 2: Servidor Principal HTTPS (porta 443) - CORRIGIDO # ------------------------------------------------------------------------------ server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name telefonia.itguys.com.br; - # ============================================================================ - # LOGS, SEGURANÇA BÁSICA E RATE LIMITING - # ============================================================================ - client_max_body_size 25M; # Tamanho razoável para uploads/arquivos de áudio - access_log /var/log/nginx/telefonia.itguys.com.br.access.log combined; - error_log /var/log/nginx/telefonia.itguys.com.br.error.log warn; - # Log para acessos bloqueados por bots - access_log /var/log/nginx/telefonia.itguys.com.br.bad-bot.log suspicious_bot if=$is_bad_bot; - - # Módulo de Segurança Global (Bloqueia bots e URIs suspeitas de nginx.conf) - if ($block_request) { - return 404; - } - - # Rate Limiting (zona global_limit deve estar em nginx.conf) - limit_req zone=global_limit burst=50 nodelay; - - # ============================================================================ - # CONFIGURAÇÕES DE SSL/TLS (Hardening) - # ============================================================================ - ssl_certificate /etc/letsencrypt/live/telefonia.itguys.com.br/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/telefonia.itguys.com.br/privkey.pem; - ssl_protocols TLSv1.3 TLSv1.2; - ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256: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'; - ssl_prefer_server_ciphers on; - ssl_ecdh_curve X25519:secp256r1:secp384r1; - ssl_session_timeout 1d; - ssl_dhparam /etc/nginx/dhparam.pem; - ssl_session_tickets off; - - # OCSP Stapling - ssl_stapling on; - ssl_stapling_verify on; - ssl_trusted_certificate /etc/letsencrypt/live/telefonia.itguys.com.br/fullchain.pem; - resolver 8.8.8.8 8.8.4.4 valid=300s; - resolver_timeout 5s; - - # ============================================================================ - # HEADERS DE SEGURANÇA - # ============================================================================ - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; - add_header X-Content-Type-Options "nosniff" always; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-XSS-Protection "1; mode=block" always; - add_header Referrer-Policy "no-referrer" always; - add_header Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()" always; - # CSP: O MagnusBilling é PHP, e esta é uma política de segurança baseada. Ajustar se plugins exigirem. - add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none';" always; - - # ============================================================================ - # COMPRESSÃO - # ============================================================================ - brotli on; - brotli_comp_level 6; - brotli_min_length 256; - brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; - gzip on; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_min_length 256; - gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; + # ... (diretivas de LOGS, SSL/TLS, HEADERS e COMPRESSÃO permanecem aqui) ... # ============================================================================ # PARÂMETROS GLOBAIS DE PROXY # ============================================================================ - 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_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Port $server_port; - proxy_set_header User-Agent $http_user_agent; - proxy_http_version 1.1; - proxy_connect_timeout 60s; - proxy_read_timeout 90s; - proxy_send_timeout 90s; - proxy_buffering off; - proxy_request_buffering off; - proxy_redirect off; # Evita problemas de redirecionamento no backend + # ... (diretivas proxy_set_header, timeouts e proxy_redirect off permanecem aqui) ... # ---------------------------------------------------------------------------- # REGRAS DE ROTEAMENTO (LOCATIONS) # ---------------------------------------------------------------------------- - # 1. Rota para assets estáticos (CACHE AGRESSIVO) - location ~* \.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|wasm|woff2?|ttf|eot)$ { - proxy_cache magnusbilling_cache; # Criar esta zona no nginx.conf + # 1. Rota para assets estáticos e arquivos de recurso + # Garante que arquivos estáticos sejam tratados de forma diferente do index.php. + location ~* /mbilling/.*\.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|wasm|woff2?|ttf|eot|json|xml|mp3|wav|ogg)$ { + + # SOLUÇÃO PARA O 403 (logo.ico): Desabilita ModSecurity nos assets estáticos + # Isso deve resolver o problema de bloqueio 403 + modsecurity off; + + proxy_cache magnusbilling_cache; proxy_cache_valid 200 7d; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; add_header Cache-Control "public, max-age=604800, immutable"; add_header X-Proxy-Cache $upstream_cache_status; - proxy_pass http://magnusbilling_backend; + + # Envia a requisição *diretamente* para o backend. Se o backend não achar, + # ele deve retornar um 404 limpo, e não a página HTML. + proxy_pass http://magnusbilling_backend; } - # 2. Rota principal para a aplicação (/mbilling/) - Inclui WebSockets + # 2. Rota principal para a aplicação (/mbilling/) - Inclui WebSockets e index.php + # Esta rota deve tratar todas as URLs que não são arquivos estáticos (URLs limpas, login, index.php) location /mbilling/ { # Configurações para suportar WebSockets proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; - # O Rate Limiting aqui é mais importante para proteger o /login e APIs - # Se desejar limitar requisições específicas (ex.: /mbilling/login), crie uma zona dedicada. + # Rate Limiting específico para proteger o login (mantido por segurança) + limit_req zone=login_limit burst=5 nodelay; + + # IMPORTANTE: Se o backend espera que a requisição comece com /mbilling, + # esta diretiva proxy_pass fará isso. proxy_pass http://magnusbilling_backend; } @@ -157,12 +56,9 @@ server { return 302 /mbilling/; } - # 4. Bloqueio de arquivos e diretórios sensíveis (PHP, Git, etc.) + # 4. Bloqueio de arquivos e diretórios sensíveis (mantido por segurança) location ~* /(?:composer\.(?:json|lock)|vendor/|etc/|var/|temp/|\.git/|\.env|setup\.php|install\.php) { deny all; return 404; } - - # 5. Páginas de Erro Personalizadas - # Incluir aqui as diretivas de error_page, se necessário. }