Executando verificação de segurança...
16

Pitch: 🚇Crom-me: Como criei minha própria infraestrutura de Túneis e Subdomínios usando Go - Opensource - Serviço FREE alternativo ao ngrok

Olá, pessoal! Gostaria de compartilhar com vocês o Crom-me, um projeto que venho desenvolvendo para resolver uma dor recorrente no meu workflow: a necessidade de expor serviços locais de forma rápida e segura, mantendo o controle total sobre os dados e o roteamento.

O projeto está atualmente em Beta (v0.3). Ele já está funcional, mas decidi abrir o código e a estratégia agora porque quero ouvir a opinião de desenvolvedores que lidam com infraestrutura para saber como evoluir o projeto da melhor forma.

🚀 O que é o Crom-me?

O Crom-me é um ecossistema de conectividade open-source. Ele atua como uma alternativa leve a ferramentas como ngrok ou Cloudflare Tunnels. Eu o criei para servir de base para os meus outros projetos hospedados no ecossistema crom.run, permitindo que eu teste novas funcionalidades e integre webhooks sem depender de serviços externos limitados.

O sistema se divide em três componentes principais:

  1. Portal (crom.me): Onde gerencio meus subdomínios fixos e acompanho a telemetria básica.
  2. Infraestrutura de Túneis: O motor que permite o redirecionamento de tráfego via subdomínios dinâmicos.
  3. CROM-CLI: Uma ferramenta em Go que permite instalar e subir um túnel em um único comando.

🛠️ A Arquitetura Técnica

Escolhi Go para o coração do projeto pela sua eficiência nativa com concorrência e rede.

Pontos-chave da implementação:

  • WebSocket Multiplexing: Utilizamos WebSockets (WSS) para manter a conexão persistente entre o meu terminal (local) e a VPS (remota). O motor multiplexa múltiplas requisições HTTP sobre esse túnel.
  • Identidade via GitHub: Usei OAuth do GitHub para autenticar o CLI. Isso garante uma barreira de entrada contra abusos e facilita a gestão de usuários sem precisar de um sistema de senhas complexo.
  • Edge & DNS (Cloudflare): O tráfego passa pela malha da Cloudflare antes de chegar no meu Nginx. Isso me dá SSL/TLS v1.3 automático e proteção na borda.
  • Docker-First: Todo o ambiente (API, Banco Postgres e Nginx) roda em containers, o que facilitou muito o deploy na VPS e a portabilidade.

💡 Por que construir isso do zero?

A maior motivação foi o "dogfooding". Eu precisava de uma forma estável de testar meus outros projetos (SaaS de e-commerce e gestão médica) que rodam no crom.run.

Depender de planos gratuitos de terceiros era frustrante: sessões que expiravam, portas bloqueadas e URLs que mudavam toda hora. Com o Crom-me, eu criei a ferramenta que eu precisava para validar meus próprios deploys e mostrar previews de forma profissional.

🤝 Pedido de Feedback (Para os Seniores e DevOps)

O projeto está em beta e eu sei que há muito o que melhorar. Gostaria da opinião técnica de quem puder dar uma olhada:

  • Protocolo: WebSockets atendem bem, mas para alta carga, deveríamos considerar gRPC ou talvez tunelamento via SSH puro?
  • Segurança: Quais as melhores práticas para isolar o tráfego de subdomínios dinâmicos e evitar que um túnel "suje" a reputação do IP da VPS?
  • Evolução: Atualmente, foco em simplicidade. O que mais faz falta para você em uma ferramenta de túnel? Inspeção de pacotes via CLI? Logs persistentes?
  • Prosseguimento: Qual a melhor forma de escalar esse backend para suportar múltiplos nós de saída sem perder a centralização do auth?

🔗 Teste e Contribua

Se você quiser testar e me dar um feedback real:

Qualquer bug reportado ou sugestão de arquitetura é extremamente valiosa. Estou criando isso para uso pessoal, mas quero que seja uma ferramenta de referência para quem, assim como eu, valoriza a autonomia no desenvolvimento.

☕ Apoie o Desenvolvimento Open-Source Nacional (Não falo só de mim aqui)

A revolução da "IA Soberana" e do "Local-First" não acontece apenas no Vale do Silício ou na Europa. Aqui no Brasil, através da organização Crom, também estou focado em construir e manter projetos que devolvem o controle ao desenvolvedor (além de trazer análises aprofundadas como esta para o TabNews e comunidade).

Manter o desenvolvimento de ferramentas open-source e a produção de conteúdo técnico denso exige tempo, dedicação e, claro, muito ☕ e 🍀. Se este artigo gerou valor para você, ou se você apoia a iniciativa de construirmos tecnologia de base independente por aqui, qualquer apoio é bem-vindo.

Sim eu uso IA, não como meu amigo ou faz tudo, mas como ferramenta, e recomendo o mesmo a você.

Estou idealizando ainda um módulo dedicado de donations na plataforma da Crom, mas enquanto ele não entra no ar, estou aceitando apoios via PIX para manter a infraestrutura rodando:

Chave PIX:
mrj.crom@gmail.com

