3 puan yazan GN⁺ 2023-12-25 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2023-12-25
Hacker News görüşleri
  • Hollandalı internet servis sağlayıcısı XS4ALL, geçmişte SSH erişimini 80 numaralı port üzerinden sunuyordu. Bu özellik, otel Wi‑Fi'ı gibi ortamlarda diğer portlar engellendiğinde oldukça kullanışlıydı.
  • HTTPS'in yaygın varlığı, verinin çok kısıtlayıcı ara cihazlar üzerinden taşınabilmesini sağlıyor. SSL VPN olarak adlandırılan sahipli VPN protokollerinin HTTPS üzerinden tünel başlatma modu uygulamasının başlıca nedeni de bu.
  • SSH'yi 80 ya da 443 numaralı porta koyup başka bir host üzerinden ProxyJump kullanmak 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.
  • Adaptive adlı bir şirket, HTTP3 üzerinden SSH ve çeşitli protokolleri sunan bir veri güvenliği altyapısı inşa ediyor. Bu sayede kullanıcılar harici portlar üzerinden veritabanlarına, sunuculara ve diğer kaynaklara bağlanabiliyor.
  • Aslında çoğu firewall, yalnızca openssh'nin 443 numaralı portta dinlemesiyle bile aşılabiliyor.
  • CONNECT metodunu bir iletim proxy'si yerine ters proxy gibi düşünmek ilginç. Ancak yalnızca CONNECT yeterli değil; kurumsal proxy'leri aşmak için websocket üzerinden SSH de kullanılıyor.
  • "Yeni" çözümler hakkında bu kadar sık paylaşım yapılması rahatsız edici. Bu fikirler yeni değil ve birçok kişinin zaten bildiği şeyler.
  • SSH benzeri bir kimlik yönetim sisteminin tarayıcıya gömülü olması güzel olurdu. hobo adlı 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.
  • Yaklaşık 20 yıl önce kurumsal firewall'ları aşmak için corkscrew adlı bir araç kullanmıştım. Bu araç için bağımsız implementasyon ve açıklama etkileyici.
  • HTTP2 üzerinden tünelleme harika bir seçenek. HTTP2 üzerine kurulmuş RPC protokolü olan gRPC var. HTTP2, TCP bağlantısı kullanarak birden fazla veri yapısını aynı anda gönderip almada çok başarılı. Ancak HTTP3 kullanmak şart olmayabilir, çünkü QUIC zaten kendi başına multiplexing sağlıyor.