
جسر SSH حصين بنموذج الثقة المعدومة (Zero-trust) مع إدارة مفاتيح مدعومة من Vault، وفرض سياسات RBAC، وتسجيل كامل للجلسات، وواجهة TUI إدارية للوصول القابل للتدقيق إلى البنية التحتية للإنتاج.
ZTTP هو وكيل 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 | وكيل حصن SSH الأساسي ZTTP (ملف 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 لمفتاح الإيقاف |
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 نموذجًا قائمًا على الأدوار. يُسنَد لكل مستخدم دور؛ ولكل دور سياسة تحدد بيئات الخوادم التي يمكنه الوصول إليها.
| الدور | الوصول |
|---|---|
security-admin | وصول كامل إلى جميع البيئات + وحدة تحكم المسؤول |
sre-tier1 | جميع البيئات بما في ذلك الإنتاج |
sre-tier2 | بيئتا الاختبار والتطوير فقط |
dev | بيئة التطوير فقط |
readonly | بيئة التطوير، مع مجموعة أوامر مقيّدة |
تُدار الأدوار وتعيينات الخوادم عبر وحدة تحكم المسؤول (انظر أدناه). ينفّذ محرك RBAC جميع الفحوصات في استعلام PostgreSQL واحد — ولا يكشف أبدًا سبب رفض الوصول للعميل (حماية من الاستنطاق).
اتصل بخادم zttp-admin من قائمة البوابة، أو سجّل الدخول بحساب يحمل دور security-admin.
توفّر وحدة تحكم المسؤول ما يلي: