From 62dc569bd2ef8701e50e132b6c3baba4fefc1756 Mon Sep 17 00:00:00 2001 From: "srvproxy001.itguys.com.br" Date: Tue, 16 Sep 2025 22:39:19 -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-16=2022:39:18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usr/local/sbin/proxy-sinc-update | 11 +- fail2ban/filter.d/nginx-json-gitea.conf | 19 ++- nginx/modsecurity/gitea-rule-exceptions.conf | 7 +- nginx/sites-available/git.itguys.com.br.conf | 4 - nginx/sites-available/itguys.com.br.conf | 125 ++++++++++++++++++ 5 files changed, 153 insertions(+), 13 deletions(-) create mode 100644 nginx/sites-available/itguys.com.br.conf diff --git a/_automation_scripts/usr/local/sbin/proxy-sinc-update b/_automation_scripts/usr/local/sbin/proxy-sinc-update index 0cabf99..5851317 100755 --- a/_automation_scripts/usr/local/sbin/proxy-sinc-update +++ b/_automation_scripts/usr/local/sbin/proxy-sinc-update @@ -1,15 +1,19 @@ #!/bin/bash set -e echo "A procurar por atualizações para o serviço Proxy-Sinc..." -UPDATE_SCRIPT_URL="http://git.itguys.com.br/joao.goncalves/NgixProxy_Pathfinder/raw/branch/main/Instal-Proxy-Sinc.sh" +UPDATE_SCRIPT_URL="https://git.itguys.com.br/joao.goncalves/NgixProxy_Pathfinder/raw/branch/main/Instal-Proxy-Sinc.sh" TEMP_SCRIPT="/tmp/setup_latest.sh" + echo "A baixar a versão mais recente do instalador de: $UPDATE_SCRIPT_URL" + SSL_VERIFY_FLAG="" -if [ -f "/etc/proxy-sinc/git.conf" ] && [ -d "/opt/config_repo/.git" ]; then +if [ -d "/opt/config_repo/.git" ]; then if [ "$(cd /opt/config_repo && git config --get http.sslVerify)" == "false" ]; then SSL_VERIFY_FLAG="--insecure" + echo "[AVISO] A usar o modo inseguro para baixar a atualização devido à configuração do repositório." fi fi + if curl $SSL_VERIFY_FLAG -L "$UPDATE_SCRIPT_URL" -o "$TEMP_SCRIPT"; then chmod +x "$TEMP_SCRIPT" echo "Instalador baixado com sucesso. A executar a atualização..." @@ -17,6 +21,7 @@ if curl $SSL_VERIFY_FLAG -L "$UPDATE_SCRIPT_URL" -o "$TEMP_SCRIPT"; then rm "$TEMP_SCRIPT" echo "Atualização concluída!" else - echo "ERRO: Falha ao baixar o script de atualização." >&2; exit 1 + echo "ERRO: Falha ao baixar o script de atualização." >&2 + exit 1 fi exit 0 diff --git a/fail2ban/filter.d/nginx-json-gitea.conf b/fail2ban/filter.d/nginx-json-gitea.conf index af736b1..5539d9c 100644 --- a/fail2ban/filter.d/nginx-json-gitea.conf +++ b/fail2ban/filter.d/nginx-json-gitea.conf @@ -1,7 +1,20 @@ -# /etc/fail2ban/filter.d/nginx-json-gitea.conf +# Filtro expandido para proteger o Gitea, lendo os logs em formato JSON. +# Cobre a interface web e os endpoints de operações Git. + [Definition] -# Regra 1: Deteta múltiplas requisições POST para a página de login. + +# Usamos múltiplas linhas de 'failregex'. Se QUALQUER uma delas corresponder, +# o fail2ban regista uma falha para o IP. + +# Regra 1: Deteta tentativas de login falhadas na interface web (método POST). failregex = ^.*"remote_addr":"".*"method":"POST".*"uri":"/user/login".*$ - # Regra 2: Deteta erros 404. + + # Regra 2 (NOVA): Deteta tentativas de 'git push' ou 'git pull/clone' com credenciais erradas. + # Procura por erros de autenticação (401/403) nos endpoints específicos do Git. + ^.*"remote_addr":"".*"(git-upload-pack|git-receive-pack)".*"status":(401|403),.*$ + + # Regra 3: Deteta scans de repositórios ou ficheiros que não existem (erros 404). + # Esta regra é muito eficaz contra bots que procuram por repositórios públicos com nomes comuns. ^.*"remote_addr":"".*"status":404,.*$ + ignoreregex = diff --git a/nginx/modsecurity/gitea-rule-exceptions.conf b/nginx/modsecurity/gitea-rule-exceptions.conf index a499d33..7dd76cc 100644 --- a/nginx/modsecurity/gitea-rule-exceptions.conf +++ b/nginx/modsecurity/gitea-rule-exceptions.conf @@ -2,7 +2,8 @@ # Desativa completamente o motor de regras do ModSecurity para QUALQUER URL # que envolva a visualização ou edição de ficheiros no Gitea. -# A expressão regular apanha os caminhos "/src/branch/" (visualização) e "/_edit/" (edição). -# Isto previne que o WAF bloqueie o conteúdo legítimo de ficheiros de configuração e scripts. -SecRule REQUEST_URI "@rx ^/.*/(src/branch|_edit)/" \ +# Desativa completamente o motor de regras do ModSecurity para QUALQUER URL +# que envolva a visualização, edição ou criação de ficheiros no Gitea. +# A expressão regular agora apanha os caminhos "/src/branch/", "/_edit/" e "/_new/". +SecRule REQUEST_URI "@rx ^/.*/(src/branch|_edit|_new)/" \ "id:1005,phase:1,nolog,allow,ctl:ruleEngine=Off" diff --git a/nginx/sites-available/git.itguys.com.br.conf b/nginx/sites-available/git.itguys.com.br.conf index 969a962..f9b4153 100644 --- a/nginx/sites-available/git.itguys.com.br.conf +++ b/nginx/sites-available/git.itguys.com.br.conf @@ -38,10 +38,6 @@ server { server_name git.itguys.com.br; - # --- Certificados SSL (Geridos pelo Certbot) --- - #ssl_certificate /etc/letsencrypt/live/git.itguys.com.br/fullchain.pem; - #ssl_certificate_key /etc/letsencrypt/live/git.itguys.com.br/privkey.pem; - # --- Cabeçalhos de Segurança --- add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; diff --git a/nginx/sites-available/itguys.com.br.conf b/nginx/sites-available/itguys.com.br.conf new file mode 100644 index 0000000..fc9978a --- /dev/null +++ b/nginx/sites-available/itguys.com.br.conf @@ -0,0 +1,125 @@ +# Ficheiro: /etc/nginx/sites-available/itguys.com.br.conf +# +# Configuração de Proxy Reverso com Cache Inteligente, otimizada para +# um site maioritariamente estático com um formulário de contacto dinâmico. + +# ============================================================================== +# BLOCO HTTP: Redirecionar todo o tráfego para a versão segura e canónica (www) +# ============================================================================== +server { + listen 80; + listen [::]:80; + # Escuta por ambos os domínios, com e sem 'www'. + server_name itguys.com.br www.itguys.com.br; + + # Regra especial para a validação do Let's Encrypt funcionar corretamente. + location /.well-known/acme-challenge/ { + root /var/www/html; + } + + # Para todas as outras requisições, envia um redirecionamento permanente (301) para a versão segura e com 'www'. + location / { + return 301 https://www.itguys.com.br$request_uri; + } +} + +# ============================================================================== +# BLOCO HTTPS: O Coração da nossa Configuração +# ============================================================================== +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + # Define o nome canónico do servidor. A outra versão será redirecionada aqui. + server_name www.itguys.com.br; + + # Adicionamos um redirecionamento para o tráfego que chega a 'itguys.com.br' na porta 443. + # Isto garante que os utilizadores usem sempre a versão 'www'. + if ($host = 'itguys.com.br') { + return 301 https://www.itguys.com.br$request_uri; + } + + # --- Certificados SSL (Geridos pelo Certbot) --- + # O Certbot irá preencher estas linhas. Lembre-se de o executar para ambos os domínios. + ssl_certificate /etc/letsencrypt/live/www.itguys.com.br/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/www.itguys.com.br/privkey.pem; + + # --- Cabeçalhos de Segurança Padrão --- + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Content-Type-Options "nosniff" always; + add_header X-Frame-Options "SAMEORIGIN" always; + + # --- Configurações de Log --- + access_log /var/log/nginx/access.log detailed_proxy; + error_log /var/log/nginx/error.log; + + # --- ESTRATÉGIA DE CACHE HÍBRIDA E SEGURA --- + # Usa a nossa zona de cache pública. + proxy_cache zabbix_cache; + # Adiciona um cabeçalho de depuração para vermos o status do cache. + add_header X-Proxy-Cache $upstream_cache_status; + # Regra geral: NÃO cachear nada por defeito. + proxy_no_cache 1; + proxy_cache_bypass 1; + + # --- LOCALIZAÇÃO PARA O FORMULÁRIO DE CONTACTO (SEM CACHE) --- + # O '=' indica uma correspondência exata da URI, o que é mais eficiente. + location = /php/enviar.php { + # Desativa o cache completamente para esta localização. + proxy_no_cache 1; + proxy_cache_bypass 1; + + proxy_pass http://172.16.12.17:80; + 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; + } + + # --- LOCALIZAÇÃO PARA FICHEIROS ESTÁTICOS (CACHE LONGO) --- + # Esta regra apanha os ficheiros que são seguros para cachear. + location ~* \.(jpg|jpeg|gif|png|webp|svg|css|js|ico|woff2|ttf|json|otf)$ { + # Ativa o cache para estes ficheiros. + proxy_no_cache 0; + proxy_cache_bypass 0; + # Define que as respostas válidas (código 200) ficam no cache por 60 minutos. + proxy_cache_valid 200 60m; + # Instrui o NAVEGADOR do cliente a guardar uma cópia por 7 dias. + expires 7d; + + proxy_pass http://172.16.12.17:80; + proxy_set_header Host $host; + } + + # --- NOVA LOCALIZAÇÃO PARA PÁGINAS HTML ESTÁTICAS (CACHE LONGO) --- + # Esta regra apanha especificamente as páginas Sobre.html e Serviços.html. + location ~* ^/(Sobre|Serviços)\.html$ { + # Ativa o cache para estas páginas. + proxy_no_cache 0; + proxy_cache_bypass 0; + # Define um tempo de cache longo (1 hora) para estas páginas que raramente mudam. + proxy_cache_valid 200 1h; + + proxy_pass http://172.16.12.17:80; + 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; + } + + # --- LOCALIZAÇÃO PRINCIPAL PARA O RESTO DO SITE (CACHE CURTO) --- + # Apanha as páginas HTML restantes (como a index.html). + location / { + # Ativa o cache, mas por um período curto (5 minutos). + # Isto acelera a navegação sem o risco de mostrar conteúdo muito desatualizado. + proxy_no_cache 0; + proxy_cache_bypass 0; + proxy_cache_valid 200 5m; + + proxy_pass http://172.16.12.17:80; + 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; + } +} +