
Kendi sunucunuzda çalışan localhost tünelini OpenSSH ve nginx ile oluşturun
Kendi barındırmalı yapılandırma, OpenSSH uzaktan yönlendirmesini nginx ile birleştirerek localhost önizlemesini yayınlar, wildcard TLS ekler ve paylaşılan bağlantıları son kullanma tarihine sahip, hash tabanlı erişim verileriyle korur.
Yerel önizleme yönlendirmesi
localhost:8080 üzerinde çalışan bir blogun önizlemesi, ticari bir hizmet olmadan kendi barındırmalı bir tünel ile paylaşılabilir. ssh -N -R 0:localhost:8080 web02.luffy.cx komutu, OpenSSH'den uzaktan portu yerel hizmete yönlendirmesini ister. Uzaktan port değeri 0, sunucunun serbest bir port seçmesini zorunlu kılar; örnekte bu 41535'tir.
Uzak sunucuda nginx HTTPS bağlantılarını sonlandırır ve istekleri ayrılmış loopback portuna proxy'ler. server-name ifadesi, tünelin ana bilgisayar adından portu alır; bu da nginx'in trafiği doğru yerel yönlendirmeye yönlendirmesini sağlar. Yapılandırma ayrıca *.ssh.luffy.cx için wildcard DNS kaydı ve Let's Encrypt wildcard sertifikası gerektirir.
Paylaşılan URL'lerin korunması
Ek koruma olmadan, açık port içeriği gizleyen tek sırrıdır. Yapılandırma, istek parametrelerinden ve gizli anahtardan hash hesaplayan ngx_http_secure_link_module ile erişim kontrolünü iyileştirir. Base64 ile şifrelenmiş hash, büyük/küçük harf duyarlı alan adına yerleştirilemediği için, son kullanma tarihi damgasıyla birlikte HTTP Basic Authentication kullanıcı adı kısmında gönderilir.
Nginx, kullanıcı adını $remote_user değişkeninden okur. map ifadesi hash'i ve son kullanma tarihi damgasını birbirinden ayırırken, secure link ifadesi doğrulama için zaman damgasını, alınan portu ve yapılandırılmış gizli anahtarı birleştirir. Geçersiz veya yanlış hash, WWW-Authenticate başlığıyla 401 yanıtı verir. Süresi dolmuş bağlantı 410 yanıtı verir. Geçerli bir isteği proxy'lemeden önce nginx Authorization başlığını kaldırır ve WebSocket bağlantılarını destekleyecek şekilde yapılandırılmıştır.
Tünel bağlantılarının üretilmesi
Bağlantı hash'i, son kullanma tarihi, port ve gizli anahtarın OpenSSL MD5 ve base64 işlemlerinden geçirilmesiyle üretilir; ardından sonuç URL-güvenli bir token'a dönüştürülür. Yardımcı betik 86400 saniyelik bir ömür süresi kullanır. OpenSSH kendi açık portunu bir ortam değişkeniyle sağlamadığı için, betik sshd-session süreçlerini ve dinleme portlarını bulmak için ebeveyn süreçlerinin hash'inde arama yapar.
Portlar alındıktan sonra, betik her biri için korunaklı bir URL üretir ve oturumu açık tutar. http-over-ssh adlı SSH yapılandırma kaydı, yardımcıyı uzak sunucuda başlatır. Ortaya çıkan yapılandırma yalnızca OpenSSH'ye ve zaten çalışmakta olan nginx'e bağımlıdır; ayrı bir NixOS yapılandırması ise NixOS üzerinde yardımcıyı yönetmek için kullanılabilir.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.