⚠️ Importante:
Se você realizar um apoio, por favor, envie o comprovante (pode ser apenas com seu user do GitHub ou TabNews no assunto/corpo) para o e-mail: mrj.crom@gmail.com.

O Futuro: Assim que eu lançar a implementação oficial de donate/invest da Crom, farei questão de migrar manualmente esses apoios, transformando-os em créditos, badges de early supporter ou garantindo os devidos agradecimentos na plataforma.

Muito obrigado por ler até aqui e pela força! 🗿🍷


Juan Cândido (MrJ)
Desenvolvedor e Fundador da Crom

Carregando publicação patrocinada...
4

Uma coisa que percebi lendo as requisições do python é que ele lida com requisições esternas como se fossem requisições locais e isso devido a o cloudflare tunnel. Sabem cmo resolver?
Esses "tunnels" transformam requisições esternas em locais, e se o cara souber explorar basicamente ele consegue rodar comandos e tentar explorar alguma vulnerabilidade.

1

Olá, Juan. Meu nome é Juan também kkkj, mas pode me chamar de J. Muito pertinente sua observação técnica sobre o funcionamento de túneis. Você tocou em um ponto crítico de segurança: a confiança implícita no localhost.

Sobre a questão técnica das requisições e a Confiança no Localhost

No Crom-me, o túnel funciona criando uma ponte via WebSocket entre o servidor (VPS) e o cliente local (crom-cli). O risco que você apontou é real: como o crom-cli faz uma requisição HTTP interna para a aplicação do usuário (ex: um Flask na porta 5000), a aplicação enxerga o tráfego vindo de 127.0.0.1. Se o desenvolvedor deixar uma rota como /admin/shutdown protegida apenas por IP, qualquer pessoa com a URL do túnel poderia acessá-la.

Como podemos evoluir o Crom-me tecnicamente para resolver isso:

  • Injeção de Headers no Protocolo Customizado: Atualmente, o meu internal/tunnel/protocol.go transporta o corpo e os headers da requisição original. O próximo passo é garantir que o servidor capture o r.RemoteAddr (o IP real do atacante/visitante) e o encapsule na estrutura de dados enviada ao CLI.
  • Sanitização no crom-cli: O crom-cli deve ser instruído a injetar obrigatoriamente os headers X-Forwarded-For e X-Real-IP antes de disparar a requisição contra o serviço local. Isso "avisa" a aplicação de que aquela conexão é, na verdade, um proxy.
  • Implementação de Trusted Proxies: No lado da aplicação, vou configurar um middleware (como o ProxyFix no Python ou o RealIP em Go) para desconsiderar o IP local e ler o IP real, mas apenas se a requisição vier de um proxy conhecido (neste caso, o binário do Crom).
  • Mecânicas de Zero Trust: No longo prazo, o Crom pode implementar um "Access Control" no próprio túnel, onde o usuário define no crom-cli quais IPs externos têm permissão para cruzar a ponte, bloqueando o acesso indesejado antes mesmo de ele chegar à rede local.

Muito obrigado pelo seu comentário, vou analise melhor posteriormente para melhor essa aplicação.


Convite

Li seu artigo sobre a exaustão com a falta de acessibilidade em ferramentas de segurança. Como desenvolvedor, seu relato foi um tapa na cara necessário. Muitas vezes, na pressa de arquitetar a rede, backend, frontend, ux... deixamos passar o básico de acessibilidade, o que exclui talentos como o seu. Sei que continuarei errando quanto a isso, por isso recomendo se integrar a pessoas que não possuem o mesmo problema que você, e tentar com elas criar um movimento, acredito ser algo fundamental, não só para inclusão, mas para não haver desperdicios de talentos como o seu, e criar as pontes para outros que não conhecem se interessar por esse caminho.

Estou construindo o ecossistema CROM, um projeto focado em infraestrutura independente e soberania técnica. Como mencionei, ainda não foquei nas partes de acessibilidade (estou na fase de criatividade e "escovação de bits" da rede e segurança), mas adoraria que esse fosse um pilar nativo do projeto, e não algo corrigido depois.

Gostaria de te fazer um convite:
Se você tiver dificuldade em navegar ou entender o site atual da https://crom.run devido às barreiras que você mesmo apontou, deixo aqui dois artigos meus no TabNews que explicam a essência do que estou montando:

  1. Apenas um relato — MRJ
  2. Manifesto Pessoal — MRJ

Além disso, todos os artigos técnicos dos meus projetos estão no meu perfil aqui no TabNews.

Adoraria conversar com você por e-mail: mrj.crom@gmail.com. Sua visão em Cyber Security e sua experiência com acessibilidade seriam inestimáveis para o CROM. Se tiver interesse em conhecer e, quem sabe, participar desse desenvolvimento desde a base, as portas estão abertas.

Se quiser uma call, tem o discord: https://discord.gg/4b5wqdxreZ

Um abraço,
MrJ - de Juan para Juan - Teu chará kkj

4
2

se voce quer algo só para testar a estrutura de seu projeto temporariamente no celular ou outro dispositivo, é melhor tailscale. mas de qualquer forma se alguem que algo profissional ira provavelmente pagar por um dominio. mas gosto da ideia, irei testar.