NgixProxy_Pathfinder/README.md

9.0 KiB

NGINX Pathfinder Proxy

Solução moderna de Proxy Reverso containerizado, construída com NGINX, ModSecurity WAF e automação de SSL.

🚀 Funcionalidades

🛡️ Segurança em Primeiro Lugar

  • ModSecurity WAF: Conjunto de Regras OWASP (CRS) integrado rodando como proxy sidecar/frontend.
  • Fail2ban: Serviço "cão de guarda" que bane IPs com comportamento suspeito (bots ruins, excesso de erros 4xx/5xx).
  • Mapas de Segurança: Bloqueio automatizado de User-Agents maliciosos e restrições de rede interna.

Performance

  • HTTP/3 (QUIC): Habilitado para conexões modernas de baixa latência.
  • Compressão Brotli: Melhores taxas de compressão que o Gzip padrão.
  • Headers More: Manipulação avançada de cabeçalhos para respostas limpas.

🔒 SSL Automatizado

  • Renovação Zero-Touch: O Certbot integrado verifica a validade diariamente.
  • Auto-Renovação: Renova automaticamente certificados próximos do vencimento (<= 3 dias).
  • Injeção Inteligente: Injeta automaticamente os snippets de desafio ACME nas configurações dos sites.

🛠️ Como Trabalhar neste Repositório

Pré-requisitos

  • Docker & Docker Compose instalados
  • Acesso à internet (para baixar imagens e validar SSL)

1. Implantar o Servidor (Deploy)

Para iniciar toda a infraestrutura:

./deploy.sh

Este script detecta seu IP público, configura o ambiente e sobe os containers.

2. Adicionar um Novo Site

Todas as configurações de sites ficam na pasta conf.d/.

  1. Crie o arquivo de configuração: Crie um arquivo .conf em conf.d/ (ex: meusite.com.br.conf). Use um dos arquivos existentes como modelo.

    Modelo Básico (com SSL):

    # Backend (para onde vai o tráfego)
    upstream meu_backend {
        server 192.168.1.10:8080;
    }
    
    # Redirecionamento HTTP -> HTTPS
    server {
        listen 80;
        server_name meusite.com.br;
        include /etc/nginx/snippets/acme_challenge.conf; # Importante para SSL
        return 301 https://$host$request_uri;
    }
    
    # Bloco HTTPS
    server {
        listen 443 ssl;
        http2 on;
        server_name meusite.com.br;
    
        ssl_certificate /etc/nginx/ssl/meusite.com.br.crt;
        ssl_certificate_key /etc/nginx/ssl/meusite.com.br.key;
    
        include /etc/nginx/snippets/ssl_params.conf;
    
        location / {
            proxy_pass http://meu_backend;
            include /etc/nginx/includes/proxy_backend.conf;
        }
    }
    
  2. Aplique as alterações:

    docker compose restart nginx-proxy
    

    No reinício, o script de pre-flight validará o DNS e injetará configurações de SSL necessárias.

3. Modificar Configurações Globais

As configurações globais são modularizadas na pasta snippets/.

  • Rate Limiting: Edite snippets/rate_limit.conf para ajustar os limites de requisições por segundo.
  • Bloqueio de Bots: Edite snippets/security_maps.conf para adicionar novos User-Agents à lista negra.
  • Cache: Edite snippets/cache_zones.conf para definir novas zonas ou tempos de cache.

3.1. Modificar Regras do WAF (ModSecurity)

O WAF agora utiliza uma estrutura modular de regras localizada na pasta modsec_rules/.

  • Arquivos Específicos: Regras para Gitea, Nextcloud, Exchange, Zabbix, etc. ficam em seus respectivos arquivos .conf.
  • Global: global-exceptions.conf contém apenas whitelists de rede interna.
  • Aplicação: Após editar qualquer regra, reinicie o container do WAF para aplicar:
    docker compose restart modsecurity
    

Nota Técnica: O arquivo modsec.conf.template na raiz é injetado no container durante o boot para contornar problemas de permissão e garantir o carregamento das regras customizadas.

4. Gerenciar Certificados SSL

O sistema gerencia isso automaticamente, mas você pode intervir manualmente se necessário.

  • Verificar Validade: Verifique os logs do startup para ver o status de todos os domínios:

    docker compose logs nginx-proxy | grep "SSL"
    
  • Forçar Renovação: Se precisar renovar um certificado imediatamente:

    docker compose exec nginx-proxy /scripts/renew_ssl.sh
    
  • Reload sem Downtime (Recomendado): Para aplicar alterações de configuração (vhosts, SSL) sem derrubar conexões ativas:

    ./scripts/reload.sh
    

