Como bloquear o acesso direto à produção sem perder a sanidade
Distribuir chaves SSH para engenheiros frequentemente vira uma bagunça. Alguém pede demissão, mas a chave pública permanece em dezenas de servidores de produção. Alguém acidentalmente executa um comando perigoso no terminal errado, e então você passa meio dia nos logs do sistema tentando descobrir de quem era a sessão.
À medida que o número de servidores cresce e a equipe se expande, conexões diretas com máquinas se tornam um pesadelo. Geralmente nesse ponto, as empresas olham para o conceito 4A: autenticação, autorização, contabilidade e auditoria. No entanto, implementar soluções robustas como Teleport ou CyberArk requer tempo e recursos significativos.
Recentemente encontrei um projeto chamado OneTerm no GitHub. É um gateway de acesso leve e open-source escrito em Go e Vue.js. Ele resolve o problema de acesso centralizado a servidores sem configuração complexa.
O que tem dentro do OneTerm
O princípio é simples: o OneTerm se torna uma camada entre os funcionários e a infraestrutura de produção. Os desenvolvedores não se conectam aos hosts diretamente via SSH ou RDP. Eles fazem login no painel web do OneTerm e lançam a sessão necessária a partir daí.
O projeto cobre as necessidades básicas de segurança:
- Ponto único de entrada com suporte a autenticação de dois fatores.
- Concessão de permissões para servidores específicos e grupos de usuários.
- Gravação de vídeo e texto dos logs para cada sessão. Se algo quebrar em um servidor, a operação pode ser reproduzida no player integrado para examinar os detalhes.
- Isolamento de sessão para evitar que usuários interfiram uns nos outros e escalem privilégios dentro do gateway.
- Proteção de hosts internos contra acesso direto da internet externa.
Além do SSH padrão, o OneTerm suporta os protocolos RDP e VNC. Isso é útil para quem tem servidores Windows ou máquinas virtuais com interfaces gráficas rodando em sua infraestrutura.
Stack técnico e integrações
A stack do projeto é bem familiar. O backend é escrito em Go, e a interface do usuário é construída com Vue.js usando a biblioteca Ant Design Vue. O build em Go oferece baixo consumo de memória e performance rápida do terminal web.
Os desenvolvedores adicionaram integração nativa com o Veops CMDB. Este é outro de seus projetos open-source. Se a contabilidade de equipamentos é mantida em seu CMDB, os servidores são importados para o bastion com um clique. Não há necessidade de inserir manualmente endereços IP, portas e credenciais.
Vamos dar uma olhada na interface do sistema.
O terminal funciona diretamente na janela do navegador. Os engenheiros não precisam configurar clientes locais, configurar túneis ou armazenar chaves em seus laptops.
Os direitos de acesso são segmentados com base em tempo e funções. Você pode conceder acesso a um servidor apenas durante o período de plantão ou durante trabalhos técnicos.
Como implantar e testar
Para uma introdução local, os autores prepararam uma configuração Docker Compose. A inicialização leva alguns minutos:
git clone https://github.com/veops/oneterm.git
cd oneterm/deploy
docker compose up -d
Após os containers iniciarem, a interface web abre em http://127.0.0.1:8666. O login padrão é admin, e a senha é 123456.
Para um ambiente de produção, esta opção não funcionará. Para este caso, os desenvolvedores escreveram um script de configuração interativo ./setup.sh. Ele gera senhas aleatórias para o banco de dados e serviços internos, atualiza as configurações automaticamente e salva um backup.
git clone https://github.com/veops/oneterm.git
cd oneterm/deploy
./setup.sh
docker compose up -d
Se você quiser adicionar sua própria funcionalidade, o projeto tem scripts prontos para hot-reload do frontend e backend: ./dev-start.sh frontend e ./dev-start.sh backend. Node.js versão 14.17.6+ e Go versão 1.21.3+ são necessários para compilar.
Nuances e limitações
Antes de trazer a ferramenta para um ambiente de produção, você deve considerar alguns detalhes específicos:
- O código é distribuído sob a licença AGPL-3.0. Se você decidir criar uma solução SaaS comercial fechada a partir dele, será necessário abrir suas modificações.
- O branch
mainno repositório é constantemente atualizado e pode funcionar de forma instável. Para uso em servidores, pegue apenas releases compilados da página Releases. - A documentação ainda é bastante breve. Os desenvolvedores respondem nas Issues do GitHub, mas alguns detalhes precisarão ser descobertos diretamente no código-fonte.
Resumo
O OneTerm é adequado para pequenas equipes de operações e administradores de sistemas que desejam organizar rapidamente o gerenciamento de acesso. Se você precisa de um bastion host simples com gravação de sessão, segmentação de acesso e suporte a SSH e RDP, o projeto cobrirá as tarefas básicas sem complexidade desnecessária.
Você pode experimentar a interface sem instalação na demo oficial oneterm.v1ops.com com login demo e senha 123456.
Projetos relacionados