diff --git a/Comandos-Agentes-Referencia.md b/Comandos-Agentes-Referencia.md new file mode 100644 index 0000000..4f5cea4 --- /dev/null +++ b/Comandos-Agentes-Referencia.md @@ -0,0 +1,82 @@ +# 🎨 GUIA DE INTERFACE VISUAL GIT (VSCODE) & COMANDOS EQUIVALENTES + +Este guia reúne todas as explicações das funções visuais do painel **Source Control** do VSCode, mapeando-as aos seus comandos equivalentes no terminal Git e indicando as melhores práticas de uso na nossa arquitetura GitOps. + +--- + +## 🗺️ 1. Mapeamento de Funções Rápidas (Principais) + +| Botão Visual no VSCode | Comando no Terminal | O que faz na prática? | +| :--- | :--- | :--- | +| **📥 Pull** | `git pull` | Baixa as últimas alterações do Gitea (VPS 3) e as junta diretamente ao seu código local. | +| **📤 Push** | `git push` | Envia as alterações que você salvou (comitou) localmente para o repositório central no Gitea. | +| **👥 Clone** | `git clone ` | Baixa um repositório inteiro pela primeira vez do Gitea para a sua máquina de desenvolvimento. | +| **🔄 Checkout to...** | `git checkout ` | Alterna entre ramificações de desenvolvimento (ex: mudar de `dev` para `main`) ou cria novas branches. | +| **📡 Fetch** | `git fetch` | Consulta o Gitea para ver se há novidades no histórico, mas **não altera** o seu código atual. | + +--- + +## 🛠️ 2. Explicação dos Submenus Avançados + +### 💾 Commit (Submenu de Confirmação) +* **O que faz**: Agrupa as suas alterações de código locais preparadas e cria um ponto na história (um "commit") com uma mensagem descritiva. +* **Equivalente no terminal**: `git commit -m "sua mensagem"` +* **Dica no VSCode**: Use o campo de texto superior para escrever a mensagem e clique no botão azul **Commit** para fazer tudo de uma vez. + +### 🔀 Changes (Submenu de Alterações) +* **O que faz**: Permite preparar os arquivos que farão parte do próximo commit. + * Clicar no ícone de `+` ao lado do arquivo faz um `git add` (prepara o arquivo). + * Clicar na seta curvada descarta as alterações locais daquele arquivo, voltando ele ao estado anterior. + +### 🔄 Pull, Push (Submenu de Sincronização Avançada) +* **O que faz**: Reúne ações combinadas como **Sync** (que executa sequencialmente um `pull` e depois um `push` para manter tudo perfeitamente sincronizado). + +### 🌿 Branch (Submenu de Ramos) +* **O que faz**: Permite gerenciar as suas ramificações de código. Você pode mesclar duas branches (fazer um `git merge`) ou deletar branches locais que já foram concluídas. + +### 📦 Stash (Submenu de Gaveta Temporária) +* **O que faz**: Se você está no meio de um desenvolvimento complexo, mas precisa trocar de branch imediatamente para corrigir um bug urgente, você usa o **Stash**. Ele guarda suas alterações não salvas em uma "gaveta temporária", limpa sua tela e, quando você voltar, basta dar um **Stash Pop** para recuperar seu trabalho exatamente de onde parou. +* **Equivalente no terminal**: `git stash` e `git stash pop` + +### 🏷️ Tags (Submenu de Etiquetas) +* **O que faz**: Permite marcar versões específicas do seu sistema (ex: etiqueta `v1.0.0` ou `v2.4.1`) para identificar marcos de lançamentos oficiais. + +--- + +## 🚀 3. Fluxo de Trabalho Diário Recomendado (GitOps) + +Para trabalhar de forma ágil na **VPS 4 (Dev)** integrada à **VPS 1 (Produção)** através do Webhook, utilize este fluxo visual direto no VSCode: + +```mermaid +graph LR + A[1. Codificar] --> B[2. Preparar +] + B --> C[3. Commit 💾] + C --> D[4. Sync / Push 📤] + D -->|Gitea Webhook| E[5. Deploy Automático VPS 1 ⚡] +``` + +1. **Codifique**: Faça as alterações necessárias na VPS 4. +2. **Prepare**: No painel de controle de versão (Source Control), clique no botão de `+` ao lado de cada arquivo modificado para adicioná-los. +3. **Comite**: Digite uma mensagem clara no campo de texto (ex: `feat: adicionado controle de rotas`) e clique no botão azul **Commit**. +4. **Sincronize**: Clique no botão **Sync Changes** (ou no ícone de nuvem no rodapé esquerdo do VSCode). +5. **Acompanhe**: O Gitea disparará o Webhook que compilará o código na VPS 4 e enviará para a VPS 1 de forma automática em segundo plano. + +--- + +## 📊 4. Comparativo: Quando usar a Tela do VSCode vs. Terminal? + +> [!TIP] +> A interface do VSCode é amplamente recomendada para **95% do seu fluxo diário** devido ao seu apelo visual e proteção contra erros de digitação. + +| Tarefa | 🖥️ Interface Visual (VSCode) | 📟 Terminal | +| :--- | :--- | :--- | +| **Saber o que mudou no código** | **Excelente**: Mostra as diferenças de linhas lado a lado de forma colorida. | Ruim: Difícil de ler no console. | +| **Add, Commit, Pull e Push** | **Excelente**: Reduz o trabalho a 3 cliques simples de mouse. | Bom: Rápido se você tiver agilidade de digitação. | +| **Resolver Conflitos de Merge** | **Excelente**: O editor de conflitos destaca em cores o seu código e o do servidor, bastando clicar no botão para escolher qual manter. | Péssimo: Gera marcadores confusos no arquivo (`<<<<<<< HEAD`). | +| **Ações de Reparo** (Ex: redefinir histórico) | Não recomendado. | **Excelente**: Comandos como `git reset --hard` ou rebase interativo exigem a precisão do terminal. | + +--- + +> [!IMPORTANT] +> **Dica Diagnóstica (Show Git Output)**: +> Se o sincronismo visual do VSCode travar ou falhar por causa da VPN, clique em **Show Git Output**. O painel mostrará o log do terminal do Git rodando em segundo plano, identificando rapidamente se o erro é de permissão de chave SSH ou de conexão de rede. diff --git a/Home.md b/Home.md index e7915f4..c22eebe 100644 --- a/Home.md +++ b/Home.md @@ -8,6 +8,7 @@ Bem-vindo ao Portal de Consciência de toda a nossa infraestrutura. Esta Wiki un * [📖 Doutrina Swarm - Versão v1.0.0 (Atual)](v1.0.0) * [📜 Protocolo de Agentes Swarm (PGS - Regras)](Protocolo-Agentes-Swarm) * [🛡️ Segurança e Permissões do Usuário Deploy](Seguranca-Deploy-User) +* [⌨️ Guia de Comandos e Referência de Agentes](Comandos-Agentes-Referencia) --- @@ -26,6 +27,13 @@ Bem-vindo ao Portal de Consciência de toda a nossa infraestrutura. Esta Wiki un * [📈 Grafana, Prometheus & Auto-Cura (Self-Healing)](Auto-Cura-Self-Healing) * [📅 Monitoramento de Acessos SSH (GCalendar & Telegram)](SSH-Calendar-Monitor) * [🛢️ Otimização PostgreSQL (VPS 3 - Tuning de Performance)](Otimizacao-PostgreSQL) +* [🔄 Sincronização e Compartilhamento de Instruções](Sincronizacao-Instrucoes) --- *Esta wiki é sincronizada automaticamente com o repositório principal de instruções.* +--- + +## 🛠️ 4. Guias de Instalação e Setup dos Servidores +* [🖥️ Setup Completo: VPS 1 - Produção](Setup-VPS1-Production) +* [🖥️ Setup Completo: VPS 3 - Cérebro (Postgres/Gitea/Dragonfly)](Setup-VPS3-Brain) +* [🖥️ Setup Completo: VPS 4 - Laboratório (Docker Compose Sandbox)](Setup-VPS4-Lab) diff --git a/Setup-VPS1-Production.md b/Setup-VPS1-Production.md new file mode 100644 index 0000000..36257cc --- /dev/null +++ b/Setup-VPS1-Production.md @@ -0,0 +1,283 @@ +#!/bin/bash +# ============================================================================== +# NOTA DE SEGURANÇA E ARQUITETURA REAL (CONVENÇÃO ATUAL): +# 10.99.0.1 -> AMBIENTE DE PRODUÇÃO (Runtime Puro, Traefik, Monitoramento SOC) +# 10.99.0.3 -> BANCO DE DADOS DE PRODUÇÃO DEDICADO (PostgreSQL Bare-metal Appliance) +# 10.99.0.4 -> AMBIENTE DE DESENVOLVIMENTO, HOMOLOGAÇÃO & BUILDER DEPLOYS (GitOps) +# ============================================================================== +# V8 BUNKER EXTREMO FINAL SUPREMA (VERSÃO PRODUÇÃO 10.99.0.1) +# HUB DE MONITORAMENTO CENTRALIZADO (RECEBE LOGS E MÉTRICAS DE TODAS AS VPSs) +# ========================================================= +set -eo pipefail + +echo "🚀 INICIANDO V8 BUNKER EXTREMO FINAL SUPREMA NA VPS 1 (PRODUÇÃO)..." + +# ========================= +# 1. VARIÁVEIS DA INFRA +# ========================= +USER_NAME="deploy" +PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOnD6GW6oVuY1DcfCQSUQV/JNHa35A2Or1K3X1gEC8D/ rui@DESKTOP-K5Q17QK" +WG_PORT="52830" +VPN_SUBNET="10.99.0.0/24" +SERVER_VPN_IP="10.99.0.1" +DOMAIN_APP="clube67.com" +EMAIL="ruibto@gmail.com" +VPS2_DEV_PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKm085+8paXXj9AzUa00dhuB1IH2/Y4uTStU1zm2I7QZ deploy@vmi2797860" + +# ========================= +# 2. BASE & PACOTES +# ========================= +echo "🚀 Atualizando sistema e instalando pacotes base..." +apt update && apt upgrade -y +apt install -y curl ufw fail2ban auditd apparmor apparmor-utils \ + ca-certificates gnupg lsb-release htop jq acl + +systemctl enable auditd || true +systemctl enable fail2ban || true + +# ========================= +# 3. USUÁRIO + SSH HARDEN + SUDO (NOPASSWD) +# ========================= +echo "🚀 Criando usuário deploy e blindando SSH..." +id -u $USER_NAME &>/dev/null || adduser --disabled-password --gecos "" $USER_NAME +usermod -aG sudo,adm $USER_NAME + +echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USER_NAME +chmod 0440 /etc/sudoers.d/$USER_NAME + +mkdir -p /home/$USER_NAME/.ssh +echo "$PUBKEY" > /home/$USER_NAME/.ssh/authorized_keys +[[ -n "$VPS2_DEV_PUBKEY" ]] && grep -q "$VPS2_DEV_PUBKEY" /home/$USER_NAME/.ssh/authorized_keys || echo "$VPS2_DEV_PUBKEY" >> /home/$USER_NAME/.ssh/authorized_keys +chmod 700 /home/$USER_NAME/.ssh +chmod 600 /home/$USER_NAME/.ssh/authorized_keys +chown -R $USER_NAME:$USER_NAME /home/$USER_NAME/.ssh + +su - $USER_NAME -c "[[ -f ~/.ssh/id_ed25519 ]] || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519" + +sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config +sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config +grep -q "^AllowUsers" /etc/ssh/sshd_config || echo "AllowUsers $USER_NAME" >> /etc/ssh/sshd_config + +# ========================= +# 4. FIREWALL (UFW) +# ========================= +echo "🚀 Configurando regras do Firewall (UFW)..." +ufw default deny incoming +ufw default allow outgoing +ufw allow 80/tcp +ufw allow 443/tcp +ufw allow $WG_PORT/udp +ufw allow from $VPN_SUBNET + +# ========================= +# 5. SYSCTL HARDENING & NOEXEC +# ========================= +echo "🚀 Aplicando Hardening no Kernel..." +grep -q "net.ipv4.ip_unprivileged_port_start" /etc/sysctl.conf || cat >> /etc/sysctl.conf <> /etc/fstab +grep -q "/dev/shm tmpfs" /etc/fstab || echo "tmpfs /dev/shm tmpfs defaults,noexec,nosuid 0 0" >> /etc/fstab +grep -q "/var/tmp tmpfs" /etc/fstab || echo "tmpfs /var/tmp tmpfs defaults,noexec,nosuid 0 0" >> /etc/fstab + +# ========================= +# 6. QUARENTENA INTELIGENTE & EDR +# ========================= +# (Mesma lógica do script anterior, mantida para proteção local da VPS 1) +cat > /usr/local/bin/quarantine-guard.sh <<'EOF' +#!/bin/bash +LOG="/var/log/quarantine.log" +FORENSIC="/var/log/quarantine_forensic.log" +THRESHOLD=80 +MEM=$(free | awk '/Mem:/ {printf("%.0f", $3/$2 * 100)}') +if [ "$MEM" -lt "$THRESHOLD" ]; then exit 0; fi +echo "[$(date)] MEMORIA CRITICA: $MEM%" >> $LOG +ps -eo pid,%mem,user,cmd --sort=-%mem | head -n 15 | tail -n +2 | while read -r PID MEM_USAGE USER CMD +do + NAME=$(echo "$CMD" | awk '{print $1}' | xargs basename) + BIN_PATH=$(readlink -f /proc/$PID/exe 2>/dev/null || echo "") + CWD=$(readlink -f /proc/$PID/cwd 2>/dev/null || echo "") + if [[ "$CWD" == /tmp* ]] || [[ "$BIN_PATH" == /tmp* ]] || [[ "$NAME" =~ (xmrig|kinsing|kdevtmpfsi) ]]; then + kill -9 $PID 2>/dev/null + echo "[$(date)] PROCESSO ELIMINADO: $NAME ($PID)" >> $LOG + fi +done +EOF +chmod +x /usr/local/bin/quarantine-guard.sh +grep -q "quarantine-guard" /etc/crontab || echo "*/1 * * * * root /usr/local/bin/quarantine-guard.sh" >> /etc/crontab + +# ========================= +# 7. CROWDSEC & FALCO (EDR) +# ========================= +curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash +apt install -y crowdsec crowdsec-firewall-bouncer-nftables +curl -s https://falco.org/repo/falcosecurity-packages.asc | apt-key add - +echo "deb https://download.falco.org/packages/deb stable main" > /etc/apt/sources.list.d/falco.list +apt update && apt install -y falco + +mkdir -p /var/log +touch /var/log/falco.log +chmod 644 /var/log/falco.log +setfacl -R -m u:$USER_NAME:rx /var/log || true + +# ========================= +# 8. CONFIGURAÇÃO MONITORAMENTO CENTRAL (HUB) +# ========================= +echo "🚀 Preparando HUB de Monitoramento Central..." +SOC_DIR="/opt/soc" +mkdir -p $SOC_DIR/{grafana/provisioning/datasources,grafana/provisioning/dashboards,grafana/provisioning/alerting,grafana/dashboards,prometheus,promtail} + +# Prometheus configurado para monitorar Produção (10.99.0.1), Desenvolvimento (10.99.0.3) e WhatsApp (10.99.0.4) +cat > $SOC_DIR/prometheus/prometheus.yml < $SOC_DIR/promtail/config.yml < $SOC_DIR/grafana/provisioning/datasources/datasources.yml < $SOC_DIR/grafana/dashboards/soc.json <<'EOF' +{ + "title": "SOC GLOBAL OVERVIEW", + "panels": [ + { + "type": "stat", + "title": "CPU Produção", + "targets": [ { "expr": "100 - (avg(rate(node_cpu_seconds_total{job=\"producao\",mode=\"idle\"}[5m])) * 100)" } ] + }, + { + "type": "stat", + "title": "CPU Desenvolvimento", + "gridPos": { "x": 12, "y": 0, "h": 5, "w": 12 }, + "targets": [ { "expr": "100 - (avg(rate(node_cpu_seconds_total{job=\"desenvolvimento\",mode=\"idle\"}[5m])) * 100)" } ] + } + ], + "schemaVersion": 36, + "version": 1 +} +EOF + +chown -R $USER_NAME:$USER_NAME $SOC_DIR + +# ========================= +# 9. APPARMOR FIX & DOCKER ROOTLESS +# ========================= +apt install -y uidmap dbus-user-session docker-compose-plugin +su - $USER_NAME -c "[[ -f ~/bin/dockerd ]] || curl -fsSL https://get.docker.com/rootless | sh" +loginctl enable-linger $USER_NAME +DEPLOY_UID=$(id -u $USER_NAME) + +# ========================= +# 10. STACKS DE PRODUÇÃO +# ========================= +mkdir -p /home/$USER_NAME/stack/{traefik/letsencrypt,soc,portainer/data} +touch /home/$USER_NAME/stack/traefik/letsencrypt/acme.json +chmod 600 /home/$USER_NAME/stack/traefik/letsencrypt/acme.json + +cat > /home/$USER_NAME/stack/soc/docker-compose.yml < AMBIENTE DE PRODUÇÃO (Runtime Puro, Traefik, Monitoramento SOC) +# 10.99.0.3 -> BANCO DE DADOS DE PRODUÇÃO DEDICADO (PostgreSQL Bare-metal Appliance) +# 10.99.0.4 -> AMBIENTE DE DESENVOLVIMENTO, HOMOLOGAÇÃO & BUILDER DEPLOYS (GitOps) +# ============================================================================== +# ⚠️ CAUTION: ESTE SCRIPT REPLICA AS CONFIGURAÇÕES DE SEGURANÇA DA VPS 1. +# CERTIFIQUE-SE DE QUE A "PRIVATEKEY" DO WIREGUARD DA VPS 10.99.0.3 ESTEJA DISPONÍVEL. +# AS CHAVES SSH E AS CONFIGURAÇÕES DO WIREGUARD SÓ SERÃO CRIADAS SE NÃO EXISTIREM. +# ============================================================================== +# V8 BUNKER EXTREMO FINAL SUPREMA (VERSÃO BANCO DE DADOS DE PRODUÇÃO DEDICADO 10.99.0.3) +# AGENTE DE MONITORAMENTO (MÉTRICAS E LOGS ENVIADOS PARA A VPS 1) +# ========================================================= +set -eo pipefail + +echo "🚀 INICIANDO V8 BUNKER EXTREMO FINAL SUPREMA NA VPS 3 (BANCO DE DADOS DEDICADO)..." + +# ========================= +# 1. VARIÁVEIS DA INFRA +# ========================= +USER_NAME="deploy" +PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzqvHpWO69vdujhyeFaKmOssT5leqIUQsknJiFzHKlK rui@DESKTOP-K5Q17QK" +SERVER_VPN_IP="10.99.0.3" # IP desta VPS na WireGuard +SERVER_GATEWAY_IP="10.99.0.1" # IP da VPS 1 (Hub do Monitoramento) +VPN_SUBNET="10.99.0.0/24" +WG_SERVER_PUBKEY="jUWnuc+82vQ6kLMSI7W1i7hBRBgQKcaSZ8yJy56QSUw=" +WG_SERVER_ENDPOINT="158.220.109.237:51820" # IP Público da VPS 1 +DOMAIN_APP="dev.clube67.com" # Domínio de Desenvolvimento +EMAIL="ruibto@gmail.com" +VPS2_DEV_PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKm085+8paXXj9AzUa00dhuB1IH2/Y4uTStU1zm2I7QZ deploy@vmi2797860" +VPS1_PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOm8XdsuqpRMM+1y4w4onc+VhPTtqR4iEFJYnA7SRNXS deploy@vmi2849674" + +# ========================= +# 2. BASE & PACOTES +# ========================= +echo "🚀 Atualizando sistema e instalando pacotes base..." +apt update && apt upgrade -y +apt install -y curl ufw fail2ban auditd apparmor apparmor-utils \ + ca-certificates gnupg lsb-release htop jq acl wireguard + +systemctl enable auditd || true +systemctl enable fail2ban || true + +# ========================= +# 3. USUÁRIO + SSH HARDEN + SUDO (NOPASSWD) +# ========================= +echo "🚀 Criando usuário deploy e blindando SSH..." +id -u $USER_NAME &>/dev/null || adduser --disabled-password --gecos "" $USER_NAME +usermod -aG sudo,adm $USER_NAME + +echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USER_NAME +chmod 0440 /etc/sudoers.d/$USER_NAME + +mkdir -p /home/$USER_NAME/.ssh +echo "$PUBKEY" > /home/$USER_NAME/.ssh/authorized_keys +[[ -n "$VPS2_DEV_PUBKEY" ]] && grep -q "$VPS2_DEV_PUBKEY" /home/$USER_NAME/.ssh/authorized_keys || echo "$VPS2_DEV_PUBKEY" >> /home/$USER_NAME/.ssh/authorized_keys +[[ -n "$VPS1_PUBKEY" ]] && grep -q "$VPS1_PUBKEY" /home/$USER_NAME/.ssh/authorized_keys || echo "$VPS1_PUBKEY" >> /home/$USER_NAME/.ssh/authorized_keys +chmod 700 /home/$USER_NAME/.ssh +chmod 600 /home/$USER_NAME/.ssh/authorized_keys + +# 👉 Proteção: Só cria a chave se ela não existir +if [[ ! -f /home/$USER_NAME/.ssh/id_ed25519 ]]; then + echo "🚀 Replicando chave SSH privada..." + cat < /home/$USER_NAME/.ssh/id_ed25519 +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACA7022Ve09QNg3CELPHbj6psUsufcuLBwJqm7i8mWgWXAAAAJglHptaJR6b +WgAAAAtzc2gtZWQyNTUxOQAAACA7022Ve09QNg3CELPHbj6psUsufcuLBwJqm7i8mWgWXA +AAAEASb797x5GRsuKmM3DpBPiY8iPiyyPdrlnn9FmLTmn7BTvTbZV7T1A2DcIQs8duPqmx +Sy59y4sHAmqbuLyZaBZcAAAAEWRlcGxveUB2bWkyODQ5Njc0AQIDBA== +-----END OPENSSH PRIVATE KEY----- +EOF + chmod 600 /home/$USER_NAME/.ssh/id_ed25519 + chown -R $USER_NAME:$USER_NAME /home/$USER_NAME/.ssh +else + echo "⚠️ Chave SSH id_ed25519 já existe. Pulando criação." +fi + +su - $USER_NAME -c "[[ -f ~/.ssh/id_ed25519.pub ]] || ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub" + +sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config +sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config +grep -q "^AllowUsers" /etc/ssh/sshd_config || echo "AllowUsers $USER_NAME" >> /etc/ssh/sshd_config + +# ========================= +# 4. FIREWALL (UFW) +# ========================= +echo "🚀 Configurando regras do Firewall (UFW)..." +ufw default deny incoming +ufw default allow outgoing +ufw allow 80/tcp +ufw allow 443/tcp +ufw allow 52830/udp # Porta local do WG neste Peer +ufw allow from $VPN_SUBNET + +# ========================= +# 5. CONFIGURAÇÃO WIREGUARD (PEER) +# ========================= +if [[ ! -f /etc/wireguard/wg0.conf ]]; then + echo "🚀 Criando configuração do WireGuard (Peer)..." + mkdir -p /etc/wireguard + cat < /etc/wireguard/wg0.conf +[Interface] +Address = $SERVER_VPN_IP/24 +PrivateKey = 8Ck983MKEOVnskrvglzSOxWzR1ybZjQldl5VY2vctWc= +ListenPort = 52830 + +[Peer] +PublicKey = $WG_SERVER_PUBKEY +AllowedIPs = $VPN_SUBNET +Endpoint = $WG_SERVER_ENDPOINT +PersistentKeepalive = 25 +EOF + chmod 600 /etc/wireguard/wg0.conf +else + echo "⚠️ Configuração do WireGuard (/etc/wireguard/wg0.conf) já existe. Pulando criação." +fi +systemctl enable wg-quick@wg0 || true + +# ========================= +# 6. SYSCTL HARDENING & NOEXEC +# ========================= +echo "🚀 Aplicando Hardening no Kernel..." +grep -q "net.ipv4.ip_unprivileged_port_start" /etc/sysctl.conf || cat >> /etc/sysctl.conf < $SOC_DIR/promtail/config.yml < /etc/apt/sources.list.d/falco.list +apt update && apt install -y falco + +mkdir -p /var/log +touch /var/log/falco.log +chmod 644 /var/log/falco.log +setfacl -R -m u:$USER_NAME:rx /var/log || true + +# Script para enviar alertas para o Hub Central via CrowdSec local (opcional) ou logs +cat > /usr/local/bin/falco-active-response.sh <<'EOF' +#!/bin/bash +LOG="/var/log/falco-response.log" +while read -r INPUT; do + echo "[$(date)] EVENTO LIDO: $INPUT" >> $LOG + PID=$(echo "$INPUT" | grep -oP 'pid=\K[0-9]+' | head -n1) + if [[ -n "$PID" ]]; then + kill -9 "$PID" 2>/dev/null + echo "[$(date)] PROCESSO MORTO PELO FALCO: $PID" >> $LOG + fi +done +EOF +chmod +x /usr/local/bin/falco-active-response.sh + +sed -i 's/^#file_output:/file_output:/g' /etc/falco/falco.yaml || true +grep -q "falco-active-response" /etc/falco/falco.yaml || cat >> /etc/falco/falco.yaml < /home/$USER_NAME/stack/soc/docker-compose.yml < AMBIENTE DE PRODUÇÃO (Runtime Puro, Traefik, Monitoramento SOC) +# 10.99.0.3 -> BANCO DE DADOS DE PRODUÇÃO DEDICADO (PostgreSQL Bare-metal Appliance) +# 10.99.0.4 -> AMBIENTE DE DESENVOLVIMENTO, HOMOLOGAÇÃO & BUILDER DEPLOYS (GitOps) +# ============================================================================== +# ⚠️ CAUTION: ESTE SCRIPT REPLICA AS CONFIGURAÇÕES DE SEGURANÇA DA VPS 1 (HUB). +# CERTIFIQUE-SE DE QUE A "PRIVATEKEY" DO WIREGUARD DA VPS 10.99.0.4 ESTEJA DISPONÍVEL. +# ============================================================================== +# V8 BUNKER EXTREMO FINAL SUPREMA (VERSÃO DESENVOLVIMENTO, HOMOLOGAÇÃO & BUILDER DEPLOYS 10.99.0.4) +# AGENTE DE MONITORAMENTO (MÉTRICAS E LOGS ENVIADOS PARA A VPS 1) +# ========================================================= +set -eo pipefail + +echo "🚀 INICIANDO V8 BUNKER EXTREMO FINAL SUPREMA NA VPS 4 (DESENVOLVIMENTO & BUILDER)..." + +# ========================= +# 1. VARIÁVEIS DA INFRA +# ========================= +USER_NAME="deploy" +PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzqvHpWO69vdujhyeFaKmOssT5leqIUQsknJiFzHKlK rui@DESKTOP-K5Q17QK" +SERVER_VPN_IP="10.99.0.4" # IP desta VPS na WireGuard +SERVER_GATEWAY_IP="10.99.0.1" # IP da VPS 1 (Hub do Monitoramento) +VPN_SUBNET="10.99.0.0/24" +WG_SERVER_PUBKEY="jUWnuc+82vQ6kLMSI7W1i7hBRBgQKcaSZ8yJy56QSUw=" +WG_SERVER_ENDPOINT="158.220.109.237:51820" # IP Público da VPS 1 +DOMAIN_APP="wa.clube67.com" # Domínio sugerido para gestão do WhatsApp +EMAIL="ruibto@gmail.com" +VPS2_DEV_PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKm085+8paXXj9AzUa00dhuB1IH2/Y4uTStU1zm2I7QZ deploy@vmi2797860" + +# ========================= +# 2. BASE & PACOTES +# ========================= +echo "🚀 Atualizando sistema e instalando pacotes base..." +apt update && apt upgrade -y +apt install -y curl ufw fail2ban auditd apparmor apparmor-utils \ + ca-certificates gnupg lsb-release htop jq acl wireguard + +systemctl enable auditd || true +systemctl enable fail2ban || true + +# ========================= +# 3. USUÁRIO + SSH HARDEN + SUDO (NOPASSWD) +# ========================= +echo "🚀 Criando usuário deploy e blindando SSH..." +id -u $USER_NAME &>/dev/null || adduser --disabled-password --gecos "" $USER_NAME +usermod -aG sudo,adm $USER_NAME + +echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USER_NAME +chmod 0440 /etc/sudoers.d/$USER_NAME + +mkdir -p /home/$USER_NAME/.ssh +echo "$PUBKEY" > /home/$USER_NAME/.ssh/authorized_keys +[[ -n "$VPS2_DEV_PUBKEY" ]] && grep -q "$VPS2_DEV_PUBKEY" /home/$USER_NAME/.ssh/authorized_keys || echo "$VPS2_DEV_PUBKEY" >> /home/$USER_NAME/.ssh/authorized_keys +chmod 700 /home/$USER_NAME/.ssh +chmod 600 /home/$USER_NAME/.ssh/authorized_keys + +# 👉 Proteção: Só cria a chave se ela não existir +if [[ ! -f /home/$USER_NAME/.ssh/id_ed25519 ]]; then + echo "🚀 Replicando chave SSH privada..." + cat < /home/$USER_NAME/.ssh/id_ed25519 +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACBwG0DcQ412wn2+/xm3K2AETCU4o4wao+T5aDMwkN53LgAAAJhUF47tVBeO +7QAAAAtzc2gtZWQyNTUxOQAAACBwG0DcQ412wn2+/xm3K2AETCU4o4wao+T5aDMwkN53Lg +AAAEAZh+6LoVaBZldCRv+wXl+L2gUJqm9x65rTGiTm7I/WTXAbQNxDjXbCfb7/GbcrYARM +JTijjBqj5PloMzCQ3ncuAAAAEWRlcGxveUB2bWkyODQ5Njc0AQIDBA== +-----END OPENSSH PRIVATE KEY----- +EOF + chmod 600 /home/$USER_NAME/.ssh/id_ed25519 + chown -R $USER_NAME:$USER_NAME /home/$USER_NAME/.ssh +fi + +su - $USER_NAME -c "[[ -f ~/.ssh/id_ed25519.pub ]] || ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub" + +sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config +sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config +grep -q "^AllowUsers" /etc/ssh/sshd_config || echo "AllowUsers $USER_NAME" >> /etc/ssh/sshd_config + +# ========================= +# 4. FIREWALL (UFW) +# ========================= +echo "🚀 Configurando regras do Firewall (UFW)..." +ufw default deny incoming +ufw default allow outgoing +# O Baileys geralmente se comunica via portas variáveis, mas o container estará isolado. +# Expomos apenas o Dashboard/API se necessário (VPN ONLY). +ufw allow 80/tcp +ufw allow 443/tcp +ufw allow 52830/udp # Porta local do WG neste Peer +ufw allow from $VPN_SUBNET + +# ========================= +# 5. CONFIGURAÇÃO WIREGUARD (PEER) +# ========================= +if [[ ! -f /etc/wireguard/wg0.conf ]]; then + echo "🚀 Criando configuração do WireGuard (Peer)..." + mkdir -p /etc/wireguard + cat < /etc/wireguard/wg0.conf +[Interface] +Address = $SERVER_VPN_IP/24 +PrivateKey = [COLOQUE_A_PRIVATE_KEY_DA_VPS4_AQUI] +ListenPort = 52830 + +[Peer] +PublicKey = $WG_SERVER_PUBKEY +AllowedIPs = $VPN_SUBNET +Endpoint = $WG_SERVER_ENDPOINT +PersistentKeepalive = 25 +EOF + chmod 600 /etc/wireguard/wg0.conf +fi +systemctl enable wg-quick@wg0 || true + +# ========================= +# 6. SYSCTL HARDENING & NOEXEC +# ========================= +echo "🚀 Aplicando Hardening no Kernel..." +grep -q "net.ipv4.ip_unprivileged_port_start" /etc/sysctl.conf || cat >> /etc/sysctl.conf < $SOC_DIR/promtail/config.yml < /etc/apt/sources.list.d/falco.list +apt update && apt install -y falco + +mkdir -p /var/log +touch /var/log/falco.log +chmod 644 /var/log/falco.log +setfacl -R -m u:$USER_NAME:rx /var/log || true + +# Script para enviar alertas para o Hub Central +cat > /usr/local/bin/falco-active-response.sh <<'EOF' +#!/bin/bash +LOG="/var/log/falco-response.log" +while read -r INPUT; do + PID=$(echo "$INPUT" | grep -oP 'pid=\K[0-9]+' | head -n1) + if [[ -n "$PID" ]]; then + kill -9 "$PID" 2>/dev/null + echo "[$(date)] PROCESSO MORTO PELO FALCO NA VPS 4: $PID" >> $LOG + fi +done +EOF +chmod +x /usr/local/bin/falco-active-response.sh + +sed -i 's/^#file_output:/file_output:/g' /etc/falco/falco.yaml || true +grep -q "falco-active-response" /etc/falco/falco.yaml || cat >> /etc/falco/falco.yaml < /home/$USER_NAME/stack/soc/docker-compose.yml <> .gitignore + echo "ssh_alerts_config.json" >> .gitignore + git add . + git commit -m "feat: commit inicial das instrucoes" + ``` + +2. **Criar um Repositório Privado** no GitHub/GitLab. + +3. **Gerar chaves de acesso SSH (Deploy Keys) nas outras VPSs:** + Em cada VPS que precisa de acesso, gere uma chave SSH para o usuário `deploy`: + ```bash + ssh-keygen -t ed25519 -C "vps-instrucoes-deploy" -f ~/.ssh/id_ed25519_github + ``` + Adicione a chave pública (`.pub`) gerada como **Deploy Key** (com permissão de escrita, se necessário) nas configurações do repositório no GitHub. + +4. **Clonar o repositório nas outras VPSs:** + ```bash + cd /home/deploy + git clone git@github.com:seu-usuario/seu-repositorio.git instrucoes + ``` + +5. **Automatizar o Pull (Opcional):** + Se quiser que as outras VPSs atualizem as instruções automaticamente sempre que houver mudanças no repositório remoto, configure um cronjob de 5 em 5 minutos para rodar o pull: + ```bash + crontab -e + # Adicione a linha abaixo: + */5 * * * * cd /home/deploy/instrucoes && git pull origin main > /dev/null 2>&1 + ``` + +--- + +## 🔄 Opção 2: Syncthing (Sincronização em Tempo Real Descentralizada) + +O **Syncthing** é um serviço peer-to-peer de sincronização contínua de arquivos. Ele roda como um daemon leve nas VPSs e garante que qualquer arquivo criado ou modificado em uma pasta seja propagado instantaneamente para as outras em questão de segundos. + +### Como configurar de forma segura via VPN WireGuard: + +1. **Instalar o Syncthing em todas as VPSs:** + ```bash + sudo apt-get update + sudo apt-get install -y syncthing + ``` + +2. **Configurar para escutar apenas no IP da VPN (Zero-Trust):** + Edite o arquivo de configuração do Syncthing (gerado após a primeira execução em `~/.config/syncthing/config.xml`) e ajuste o endereço da interface gráfica e de sincronização para rodar apenas nos IPs locais ou de VPN, prevenindo exposição pública. + * Altere a linha do GUI para escutar localmente: `
127.0.0.1:8384
` (Você pode acessar usando um túnel SSH do seu notebook: `ssh -L 8384:127.0.0.1:8384 deploy@10.99.0.1`). + +3. **Adicionar os Servidores como Peers:** + * No painel do Syncthing da VPS 1, copie o **Device ID**. + * Adicione esse Device ID no painel da VPS 4/5, especificando o endereço fixo da VPN (ex: `tcp://10.99.0.1:22000`). + * Compartilhe a pasta `/home/deploy/instrucoes` entre eles. + +4. **Habilitar o Serviço na inicialização:** + ```bash + sudo systemctl enable syncthing@deploy.service + sudo systemctl start syncthing@deploy.service + ``` + +--- + +## 🔗 Opção 3: SSHFS (Montagem de Pasta sobre SSH na VPN) + +O **SSHFS** permite montar um diretório remoto de um servidor em outro servidor de forma transparente, utilizando o próprio protocolo SSH de transporte. Como a sua porta SSH (22) está aberta e protegida dentro da rede privada da VPN (`10.99.0.0/24`), este método é extremamente simples e não exige serviços extras rodando em segundo plano além do próprio SSH. + +### Como configurar: + +Digamos que a pasta física está na **VPS 1 (IP `10.99.0.1`)** e você deseja acessá-la em tempo real na **VPS 4 (IP `10.99.0.4`)**: + +1. **Instalar o SSHFS na VPS de destino (ex: VPS 4):** + ```bash + sudo apt-get update + sudo apt-get install -y sshfs + ``` + +2. **Garantir que o usuário `deploy` da VPS 4 tem acesso SSH sem senha à VPS 1:** + Adicione a chave SSH pública (`~/.ssh/id_ed25519.pub`) do usuário `deploy` da VPS 4 no arquivo `/home/deploy/.ssh/authorized_keys` da VPS 1. + +3. **Criar a pasta de montagem na VPS de destino (VPS 4):** + ```bash + mkdir -p /home/deploy/instrucoes + ``` + +4. **Montar o diretório manualmente para testar:** + ```bash + sshfs deploy@10.99.0.1:/home/deploy/instrucoes /home/deploy/instrucoes -o IdentityFile=/home/deploy/.ssh/id_ed25519 -o allow_other -o reconnect -o ServerAliveInterval=15 + ``` + +5. **Tornar a montagem permanente pós-reboot (fstab):** + Adicione a seguinte linha ao final do arquivo `/etc/fstab` na VPS de destino: + ```text + deploy@10.99.0.1:/home/deploy/instrucoes /home/deploy/instrucoes fuse.sshfs x-systemd.automount,IdentityFile=/home/deploy/.ssh/id_ed25519,allow_other,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,_netdev 0 0 + ``` + +--- + +## 🚀 Opção 4: Rsync Automatizado via Cron (Espelhamento Simples) + +Se os agentes nas outras VPSs precisam apenas ler as instruções ou executar instaladores (como o `install.sh`) e você quer uma solução extremamente leve e direta sem montagens de disco. + +### Script de sincronização unidirecional (VPS 1 -> VPS de Destino): + +Na **VPS 1**, crie um script simples ou configure uma tarefa recorrente no Cron para enviar as atualizações: + +```bash +# Sincroniza a pasta de instruções para a VPS 4 através da VPN segura +rsync -avz --delete -e "ssh -i /home/deploy/.ssh/id_ed25519" /home/deploy/instrucoes/ deploy@10.99.0.4:/home/deploy/instrucoes/ +``` + +Você pode programar isso para rodar a cada hora ou a cada 15 minutos de forma silenciosa e imperceptível. + +--- + +## 🎯 Veredito: Qual escolher? + +* **Escolha o Git Privado (Opção 1)** se você deseja que múltiplos agentes (incluindo IAs) façam alterações nos scripts e nos documentos de forma colaborativa, sem riscos de conflitos cegos de escrita e mantendo histórico de auditoria perfeito. +* **Escolha o SSHFS (Opção 3)** se você quer facilidade máxima de implementação imediata: a pasta fica unificada, consome armazenamento físico de apenas uma máquina e reflete edições instantaneamente sem sincronizações adicionais.