5. Monitorar e Debugar

  • Verificar Status dos Containers:

    docker compose ps
    
  • Ver Logs em Tempo Real:

    docker compose logs -f
    
  • Verificar se o WAF (ModSecurity) bloqueou algo:

    docker compose logs modsecurity | grep "Access denied"
    
  • Verificar Banimentos do Fail2ban:

    docker compose exec fail2ban fail2ban-client status nginx-badbots
    

🏗️ Visão Geral da Stack

graph TD
    subgraph Internet
        Client[Cliente Externo]
    end

    subgraph Host["Host Docker (Portainer)"]
        subgraph PathfinderStack["Stack: Pathfinder-Proxy<br/>Rede: 172.112.0.0/16"]
            WAF["ModSecurity WAF<br/>172.112.0.3<br/>:80, :443"]
            NGINX["nginx-proxy<br/>172.112.0.2<br/>:8080 interno"]
            F2B["fail2ban<br/>network: host"]
        end
        
        subgraph HostNetwork["Rede Física do Host"]
            HostIP["host.docker.internal<br/>(gateway)"]
        end
        
        subgraph OtherStacks["Outras Stacks Docker"]
            Container1["Container A<br/>172.111.0.x"]
            Container2["Container B<br/>172.113.0.x"]
        end
    end

    subgraph ExternalServers["Servidores Externos"]
        Server254["10.10.253.254"]
        Server128["10.10.253.128<br/>Gitea"]
    end

    Client -->|":80/:443"| WAF
    WAF -->|"proxy_pass :8080"| NGINX
    F2B -.->|"lê logs"| WAF
    F2B -.->|"lê logs"| NGINX
    
    NGINX -->|"extra_hosts<br/>host-gateway"| HostIP
    NGINX -.->|"bridge network"| Container1
    NGINX -.->|"bridge network"| Container2
    HostIP -->|"roteamento"| Server254
    HostIP -->|"roteamento"| Server128

    style WAF fill:#e74c3c,stroke:#c0392b,color:#fff
    style NGINX fill:#3498db,stroke:#2980b9,color:#fff
    style F2B fill:#27ae60,stroke:#1e8449,color:#fff
    style Server128 fill:#9b59b6,stroke:#8e44ad,color:#fff
    style Server254 fill:#9b59b6,stroke:#8e44ad,color:#fff
    style HostIP fill:#f39c12,stroke:#d68910,color:#fff
    style Container1 fill:#1abc9c,stroke:#16a085,color:#fff
    style Container2 fill:#1abc9c,stroke:#16a085,color:#fff

📋 Sistemas e Servidores Configurados

Lista de todos os sistemas roteados pelo proxy, organizados por tipo de infraestrutura.

Domínio IP/Backend Docker VM LXC Descrição
git.itguys.com.br 10.10.253.128 Gitea - Servidor Git
zammad.itguys.com.br 172.16.254.59 Zammad - Helpdesk
monitoramento.itguys.com.br 172.16.254.x Zabbix/Grafana
mimir.itguys.com.br 172.16.x.x Mimir - Métricas
windmill.grupopralog.com.br 172.16.253.103:8000 Windmill - Automação
katalog.itguys.com.br 172.16.x.x Katalog
verbocloud.itguys.com.br 172.16.253.13:11580 Nextcloud AIO
cloud.grupopralog.com.br 172.16.253.12 Nextcloud Pralog
srvoffice001.itguys.com.br 172.16.253.101 Exchange Server
business.itguys.com.br 172.16.121.13 Exchange OWA
vcenter.itguys.com.br 172.16.254.110:443 VMware vCenter
unifi.itguys.com.br 172.16.254.123:8443 UniFi Controller
workspace.itguys.com.br 172.16.121.2 Workspace Windows
vscode.itguys.com.br 172.16.x.x VS Code Server
telefonia.itguys.com.br 172.16.x.x Central Telefônica
proxy.itguys.com.br localhost Este proxy
itguys.com.br 172.16.x.x Site Principal
pralog.com.br 172.16.x.x Site Pralog
anatram.com.br 172.16.x.x Site Anatram
ferreirareal.com.br 172.16.x.x Site Ferreira Real
petytransportes.com.br 172.16.x.x Site Pety Transportes
solucionei.itguys.com.br 172.16.x.x Solucionei
rhema.itguys.com.br 172.16.x.x Rhema
integra.grupopralog.com.br 172.16.x.x Integração Pralog
ns1.itguys.com.br 172.16.x.x DNS Primário
ns2.itguys.com.br 172.16.x.x DNS Secundário
dns-primario.itguys.com.br 172.16.x.x DNS Admin

[!NOTE] Legenda: Docker = Container Docker | VM = Máquina Virtual (VMware/Hyper-V) | LXC = Linux Container (Proxmox)

IPs marcados como 172.16.x.x precisam ser verificados nos arquivos de configuração individuais.


Mantido por IT Guys