ExploreTrendingAnalytics
Nostr Archives
ExploreTrendingAnalytics
Fajre6d ago
Boa noite guys. Gostaria de compartilhar um pedaco dos ultimos dias do meu JOURNAL.md do meu Homelab. (leia de tras pra frente os dias). --- ## 2026-03-10 **Status:** ✅ Sucesso (Integração End-to-End). **Foco:** Implementação do Client (Sparrow Wallet), Supply Chain Security e Hardening de Privacidade. ### A Batalha do Supply Chain (Confiança Matemática) - **Risco:** Instalar softwares financeiros (Carteiras) via repositórios mantidos por terceiros (AUR por exemplo) abre vetor para injeção de malware roubador de chaves. - **Defesa (PGP):** Antes da instalação, a chave pública do desenvolvedor principal (Craig Raw) foi importada via Keybase e seu *fingerprint* validado (`D4D0 D320 2FC0 6849 A257 B38D E946 1833 4C67 4B40`). O comando `yay` foi instruído a validar o `.tar.gz` assinado antes da descompactação. ### Hardening de Privacidade (A Armadilha do Mempool.space) - **O Problema:** Por padrão, o Sparrow Wallet "vaza" a identidade de rede. Ele usa o `mempool.space` público para consultar o preço das taxas de rede e visualizar blocos, vinculando o IP físico da operadora (ISP) ao interesse na blockchain. - **Solução:** Nas configurações gerais do Sparrow (`File -> Preferences`), a fonte de taxas (Fee Rates Source) foi alterada para `Server` (apontando as consultas para a própria VM `OrangeShadow`). O *Block Explorer* foi silenciado. Consultas FIAT (Coingecko) foram mantidas por não transmitirem dados criptográficos de conta. ### Conexão e O "Aperto de Mão" - A conexão `Private Electrum` foi estabelecida sem TLS (visto que a rede local VLAN 20 -> VLAN 30 já é um conduíte confiável) na porta `50001`. - **Telemetria:** O Sparrow retornou `Batched RPC enabled` e conectou ao `electrs 0.11.1`. Os blocos da mempool exibidos na aba de envio agora são alimentados em tempo real pelo meu próprio hardware. ### Criação da Sandbox (Arquitetura de Cofres) - **Escala de Paranoia:** Foi definido que a carteira criada hoje (Software Wallet nativa) operará como uma **Sandbox (Hot Wallet)** para aprendizado. Em cenários de produção futuros para reserva de valor, será exigida a implementação de Airgapped Cold Storage (ex: SeedSigner) ou uso amnésico via Tails OS. - **Protocolo de Criação:** A semente BIP39 de 24 palavras foi gerada off-screen e registrada/armazenada de forma segura. - **Resultado Final:** A carteira importou o `xpub` (Master Public Key) e o nó `OrangeShadow` varreu os 750GB de disco em milissegundos via índice RocksDB, confirmando a inexistência histórica de UTXOs atrelados à chave. Soberania alcançada. ## 2026-03-09 **Status:** ✅ Sucesso (Nó Público Onion e Indexação em Andamento). **Foco:** Abertura do Perímetro Tor (Inbound) e Engenharia de Compilação do Electrs (Fase 2). ### O Risco do "Erro Fatal do GitHub" (Segurança P2P) - **O Dilema:** Para o nó do Bitcoin ser um cidadão útil e validar/enviar blocos, ele precisa aceitar conexões (Inbound). O padrão da comunidade é definir o parâmetro `externalip=xyz.onion` no `bitcoin.conf`. - **A Falha de OPSEC:** Como minha infraestrutura segue o paradigma *Infrastructure as Code* (GitOps), commitar um arquivo com o endereço onion exato no GitHub vincularia imediatamente minha identidade digital (DevOps) ao nó na Darknet, quebrando o princípio básico de anonimato. - **A Solução (Tor Control API):** - Habilitei as diretrizes `ControlPort 9051` e `CookieAuthentication 1` no `/etc/tor/torrc`. - Inseri o usuário do sistema (`fajre`) no grupo `debian-tor` para permitir a leitura do cookie criptográfico. - No `bitcoin.conf`, apliquei `listen=1`, `listenonion=1` e `discover=1`. - **Resultado:** O Bitcoin Core conversou com o Daemon do Tor, negociou a criação de um *Hidden Service* em background, e publicou-se na rede. O comando `bitcoin-cli getnetworkinfo` retornou o endereço `.onion` na porta 8333 com sucesso absoluto. Zero rastros no Git. ### Compilação (Electrs vs Debian Trixie) - **Necessidade:** O Bitcoin Core armazena blocos, mas não é um banco de dados pesquisável por endereços. O Electrs (Rust) atua como tradutor para a carteira Sparrow. A exigência de segurança (Supply Chain) forçou a compilação local (sem binários pré-compilados de terceiros). - **Incidente 1 (Crash de API JSON):** A versão estável (tag `v0.10.4`) do Electrs compilou perfeitamente em ~8 minutos. Porém, ao iniciar, entrou em *Crash Loop* (Erro: `JSON error: invalid type: sequence, expected a string`). - *Causa Raiz:* O Bitcoin `v28.1` (Bleeding Edge) alterou a estrutura da resposta do RPC `localaddresses` de string para array (sequence). O Electrs legado quebrou. - *Roll-Forward:* Mudei a branch git do Electrs para a `master` para pegar as atualizações de API mais recentes. - **Incidente 2 (O labirinto do Clang/LLVM):** Durante a recompilação da `master`, o script falhou criticamente no pacote `rust-rocksdb` (Erro: `couldn't find any valid shared libraries matching: ['libclang.so']`). - *Causa Raiz:* O script do Rust não encontrou o caminho da biblioteca dinâmica C++ no Debian Testing (que a instala como `libclang-19-dev` em diretórios específicos versionados). - *Solução:* Instalação forçada do pacote base e injeção do caminho correto via variável de ambiente antes da compilação: `export LIBCLANG_PATH=$(llvm-config-19 --libdir)`. - **Vitória:** O binário otimizado da versão `0.11.1` foi gerado (3m 18s). - **Ignição:** O serviço `electrs.service` foi iniciado (com colete de força `MemoryMax=10G`). Os logs mostraram que a comunicação com o Bitcoin via `.cookie` funcionou perfeitamente e o Electrs começou a engolir os blocos da rede a velocidades extremas. A indexação completa no SSD SATA vai durar a madrugada. ## 2026-03-08 (Parte 2) **Status:** ✅ Sucesso (IBD Concluído e Camuflagem). **Foco:** Finalização da Sincronização do Bitcoin e Transição para a Rede Tor. ### A Matemática do Sucesso (Benchmark do IBD) - O *Initial Block Download* (IBD) processou toda a história do Bitcoin (de 2009 até o bloco 939.920) em aproximadamente **21 horas**. - **Fatores de Êxito:** A estratégia de utilizar um SSD com cache DRAM (Samsung 870 EVO) aliado à alocação de 11GB de RAM (`dbcache=11000`) foi impecável. No pico, o nó segurou mais de 63 milhões de UTXOs em ~8.6 GB de RAM antes de consolidar no disco, evitando o *thrashing* da controladora SATA. ### O Grande Flush e a Transição (Fase 2) - Executei o `systemctl stop bitcoind`. O tempo de *flush* dos dados da RAM para o disco levou vários minutos, validando a necessidade do parâmetro `TimeoutStopSec=600` que configurei no Systemd ontem para evitar corrupção por encerramento forçado. - **Redução de Pegada:** Com o banco de dados atualizado, o nó não precisa mais devorar a memória do servidor. O `dbcache` foi estrangulado para `512` (MB), devolvendo mais de 10GB de RAM para o Sistema Operacional (que serão usados pelo Electrs). ### Camuflagem (Tor) - O pacote `tor` já havia sido instalado no Debian. O teste via `curl --socks5` confirmou a saída anônima. - O `bitcoin.conf` foi alterado para operar **estritamente via Tor** (`onlynet=onion`). A máquina sumiu da Clearnet. - **Validação:** Ao reiniciar, os logs reportaram `Leaving InitialBlockDownload` e as novas conexões `block-relay-only` passaram a ocorrer perfeitamente através de *peers* Onion (v2/v3). O motor base está concluído. ## 2026-03-08 **Status:** ✅ Sucesso (IBD Iniciado). **Foco:** Ignição do Nó Bitcoin (OrangeShadow - VM 107), Engenharia de Throttling e Correção de Backup. ### Desilusões Arquiteturais e Realismo Físico - **O Mito do "All-in-One":** Descartei a ideia de rodar Mempool.space e Lightning Network no servidor. A memória RAM (8GB alvo para produção) não comporta Redis e MariaDB operando simultaneamente com o motor do Monero e Bitcoin sem causar *starvation*. A LN exige *inbound liquidity* e *clearnet* de baixa latência, incompatíveis com roteamento Tor. O servidor será estritamente uma caixa-forte *On-Chain*. - **A Armadilha da Hot Wallet (`wallet.dat`):** O plano original previa backupear a carteira no Backblaze B2. Inaceitável. O Bitcoin Core foi reconfigurado com `disablewallet=1`. O nó é agora um validador cego. A seed será gerada offline (Tails OS) e o client (Sparrow no Arch Linux) terá apenas a chave pública (xpub). ### Blindagem de Hypervisor (Proxmox Cgroups) Para impedir que a validação matemática intensa (ECDSA/Schnorr) cause um ataque DoS contra os nós críticos (DockerHost, OPNsense), apliquei limites diretamente no metal via CLI: - **CPU:** `qm set 107 --cpuunits 512` (reduz o peso no scheduler do Proxmox à metade do padrão) e `--cores 4` (teto físico). - **I/O de Disco:** `qm set 107 --scsi1 file=/dev/disk/by-id/[...],iothread=1,mbps_wr=250,mbps_rd=400,aio=threads,discard=on,backup=0`. Limitou-se a escrita a 250 MB/s para que a controladora da placa-mãe não trave os SSDs NVMe do pool ZFS principal. ### Erros, Falhas e Soluções (Post-Mortem do Setup) - **Erro de Traffic Shaping (Network):** Ao tentar limitar a rede a 15MB/s (`rate=15` no `net0`), o Kernel do Proxmox disparou alertas do algoritmo *sch_htb* (`quantum of class 10001 is big`). Limitar a placa virtual L2 estrangulou a comunicação com o Gateway e DNS. **Solução:** Removi o limite físico (`qm set 107 --net0 virtio=...,bridge=vmbr0,tag=30`) e deleguei o controle de rede à aplicação (`maxconnections=40` no `bitcoin.conf`). - **Engano de Hot-Plug de SCSI:** Tentei injetar os parâmetros assíncronos (`aio=threads`) com a VM rodando. O Proxmox registrou a mudança em laranja (Pending Change), pois KVM não altera o pipeline de disco root a quente. **Solução:** Foi necessário o ciclo elétrico bruto (`qm stop 107` seguido de `qm start 107`). Um simples reboot via Linux não injetaria a alteração do Hypervisor. - **Erro Estratégico de P2P:** Iniciei com `listen=1`. Isso permitiu conexões de entrada. A máquina começou a ler do disco e servir blocos históricos para outros nós, gastando I/O que deveria ser da própria validação. **Solução:** Alterado para `listen=0` (Modo Parasita) temporariamente até o fim do IBD. ### Validação de FS e Instalação - Verifiquei o `/etc/fstab` e constatei que o disco do blockchain já havia sido montado com a diretriz `noatime`. Isso evitou a escrita contínua de metadados (*Access Time*) cada vez que um bloco de 2MB é lido, salvando ciclos cruciais de IOPS. - Instalação via binários pré-compilados (`v28.1`) verificados por `sha256sum`. ### Correção Crítica de Backups (Restic) O arquivo `setup_backup.yml` do Ansible instruía o backup da pasta blockchain inteira e do `wallet.dat`. Isso subiria 700GB de dados públicos inúteis para a nuvem e, pior, poderia vazar chaves privadas. **Solução:** O Restic na OrangeShadow foi reescrito para fazer o backup **estritamente** da inteligência do nó (`bitcoin.conf`, `bitcoind.service`), ignorando `/opt/blockchain`. Documentação completa do homelab em: https://github.com/fajremvp/homelab
💬 1 replies

Replies (1)

Fajre6d ago
resumindo: Eu montei uma infraestrutura autossoberana para Bitcoin, focada em segurança e privacidade máximas. Instalei e configurei um nó completo do Bitcoin em uma VM no Proxmox, sincronizei toda a blockchain (~750 GB) e configurei o nó para operar exclusivamente via Tor, incluindo a criação automática de um serviço onion para conexões P2P sem expor o endereço no GitHub. Compilei manualmente o Electrs (em Rust) para indexar a blockchain e permitir consultas rápidas pela Sparrow Wallet, resolvendo erros de compatibilidade e dependências durante a compilação. Também implementei várias medidas de segurança: verificação PGP do software para evitar ataques de supply chain, uso da carteira apenas como hot wallet de teste, remoção de qualquer carteira com chaves privadas do servidor, backup apenas das configurações e limitação de CPU, RAM e I/O da VM para não sobrecarregar o host. No final, conectei a Sparrow Wallet ao meu próprio servidor Electrum, eliminando dependência de serviços externos e garantindo que todas as consultas da carteira passem pelo meu próprio nó, aumentando a privacidade e o controle sobre a interação com a rede Bitcoin.
00
0
0 sats