
Zero-trust SSH бастион-прокси с управлением ключами на базе Vault, применением политик RBAC, полной записью сессий и административным TUI для аудируемого доступа к производственной инфраструктуре.
ZTTP — это усиленный, самостоятельно размещаемый прокси-бастион Zero-Trust SSH, написанный на Golang, с управлением ключами на базе HashiCorp Vault, применением политик RBAC, полной записью сессий и интерактивным административным TUI — разработан для команд, которым нужен поддающийся аудиту доступ к производственной инфраструктуре по принципу нулевого доверия.
Современным инженерным командам нужен способ предоставить разработчикам минимально необходимый доступ для выполнения их работы — не больше и не меньше. Традиционное распространение SSH-ключей подвержено ошибкам: ключи передаются между людьми, забываются на ноутбуках и отзываются слишком поздно.
Прокси-бастион ZTTP SSH решает эту проблему, выступая единственной дверью нулевого доверия в вашу инфраструктуру:
| Проблема | Решение ZTTP |
|---|---|
| SSH-ключи передаются на ноутбуках | Ключи хранятся только в HashiCorp Vault — никогда на диске |
| Нет видимости того, кто что делал | Каждое нажатие клавиши записывается в формате .ttyrec |
| Безусловный доступ к производственной среде | Движок политик на основе ролей применяет правила для каждой среды |
| Нет способа остановить активную сессию | gRPC-эндпоинт аварийного отключения завершает любую живую сессию |
| Непрозрачный доступ для аудиторов | Административный TUI с воспроизведением сессий, текстовыми журналами и журналами действий администраторов |
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
Инфраструктурные сервисы (Docker Compose):
| Сервис | Назначение |
|---|---|
zttp-proxy | Основной прокси-бастион ZTTP SSH (бинарник на Golang) |
zttp-postgres | База данных плоскости управления (пользователи, серверы, политики RBAC) |
zttp-vault | HashiCorp Vault — хранит приватные ключи SSH |
zttp-nginx | Раздаёт установщики CLI по пути /release/ |
zttp-init-audit | Одноразовый контейнер, исправляющий права доступа к томам |
.ttyrec с кадрами, помеченными временными меткамиСервер (хост прокси):
2224make (необязательно, но рекомендуется)Разработчик (клиент):
ssh)git clone https://gitlab.com/Nihal799/zttp.git
cd zttp
cp .env.example .env
Отредактируйте .env и задайте как минимум:
PROXY_NODE_IP=<your-server-public-ip>
POSTGRES_PASSWORD=<a-strong-password>
VAULT_TOKEN=<a-strong-vault-token>
⚠️ Никогда не коммитьте ваш файл
.env. Он указан в.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
Это кросс-компилирует клиентов для всех платформ и автоматически обновляет dist/install.sh и dist/install.ps1 правильным URL сервера. Контейнер Nginx раздаёт их по адресу http://<your-server-ip>:8555/.
curl -fsSL http://<proxy-ip>:8555/install.sh | bash
irm http://<proxy-ip>:8555/install.ps1 | iex
После установки подключитесь к шлюзу ZTTP:
zttp
# or directly:
ssh -p 2224 <your-username>@<proxy-ip>
Вы увидите экран входа в терминал. После аутентификации отобразится список серверов, к которым у вас есть доступ.
Вся конфигурация задаётся через переменные окружения (или файл .env). Полный справочник см. в .env.example.
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
PROXY_LISTEN_ADDR | 0.0.0.0:2222 | Адрес привязки SSH-прокси |
HTTP_LISTEN_ADDR | 0.0.0.0:8080 | HTTP-адрес для проверки работоспособности |
GRPC_LISTEN_ADDR | 0.0.0.0:9090 | gRPC-адрес kill-switch |
PROXY_NODE_IP | 127.0.0.1 | Внешний IP, встраиваемый в бинарники CLI |
DATABASE_URL | postgres://zttp:... | Строка подключения к PostgreSQL |
VAULT_ADDR | http://localhost:8201 | URL сервера Vault |
VAULT_TOKEN | dev-root-token-zttp | Корневой токен Vault (только для разработки — в продакшене используйте AppRole) |
MAX_FAILED_ATTEMPTS | 5 | Порог блокировки |
LOCKOUT_DURATION | 15m | Длительность блокировки учётной записи |
RATE_LIMIT_PER_MIN | 10 | Максимум попыток входа в минуту с одного IP |
AUDIT_LOG_DIR | /var/log/zttp/audit | Путь к каталогу записи сессий |
SOC_WEBHOOK_URL | (пусто) | Необязательный webhook для оповещений SOC |
ZTTP использует ролевую модель. Каждому пользователю назначается роль; каждая роль имеет политику, определяющую, к каким средам серверов она имеет доступ.