diff --git a/nginx/sites-available/anatram.com.br.conf b/nginx/sites-available/anatram.com.br.conf deleted file mode 100644 index f613022..0000000 --- a/nginx/sites-available/anatram.com.br.conf +++ /dev/null @@ -1,175 +0,0 @@ -# ============================================================================== -# ARQUIVO DE CONFIGURAÇÃO PARA: anatram.com.br -# ============================================================================== -# -# CONTEXTO: Otimização de segurança, performance e logging. -# DATA/HORA: 2025-09-27 12:10 -# AUTOR: Gemini (Especialista NGINX) -# -# --- HISTÓRICO DE ALTERAÇÕES --- -# - [2025-09-27] Refatoração completa: -# - Implementados blocos de proteção contra bots e scanners. -# - Adicionados headers de segurança HTTP (HSTS, CSP, X-Frame-Options, etc.). -# - Otimizadas as configurações de SSL/TLS com OCSP Stapling. -# - Logs de acesso e erro segregados por site. -# - Estrutura de redirecionamento canônico aprimorada (blocos dedicados). -# - Cache de arquivos estáticos otimizado com `expires` e `log_not_found`. -# - Adicionada otimização de `open_file_cache`. -# -# --- DESCRIÇÃO --- -# Este arquivo serve o site anatram.com.br via proxy reverso para a aplicação -# interna, forçando HTTPS no domínio canônico (sem 'www') e aplicando um -# conjunto robusto de regras de segurança e performance. -# ============================================================================== - -# ------------------------------------------------------------------------------ -# Mapeamento de Bots e Scanners Maliciosos -# ------------------------------------------------------------------------------ -# Define a variável $block_request como 1 se o User-Agent corresponder a um -# scanner ou bot malicioso conhecido. Esta abordagem é mais eficiente que múltiplos 'if'. -map $http_user_agent $block_request { - default 0; - "~*(sqlmap|nikto|wpscan|nmap|masscan|dirbuster|gobuster|feroxbuster)" 1; - "~*(Acunetix|Netsparker|Go-http-client|Python-requests)" 1; # Adicione outros suspeitos aqui -} - -# ============================================================================== -# BLOCO 1: HTTP (Porta 80) -> Redirecionamento Permanente para HTTPS -# ============================================================================== -server { - listen 80; - listen [::]:80; - server_name anatram.com.br www.anatram.com.br; - - # Permite a validação do Let's Encrypt para ambos os domínios. - location /.well-known/acme-challenge/ { - root /var/www/html; # Certifique-se de que este diretório existe e é acessível - } - - # Redireciona permanentemente (301) todo o resto do tráfego para a URL canônica em HTTPS. - location / { - return 301 https://anatram.com.br$request_uri; - } -} - -# ============================================================================== -# BLOCO 2: HTTPS (Porta 443) -> Redirecionamento de WWW para Não-WWW -# ============================================================================== -# Bloco dedicado a capturar tráfego HTTPS para www.anatram.com.br e -# redirecioná-lo para a versão canônica (sem www). -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name www.anatram.com.br; - - # SSL - O mesmo certificado é usado - ssl_certificate /etc/letsencrypt/live/anatram.com.br/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/anatram.com.br/privkey.pem; - include /etc/nginx/snippets/ssl_params.conf; # Reutiliza os mesmos parâmetros seguros - - return 301 https://anatram.com.br$request_uri; -} - -# ============================================================================== -# BLOCO 3: HTTPS (Porta 443) -> Servidor Principal e Canônico -# ============================================================================== -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name anatram.com.br; - - # --- Logs Dedicados --- - # Logs específicos para este site, facilitando o monitoramento e a integração com fail2ban. - access_log /var/log/nginx/anatram.com.br.access.log; - error_log /var/log/nginx/anatram.com.br.error.log warn; # Loga apenas de 'warn' para cima - - # Logs para tráfego bloqueado e bots de SEO - access_log /var/log/nginx/anatram.com.br.bad-bot.log combined if=$block_request; - # access_log /var/log/nginx/anatram.com.br.seo-bot.log combined if=$is_seo_bot; # Exige um mapa para $is_seo_bot - - # --- Configurações de SSL/TLS --- - ssl_certificate /etc/letsencrypt/live/anatram.com.br/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/anatram.com.br/privkey.pem; - include /etc/nginx/snippets/ssl_params.conf; - - # Otimizações de SSL - ssl_session_cache shared:SSL:10m; - ssl_session_timeout 10m; - ssl_stapling on; - ssl_stapling_verify on; - ssl_trusted_certificate /etc/letsencrypt/live/anatram.com.br/chain.pem; - - # --- Headers de Segurança HTTP --- - # Adiciona HSTS para forçar o navegador a usar apenas HTTPS por 2 anos. - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - add_header Referrer-Policy "no-referrer-when-downgrade" always; - # (Opcional, mas recomendado) Defina uma Content-Security-Policy restritiva. - # add_header Content-Security-Policy "default-src 'self'; script-src 'self'; img-src 'self'; style-src 'self';" always; - - # --- Estratégia de Cache --- - proxy_cache static_cache; # Usa a zona de cache definida em nginx.conf - add_header X-Proxy-Cache $upstream_cache_status; # Header para depuração do cache - - # --- Otimizações de Performance --- - # Cache de metadados de arquivos abertos para melhorar o desempenho de I/O. - open_file_cache max=200000 inactive=20s; - open_file_cache_valid 30s; - open_file_cache_min_uses 2; - open_file_cache_errors on; - - # --- Parâmetros de Proxy e Backend --- - include /etc/nginx/snippets/proxy_params.conf; - # ATENÇÃO: Desativar a verificação SSL só é seguro para backends em rede interna controlada. - proxy_ssl_verify off; - - # ========================================================================== - # REGRAS DE BLOQUEIO E SEGURANÇA (LOCATIONS) - # ========================================================================== - - # Bloqueia requisições de bots e scanners identificados pelo mapa. - if ($block_request) { - return 404; # Retorna 404 para não dar pistas de que o recurso existe. - } - - # Bloqueia acesso a arquivos e diretórios sensíveis. - location ~* /(\.git|\.env|composer\.json|vendor/|setup\.php) { - deny all; - return 404; - } - - # Protege contra Path Traversal. - if ($request_uri ~* \.\./) { - return 404; - } - - # Rate limiting para endpoints críticos (exemplo para WordPress). Adapte conforme sua aplicação. - # location ~* /wp-login\.php { - # limit_req zone=login burst=2 nodelay; - # proxy_pass https://172.16.12.9:443; - # } - - # ========================================================================== - # REGRAS DE ROTEAMENTO PARA A APLICAÇÃO (LOCATIONS) - # ========================================================================== - - # Rota para arquivos estáticos com cache agressivo no NGINX e no navegador. - location ~* \.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|wasm|woff2?|ttf|eot)$ { - proxy_pass https://172.16.12.9:443; - proxy_cache_valid 200 30d; # Cache de 30 dias no NGINX para respostas 200 - expires max; # Envia headers para o navegador cachear "para sempre" - add_header Cache-Control "public"; - log_not_found off; # Não loga erros 404 para assets (ex: favicon.ico) - } - - # Rota principal para a aplicação. - location / { - # A estratégia padrão será não cachear, a menos que especificado aqui. - proxy_pass https://172.16.12.9:443; - proxy_cache_valid 200 5m; # Cache de 5 minutos para respostas 200, como no original - } - - # --- Tratamento de Erros Personalizado --- - include /etc/nginx/snippets/custom_errors.conf; -}