
Proxy bastião SSH de confiança zero com gerenciamento de chaves baseado em Vault, aplicação de políticas RBAC, gravação completa de sessões e TUI administrativa para acesso auditável à infraestrutura de produção.
ZTTP é um proxy bastion SSH de Confiança Zero, auto-hospedado e reforçado, construído em Golang com gestão de chaves suportada pelo HashiCorp Vault, aplicação de políticas RBAC, gravação completa de sessões e uma TUI administrativa interativa — concebido para equipas que necessitam de acesso auditável e de confiança zero à infraestrutura de produção.
As equipas de engenharia modernas precisam de uma forma de dar aos programadores o acesso mínimo necessário para desempenharem as suas funções — nem mais, nem menos. A distribuição tradicional de chaves SSH é propensa a erros: as chaves são partilhadas, esquecidas nos portáteis e revogadas demasiado tarde.
O proxy SSH ZTTP resolve isto ao atuar como a única porta de confiança zero para a sua infraestrutura:
| Problema | Solução ZTTP |
|---|---|
| Chaves SSH partilhadas nos portáteis | As chaves residem apenas no HashiCorp Vault — nunca no disco |
| Sem visibilidade sobre quem fez o quê | Cada tecla premida é gravada em formato .ttyrec |
| Acesso total à produção | O motor de políticas baseado em funções aplica regras por ambiente |
| Sem forma de parar uma sessão ativa | O endpoint gRPC de kill-switch termina qualquer sessão em direto |
| Acesso opaco para auditores | TUI de administração com reprodução de sessões, registos de texto e registos de ações administrativas |
Developer Laptop
│
│ zttp
│ (Under the hood: SSH over port 2224)
▼
┌─────────────────────────────────────────────────────────┐
│ ZTTP Proxy │
│ │
│ ① Auth Gate — bcrypt/Argon2id login TUI │
│ ② RBAC Engine — environment-aware policy check │
│ ③ Vault Fetch — ephemeral SSH key retrieval │
│ ④ Bridge — transparent TCP tunnel │
│ ⑤ Audit Writer — ttyrec frame recorder │
└──────────┬──────────────────────────────────────────────┘
│ ssh (private IP, ephemeral key)
▼
Target Server
Serviços de infraestrutura (Docker Compose):
| Serviço | Finalidade |
|---|---|
zttp-proxy | O proxy bastion SSH ZTTP principal (binário Golang) |
zttp-postgres | Banco de dados do plano de controle (usuários, servidores, políticas RBAC) |
zttp-vault | HashiCorp Vault — armazena chaves privadas SSH |
zttp-nginx | Serve instaladores da CLI em /release/ |
zttp-init-audit | Contêiner de execução única que corrige permissões de volume |
.ttyrec com quadros com carimbo de data/horaServidor (host do proxy):
2224make (opcional, mas recomendado)Desenvolvedor (cliente):
ssh)git clone https://gitlab.com/Nihal799/zttp.git
cd zttp
cp .env.example .env
Edite o .env e defina no mínimo:
PROXY_NODE_IP=<your-server-public-ip>
POSTGRES_PASSWORD=<a-strong-password>
VAULT_TOKEN=<a-strong-vault-token>
⚠️ Nunca faça commit do seu arquivo
.env. Ele está listado no.gitignore.
make docker-up
# or directly:
docker compose -f deploy/docker-compose.yml up -d --build
make docker-ps
curl http://localhost:8080/healthz
make release PROXY_ADDR=<your-server-ip>:2224
Isso compila de forma cruzada clientes para todas as plataformas e atualiza automaticamente dist/install.sh e dist/install.ps1 com o URL correto do servidor. O contentor Nginx serve estes em http://<your-server-ip>:8555/.
curl -fsSL http://<proxy-ip>:8555/install.sh | bash
irm http://<proxy-ip>:8555/install.ps1 | iex
Após a instalação, conecte-se ao gateway ZTTP:
zttp
# or directly:
ssh -p 2224 <your-username>@<proxy-ip>
Você verá uma tela de login de terminal. Após a autenticação, você verá uma lista de servidores aos quais está autorizado a acessar.
Toda a configuração é feita por variáveis de ambiente (ou arquivo .env). Consulte .env.example para a referência completa.
| Variável | Padrão | Descrição |
|---|---|---|
PROXY_LISTEN_ADDR | 0.0.0.0:2222 | Endereço de bind do proxy SSH |
HTTP_LISTEN_ADDR | 0.0.0.0:8080 | Endereço HTTP de verificação de integridade |
GRPC_LISTEN_ADDR | 0.0.0.0:9090 | Endereço gRPC do kill-switch |
PROXY_NODE_IP | 127.0.0.1 | IP externo embutido nos binários da CLI |
DATABASE_URL | postgres://zttp:... | String de conexão do PostgreSQL |
VAULT_ADDR | http://localhost:8201 | URL do servidor Vault |
VAULT_TOKEN | dev-root-token-zttp | Token root do Vault (apenas dev — use AppRole em produção) |
MAX_FAILED_ATTEMPTS | 5 | Limite de bloqueio |
LOCKOUT_DURATION | 15m | Duração do bloqueio da conta |
RATE_LIMIT_PER_MIN | 10 | Máximo de tentativas de login por minuto por IP |
AUDIT_LOG_DIR | /var/log/zttp/audit | Caminho para o diretório de gravação de sessões |
SOC_WEBHOOK_URL | (vazio) | Webhook opcional para alertas do SOC |