3 poin oleh GN⁺ 2023-12-25 | 1 komentar | Bagikan ke WhatsApp

Meneruskan SSH melalui HTTPS

  • Untuk meneruskan SSH melalui HTTPS, sisi klien dan server sama-sama perlu disesuaikan.
  • Dalam contoh konfigurasi klien, ProxyCommand dan ServerAliveInterval diatur di file ~/.ssh/config.
  • Skrip ~/.ssh/https-tunnel.bash yang digunakan membuat koneksi TLS dengan socat sambil mengirim metode CONNECT beserta header.

Contoh konfigurasi server

  • Dalam konfigurasi server HTTPS Apache2, proxy_connect_module dimuat dan direktif AllowCONNECT digunakan untuk mengizinkan penggunaan metode HTTP CONNECT ke target tertentu.
  • Di sisi server, diatur agar metode CONNECT pada https-server hanya bisa digunakan untuk satu target, yaitu host ssh-server.

Latar belakang

  • Saat tinggal di rumah sakit, penulis ingin bekerja jarak jauh melalui Wi-Fi rumah sakit yang memblokir sebagian besar jenis koneksi.
  • Jaringan rumah sakit hanya mengizinkan koneksi HTTP dan HTTPS, sementara SSH diblokir sepenuhnya.
  • Ini adalah eksplorasi cara meneruskan SSH melalui HTTP atau HTTPS.

Metode yang memungkinkan

  • Proyek sslh, yang meng-host bersama protokol SSH dan HTTPS pada satu port lalu mendistribusikannya secara transparan.
  • sslh tidak membungkus suatu protokol ke dalam protokol lain, melainkan menggunakan berbagai heuristik untuk mengarahkan ke backend yang sebenarnya.
  • Metode yang sepenuhnya membungkus protokol SSH ke dalam protokol lain dengan menggunakan direktif ProxyCommand milik openssh.

SSH melalui HTTP

  • Untuk percobaan sederhana SSH melalui HTTP, Apache2 dikonfigurasi agar mengizinkan metode CONNECT untuk satu target ssh-server:22.
  • Di sisi klien, penyesuaian dapat dilakukan dengan mudah menggunakan socat.
  • ServerAliveInterval digunakan agar koneksi HTTP tidak terputus meski sedang idle.

SSH melalui HTTPS

  • socat tidak mendukung proxy HTTPS, tetapi mendukung enkapsulasi TLS.
  • Metode berbasis CONNECT mudah diimplementasikan secara manual.
  • Tunneling SSH melalui HTTPS diimplementasikan menggunakan skrip ~/.ssh/https-tunnel.bash.

Penutup

  • Keberadaan HTTPS yang sangat umum memungkinkan data dikirim melalui perangkat perantara yang sangat membatasi.
  • Metode CONNECT adalah trik yang berguna untuk membungkus aliran payload TCP ke dalam aliran host TLS.
  • ServerAliveInterval digunakan untuk mempertahankan koneksi pada transport lapisan bawah yang tidak ramah terhadap koneksi idle.

Opini GN⁺

  • Hal terpenting dari artikel ini adalah penyajian solusi kreatif yang memungkinkan koneksi SSH tetap bisa dilakukan bahkan di lingkungan jaringan yang sangat terbatas.
  • Cara menggabungkan SSH dan HTTPS ini bisa sangat menarik terutama bagi orang-orang yang memiliki pengetahuan khusus terkait keamanan jaringan.
  • Metode untuk melewati pembatasan jaringan melalui pengaturan ProxyCommand dan ServerAliveInterval memberikan informasi yang berguna bagi administrator jaringan maupun profesional keamanan.

1 komentar

 
GN⁺ 2023-12-25
Komentar Hacker News
  • Penyedia internet Belanda XS4ALL dahulu menyediakan akses SSH melalui port 80. Fitur ini berguna saat port lain diblokir, misalnya di Wi-Fi hotel.
  • Keberadaan HTTPS yang nyaris universal memungkinkan pengiriman data melalui perantara yang sangat terbatas. Ini adalah alasan utama protokol VPN proprietari yang disebut SSL VPN mengimplementasikan mode untuk memulai tunnel melalui HTTPS.
  • Ada juga cara menempatkan SSH di port 80 atau 443 lalu menggunakan ProxyJump melalui host lain, atau mendapatkan koneksi internet yang kurang dibatasi melalui SOCKS. Meneruskan DNS melalui TLS ke koneksi SSH juga dimungkinkan.
  • Sebuah perusahaan bernama Adaptive sedang membangun infrastruktur keamanan data yang menyediakan SSH dan berbagai protokol melalui HTTP3. Dengan ini, pengguna dapat terhubung ke database, server, dan sumber daya lain melalui port eksternal.
  • Faktanya, sebagian besar firewall bisa dilewati hanya dengan membuat openssh mendengarkan di port 443.
  • Menarik untuk memikirkan metode CONNECT sebagai reverse proxy alih-alih forward proxy. Namun CONNECT saja tidak cukup, sehingga SSH digunakan melalui WebSocket untuk melewati proxy perusahaan.
  • Frekuensi munculnya posting tentang solusi "baru" terasa mengganggu. Ide-ide ini sebenarnya tidak baru, dan sudah diketahui banyak orang.
  • Akan bagus jika sistem manajemen identitas mirip SSH tertanam di browser. Saya sempat bersemangat saat pertama kali membaca proposal autentikasi HTTP kunci publik bernama hobo, tetapi kemudian mengetahui bahwa implementasi servernya tidak ada dan implementasi kliennya (browser) juga tidak ada.
  • Sekitar 20 tahun lalu, saya menggunakan alat bernama corkscrew untuk melewati firewall perusahaan. Implementasi independen dan penjelasan tentang alat ini sangat mengesankan.
  • Tunneling melalui HTTP2 adalah pilihan yang bagus. Ada gRPC, protokol RPC yang dibangun di atas HTTP2. HTTP2 sangat unggul dalam mengirim dan menerima beberapa struktur data secara bersamaan melalui koneksi TCP. Namun, mungkin tidak perlu menggunakan HTTP3, karena QUIC sendiri sudah menyediakan multiplexing.