SSH'yi HTTPS üzerinden tünellemek
- SSH'yi HTTPS üzerinden tünellemek için hem istemci hem de sunucu tarafında ayarlamalar yapmak gerekiyor.
- İstemci yapılandırması örneğinde
~/.ssh/config dosyasında ProxyCommand ve ServerAliveInterval ayarlanıyor.
- Kullanılan
~/.ssh/https-tunnel.bash betiği, başlıklarla CONNECT metodunu gönderirken socat kullanarak bir TLS bağlantısı oluşturuyor.
Sunucu yapılandırması örneği
- Apache2 HTTPS sunucu yapılandırmasında
proxy_connect_module yükleniyor ve AllowCONNECT yönergesiyle belirli hedefler için CONNECT HTTP metodunun kullanımına izin veriliyor.
- Sunucu tarafında,
https-server üzerinde CONNECT metodunun yalnızca tek hedef olan ssh-server ana makinesi için kullanılmasına izin verecek şekilde yapılandırma yapılıyor.
Arka plan
- Hastanede kalırken, çoğu bağlantı türünün engellendiği hastane Wi-Fi'ı üzerinden uzaktan çalışmak isteniyor.
- Hastane ağı yalnızca HTTP ve HTTPS bağlantılarına izin veriyor; SSH ise tamamen engellenmiş durumda.
- SSH'yi HTTP veya HTTPS üzerinden taşımanın yolları araştırılıyor.
Olası yöntemler
- SSH ve HTTPS protokollerini tek bir portta birlikte barındırıp şeffaf biçimde dağıtan
sslh projesi.
sslh, bir protokolü başka bir protokolün içine sarmak yerine çeşitli sezgisel yöntemler kullanarak gerçek arka uca yönlendiriyor.
openssh'in ProxyCommand yönergesini kullanarak SSH protokolünü başka bir protokolün içine tamamen gömme yöntemi.
HTTP üzerinden SSH
- Basit bir SSH over HTTP denemesi için Apache2,
CONNECT metoduna tek hedef ssh-server:22 için izin verecek şekilde yapılandırılıyor.
- İstemci tarafı
socat kullanılarak kolayca uyarlanıyor.
- HTTP bağlantısının boşta kaldığında kopmaması için
ServerAliveInterval kullanılıyor.
HTTPS üzerinden SSH
socat HTTPS proxy desteği sunmuyor, ancak TLS kapsüllemeyi destekliyor.
CONNECT tabanlı yöntemi elle uygulamak kolay.
- SSH over HTTPS tünellemesi,
~/.ssh/https-tunnel.bash betiği kullanılarak gerçekleştiriliyor.
Sonuç
- HTTPS'nin yaygın olarak bulunması, çok kısıtlayıcı ara cihazlar üzerinden veri taşımayı mümkün kılıyor.
CONNECT metodu, TCP yük akışını TLS ana makine akışına sarmak için kullanışlı bir hack.
ServerAliveInterval, boşta kalan bağlantılara dostça davranmayan alt taşımalarda bağlantıyı korumak için kullanılıyor.
GN⁺ görüşü
- Bu yazının en önemli yanı, kısıtlayıcı ağ ortamlarında bile SSH bağlantısını mümkün kılan yaratıcı bir çözüm sunması.
- SSH ile HTTPS'yi birleştirme yöntemi, özellikle ağ güvenliği konusunda uzmanlığı olan kişiler için ilgi çekici olabilir.
ProxyCommand ve ServerAliveInterval ayarlarıyla ağ kısıtlamalarını aşma yöntemi, ağ yöneticileri ve güvenlik uzmanları için faydalı bilgiler sunuyor.
1 yorum
Hacker News görüşleri
ProxyJumpkullanmak veya SOCKS aracılığıyla daha az kısıtlı bir internet bağlantısı elde etmek de mümkün. DNS'yi TLS üzerinden SSH bağlantısına yönlendirmek de yapılabiliyor.openssh'nin 443 numaralı portta dinlemesiyle bile aşılabiliyor.CONNECTmetodunu bir iletim proxy'si yerine ters proxy gibi düşünmek ilginç. Ancak yalnızcaCONNECTyeterli değil; kurumsal proxy'leri aşmak için websocket üzerinden SSH de kullanılıyor.hoboadlı açık anahtar HTTP kimlik doğrulama önerisini ilk okuduğumda heyecanlanmıştım, ancak ne sunucu implementasyonu ne de istemci (tarayıcı) implementasyonu olduğunu öğrendim.corkscrewadlı bir araç kullanmıştım. Bu araç için bağımsız implementasyon ve açıklama etkileyici.