
शून्य-विश्वास SSH बास्टियन प्रॉक्सी जिसमें Vault-आधारित कुंजी प्रबंधन, RBAC नीति प्रवर्तन, पूर्ण सत्र रिकॉर्डिंग, और उत्पादन बुनियादी ढांचे तक ऑडिट योग्य पहुंच के लिए एडमिन TUI शामिल है।
एक सुरक्षित, सेल्फ-होस्टेड SSH बैस्टियन होस्ट जिसमें Vault-आधारित कुंजी प्रबंधन, RBAC नीति प्रवर्तन, पूर्ण सत्र रिकॉर्डिंग, और एक इंटरैक्टिव एडमिन TUI शामिल है — उन टीमों के लिए डिज़ाइन किया गया है जिन्हें प्रोडक्शन इंफ्रास्ट्रक्चर तक ऑडिटेबल, ज़ीरो-ट्रस्ट पहुंच की आवश्यकता है।
आधुनिक इंजीनियरिंग टीमों को डेवलपर्स को उनके काम के लिए न्यूनतम आवश्यक पहुंच देने का एक तरीका चाहिए — न अधिक, न कम। पारंपरिक SSH कुंजी वितरण त्रुटि-प्रवण है: कुंजियाँ साझा की जाती हैं, लैपटॉप पर भूल जाती हैं, और बहुत देर से रद्द की जाती हैं।
ZTTP आपके इंफ्रास्ट्रक्चर में एकमात्र द्वार के रूप में कार्य करके इसे हल करता है:
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):
.ttyrec प्रारूप में रिकॉर्ड किए जाते हैंसर्वर (प्रॉक्सी होस्ट):
2224 पर सार्वजनिक या LAN-सुलभ IPmake (वैकल्पिक, लेकिन अनुशंसित)डेवलपर (क्लाइंट):
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
# या सीधे:
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
यह सभी प्लेटफ़ॉर्म के लिए क्लाइंट क्रॉस-कंपाइल करता है और सही सर्वर URL के साथ dist/install.sh और dist/install.ps1 को स्वचालित रूप से अपडेट करता है। 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
# या सीधे:
ssh -p 2224 <your-username>@<proxy-ip>
आपको एक टर्मिनल लॉगिन स्क्रीन दिखाई जाएगी। प्रमाणीकरण के बाद, आप उन सर्वरों की सूची देखेंगे जिन तक आप पहुंच के लिए अधिकृत हैं।
सभी कॉन्फ़िगरेशन पर्यावरण चर (या .env फ़ाइल) के माध्यम से होता है। पूर्ण संदर्भ के लिए .env.example देखें।
ZTTP एक भूमिका-आधारित मॉडल का उपयोग करता है। प्रत्येक उपयोगकर्ता को एक भूमिका सौंपी जाती है; प्रत्येक भूमिका की एक नीति होती है जो परिभाषित करती है कि वह किन सर्वर पर्यावरणों तक पहुंच सकती है।
भूमिकाएँ और सर्वर असाइनमेंट एडमिन कंसोल के माध्यम से प्रबंधित किए जाते हैं (नीचे देखें)। RBAC इंजन सभी जाँच एक ही PostgreSQL क्वेरी में करता है — यह क्लाइंट को कभी नहीं बताता कि पहुंच क्यों अस्वीकार की गई (एन्यूमरेशन सुरक्षा)।
गेटवे मेनू से zttp-admin सर्वर से कनेक्ट करें, या security-admin भूमिका वाले खाते से लॉगिन करें।
एडमिन कंसोल निम्नलिखित प्रदान करता है:
सभी एडमिन क्रियाएँ ऑडिट वॉल्यूम के अंदर
admin-actions.logमें लॉग की जाती हैं।
सभी सत्र zttp-audit-logs Docker वॉल्यूम में संग्रहीत हैं (कंटेनर के अंदर /var/log/zttp/audit/)।
security-admin के रूप में लॉगिन करेंCtrl+C दबाएं# रिकॉर्डिंग सूचीबद्ध करें
sudo ls /var/lib/docker/volumes/zttp-audit-logs/_data/
# ttyplay के साथ रिकॉर्डिंग चलाएं
sudo ttyplay /var/lib/docker/volumes/zttp-audit-logs/_data/<session-id>.ttyrec
# एडमिन क्रिया लॉग पढ़ें
sudo cat /var/lib/docker/volumes/zttp-audit-logs/_data/admin-actions.log
आवश्यकताएँ: Go 1.25+, Docker (क्रॉस-कंपाइलेशन के लिए)
# वर्तमान प्लेटफ़ॉर्म के लिए प्रॉक्सी + CLI बनाएं
make build
# सभी प्लेटफ़ॉर्म के लिए CLI क्रॉस-कंपाइल करें (Linux, macOS, Windows)
make release PROXY_ADDR=<proxy-ip>:2224
# परीक्षण चलाएं
make test
# प्रॉक्सी को स्थानीय रूप से चलाएं (Postgres + Vault पहले से चल रहे होने चाहिए)
make run-proxy
(डेमो चलाने के लिए क्लिक करें)
(डेमो चलाने के लिए क्लिक करें)
(डेमो चलाने के लिए क्लिक करें)
(डेमो चलाने के लिए क्लिक करें)
(डेमो चलाने के लिए क्लिक करें)
zttp/
├── cmd/
│ ├── proxy/ # Proxy server entrypoint
│ └── zttp/ # CLI client entrypoint
├── db/
│ └── migrations/ # PostgreSQL schema migrations
├── deploy/
│ ├── docker-compose.yml
│ ├── Dockerfile.proxy
│ └── vault-seed.sh # Seeds test SSH keys into Vault
├── dist/
│ ├── install.sh # Linux/macOS installer script
│ └── install.ps1 # Windows installer script
├── internal/
│ ├── audit/ # Admin action logging
│ ├── auth/ # User authentication (bcrypt, lockout)
│ ├── cli/ # CLI client TUI and connect logic
│ ├── config/ # Environment-based configuration
│ ├── killswitch/ # gRPC kill-switch service
│ ├── proxy/ # SSH proxy, gateway TUI, admin TUI, bridge
│ ├── rbac/ # Role-based access control engine
│ ├── ratelimit/ # Per-IP rate limiting
│ ├── session/ # Session tracking and DB store
│ └── vault/ # HashiCorp Vault SSH key client
├── proto/ # gRPC protocol definitions
├── tools/
│ └── hashpw/ # CLI tool: generate bcrypt password hash
├── .env.example # Configuration template
├── go.mod
└── Makefile
git checkout -b feat/your-featuremake testकृपया निम्नलिखित कमिट न करें:
.env या गोपनीय जानकारी वाली कोई भी फ़ाइलzttp बाइनरी .gitignored है)यह प्रोजेक्ट स्वामित्व वाला है। सर्वाधिकार सुरक्षित।
Go, PostgreSQL, HashiCorp Vault, और Docker के साथ निर्मित।
| समस्या | ZTTP समाधान |
|---|
| लैपटॉप पर साझा की गई SSH कुंजियाँ | कुंजियाँ केवल HashiCorp Vault में रहती हैं — डिस्क पर कभी नहीं |
| किसने क्या किया, इसकी कोई दृश्यता नहीं | हर कीस्ट्रोक .ttyrec प्रारूप में रिकॉर्ड किया जाता है |
| व्यापक प्रोडक्शन पहुंच | भूमिका-आधारित नीति इंजन प्रति-पर्यावरण नियम लागू करता है |
| सक्रिय सत्र रोकने का कोई तरीका नहीं | किल-स्विच gRPC एंडपॉइंट किसी भी लाइव सत्र को समाप्त करता है |
| ऑडिटरों के लिए अपारदर्शी पहुंच | सत्र प्लेबैक, टेक्स्ट लॉग, और एडमिन क्रिया लॉग के साथ एडमिन TUI |
| सेवा | उद्देश्य |
|---|
zttp-proxy | SSH बैस्टियन (Go बाइनरी) |
zttp-postgres | कंट्रोल-प्लेन डेटाबेस (उपयोगकर्ता, सर्वर, RBAC नीतियाँ) |
zttp-vault | HashiCorp Vault — SSH निजी कुंजियाँ संग्रहीत करता है |
zttp-nginx | /release/ पर CLI इंस्टॉलर प्रदान करता है |
zttp-init-audit | वन-शॉट कंटेनर जो वॉल्यूम अनुमतियाँ ठीक करता है |
| चर | डिफ़ॉल्ट | विवरण |
|---|
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 पता |
PROXY_NODE_IP | 127.0.0.1 | CLI बाइनरी में बेक किया गया बाहरी IP |
DATABASE_URL | postgres://zttp:... | PostgreSQL कनेक्शन स्ट्रिंग |
VAULT_ADDR | http://localhost:8201 | Vault सर्वर URL |
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 | (खाली) | SOC अलर्टिंग के लिए वैकल्पिक वेबहुक |
| भूमिका | पहुंच |
|---|
security-admin | सभी पर्यावरणों + एडमिन कंसोल तक पूर्ण पहुंच |
sre-tier1 | प्रोडक्शन सहित सभी पर्यावरण |
sre-tier2 | केवल स्टेजिंग और डेवलपमेंट |
dev | केवल डेवलपमेंट पर्यावरण |
readonly | डेवलपमेंट पर्यावरण, प्रतिबंधित कमांड सेट |
| मेनू विकल्प | विवरण |
|---|
| उपयोगकर्ता जोड़ें | भूमिका असाइनमेंट के साथ नया उपयोगकर्ता बनाएं |
| सर्वर जोड़ें | लक्ष्य सर्वर पंजीकृत करें (होस्टनाम, IP, पर्यावरण, SSH उपयोगकर्ता) |
| सर्वर पहुंच प्रबंधित करें | विशिष्ट सर्वरों तक उपयोगकर्ता पहुंच अनुदान या रद्द करें |
| उपयोगकर्ता देखें | सभी उपयोगकर्ताओं और उनकी भूमिकाओं की सूची बनाएं |
| सर्वर देखें | सभी पंजीकृत सर्वरों की सूची बनाएं |
| ऑडिट लॉग देखें | सत्र ब्राउज़ करें, रिकॉर्डिंग दोबारा चलाएं, टेक्स्ट लॉग पढ़ें |
| [ वापस ] | सर्वर गेटवे पर लौटें |
| कमांड | विवरण |
|---|
make build | वर्तमान प्लेटफ़ॉर्म के लिए प्रॉक्सी और CLI बनाएं |
make release | सभी प्लेटफ़ॉर्म के लिए CLI बाइनरी क्रॉस-कंपाइल करें |
make release-docker | Docker कंटेनर के अंदर क्रॉस-कंपाइल करें (snap/WSL समस्याओं से बचाता है) |
make docker-up | सभी Docker Compose सेवाएँ प्रारंभ करें |
make docker-down | सभी सेवाएँ रोकें और वॉल्यूम हटाएं |
make docker-logs | प्रॉक्सी लॉग टेल करें |
make docker-ps | कंटेनर स्थिति दिखाएं |
make test | सभी Go परीक्षण चलाएं |
make migrate | डेटाबेस माइग्रेशन लागू करें |
make seed | डेवलपमेंट डेटा सीड करें |
make hashpw PW=mypassword | मैनुअल DB सीडिंग के लिए bcrypt हैश उत्पन्न करें |
make clean | संकलित बाइनरी और बिल्ड कैश हटाएं |
| परत | तंत्र |
|---|
| परिवहन | सभी क्लाइंट कनेक्शन SSH हैं (पारगमन में एन्क्रिप्टेड) |
| प्रमाणीकरण | bcrypt (लागत 12) / Argon2id — स्कीमा में प्लेनटेक्स्ट संरचनात्मक रूप से निषिद्ध है |
| ब्रूट-फोर्स सुरक्षा | खाता लॉकआउट (5 प्रयास / 15 मिनट) + प्रति-IP रेट लिमिटर |
| प्राधिकरण | सिंगल-JOIN RBAC क्वेरी — अस्वीकृतियाँ हमेशा सामान्य होती हैं ("Permission denied") |
| गोपनीय प्रबंधन | SSH निजी कुंजियाँ विशेष रूप से HashiCorp Vault में संग्रहीत, अस्थायी रूप से प्राप्त |
| ऑडिट ट्रेल | .ttyrec प्रारूप में पूर्ण कीस्ट्रोक रिकॉर्डिंग, अपरिवर्तनीय एपेंड-ओनली एडमिन लॉग |
| प्रक्रिया अलगाव | प्रॉक्सी एक डिस्ट्रोलेस कंटेनर के अंदर गैर-रूट (UID 65532) के रूप में चलता है |
| किल स्विच | प्रॉक्सी को पुनरारंभ किए बिना किसी भी लाइव सत्र को gRPC के माध्यम से समाप्त किया जा सकता है |