2 poin oleh baeba 3 jam lalu | Belum ada komentar. | Bagikan ke WhatsApp

Ringkasan

  • SSH tunnel adalah teknik untuk mengakses layanan yang tidak bisa diakses langsung dari luar secara aman, atau membuka layanan internal ke luar untuk sementara.
  • SSH port forwarding secara umum dibagi menjadi local forwarding, remote forwarding, dynamic local forwarding, dan dynamic remote forwarding.
  • -L membuka port di klien SSH lokal, sedangkan -R membuka port di server SSH remote.
  • Dengan memanfaatkan Bastion Host, Anda bisa terhubung bukan hanya ke server SSH itu sendiri, tetapi juga ke layanan jaringan privat lain yang dapat diakses server tersebut.
  • Dynamic forwarding tidak mengunci tujuan tertentu, melainkan membuat proxy SOCKS agar bisa mengakses banyak host dan port.
  • Untuk mengekspos remote forwarding ke jaringan eksternal, pengaturan GatewayPorts di server SSH perlu ditinjau.

Pendahuluan

Tujuan SSH tunnel

  • SSH tidak hanya menjalankan perintah jarak jauh, tetapi juga menyediakan fungsi tunnel yang mengirim lalu lintas jaringan secara terenkripsi.

  • Tanpa VPN terpisah atau program proxy khusus, akses ke jaringan privat dan publikasi layanan bisa dilakukan hanya dengan perintah SSH standar.

  • Contoh penggunaan yang umum antara lain sebagai berikut.

    • Mengakses layanan VPC internal melalui server publik
    • Membuka port lokal server pengembangan remote di browser pada PC pengguna
    • Mengekspos sementara layanan di rumah atau jaringan privat ke luar
    • Menghubungkan port debugging browser lokal ke agen pengembangan remote
  • Saat memahami SSH tunnel, dua hal berikut perlu dibedakan.

    • Perangkat mana yang membuka port baru dan menunggu koneksi
    • Dari sudut pandang perangkat mana lalu lintas yang melewati tunnel akan mengakses tujuan akhirnya

Pembahasan

Local forwarding menghubungkan layanan remote ke lokal

  • Local port forwarding adalah cara menghubungkan server remote atau layanan yang dapat diakses server remote ke port lokal di PC pengguna.
  • Struktur dasar perintahnya adalah sebagai berikut.
ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr  
  • Klien SSH menunggu koneksi pada local_port di PC pengguna.

  • Lalu lintas yang masuk ke port tersebut diteruskan melalui SSH tunnel ke remote_addr:remote_port.

  • Tujuan akhirnya diakses dari sudut pandang jaringan tempat server SSH berada.

  • Contoh penggunaan utamanya adalah sebagai berikut.

    • Mengakses MySQL, PostgreSQL, Redis remote
    • Mengakses aplikasi web yang hanya terbuka di jaringan privat
    • Mengakses port container yang tidak dipublikasikan di antarmuka eksternal server

Bastion Host menjadi perantara akses jaringan privat

  • remote_addr dan sshd_addr sebagai target koneksi SSH tidak harus perangkat yang sama.

  • Jika server SSH dapat mengakses layanan internal lain, server itu bisa digunakan sebagai titik perantara.

  • Server perantara seperti ini disebut Bastion Host atau Jump Host.

  • Struktur koneksi yang umum adalah sebagai berikut.

    • Dari PC pengguna, terhubung via SSH ke Bastion Host publik
    • Bastion Host meneruskan lalu lintas ke layanan internal dalam VPC yang dapat diaksesnya
  • Dengan cara ini, Anda bisa mengakses database, search cluster, API internal, dan lain-lain yang tidak dipublikasikan ke luar.

Remote forwarding mengekspos layanan lokal ke remote

  • Remote port forwarding adalah cara menghubungkan layanan di PC pengguna atau jaringan internal ke port pada server SSH eksternal.
  • Struktur dasar perintahnya adalah sebagai berikut.
ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr  
  • Server SSH remote membuka remote_port dan menunggu koneksi.

  • Lalu lintas yang masuk ke port tersebut diteruskan melalui SSH tunnel ke local_addr:local_port di sisi klien SSH.

  • Contoh penggunaan utamanya adalah sebagai berikut.

    • Mengekspos server pengembangan yang berjalan di laptop untuk demo eksternal
    • Menghubungkan layanan homelab agar bisa diakses dari internet
    • Menyediakan port debugging browser lokal ke lingkungan pengembangan remote

Eksposur eksternal memerlukan pengaturan GatewayPorts

  • Dalam konfigurasi default, port remote forwarding mungkin hanya di-bind ke localhost pada server SSH.
  • Dalam kasus ini, layanan tersebut bisa diakses dari dalam server remote, tetapi tidak dari luar.
  • Agar bisa diakses melalui IP publik server remote, Anda perlu meninjau pengaturan berikut di sshd_config.
GatewayPorts yes  
  • Karena pengaturan ini dapat mengekspos port ke antarmuka eksternal, firewall dan kontrol akses harus diterapkan bersama.
  • Jika layanan pengembangan diekspos langsung ke internet publik, kemungkinan akses tanpa otentikasi atau serangan dapat meningkat.

Perangkat lokal bisa menjadi Jump Host untuk jaringan privat

  • Tujuan remote forwarding tidak terbatas pada perangkat tempat klien SSH berjalan.

  • Jika PC pengguna bisa mengakses server lain di jaringan rumah, port server internal itu juga bisa diekspos melalui server SSH remote.

  • Dalam kasus ini, PC pengguna menjadi perangkat perantara yang menghubungkan dua jaringan berikut.

    • Jaringan rumah atau jaringan pengembangan privat
    • Server gateway SSH publik
  • Dengan cara ini, layanan pada server rumah atau server pengembangan internal yang tidak terhubung langsung ke internet bisa diakses dari luar.

Dynamic local forwarding membuat proxy SOCKS lokal

  • Local forwarding biasa mengikat satu port lokal ke satu tujuan.
  • Dynamic local forwarding membuat proxy SOCKS di klien SSH.
  • Struktur dasar perintahnya adalah sebagai berikut.
ssh -D [local_addr:]local_port [user@]sshd_addr  
  • Proxy SOCKS berjalan pada port yang ditentukan di PC pengguna.

  • Aplikasi yang mendukung SOCKS dapat menentukan alamat dan port tujuan yang berbeda setiap kali membuat koneksi.

  • Koneksi ke tujuan sebenarnya dilakukan dari sudut pandang jaringan server SSH remote.

  • Perbedaannya dengan local forwarding tetap adalah, dengan satu koneksi SSH, Anda dapat mengakses beberapa layanan dalam jaringan privat remote.

  • Contoh penggunaan utamanya adalah sebagai berikut.

    • Memanggil banyak API internal melalui Bastion Host
    • Menjelajahi aplikasi web di dalam jaringan privat
    • Mengakses beberapa endpoint VPC melalui satu instance EC2

Dynamic remote forwarding membuat proxy SOCKS remote

  • Jika tujuan tetap dihilangkan pada opsi -R, Anda dapat membuat proxy SOCKS di server SSH remote.
  • Struktur dasar perintahnya adalah sebagai berikut.
ssh -R [bind_address:]port [user@]gateway_addr  
  • Server gateway remote menunggu koneksi SOCKS pada port yang ditentukan.
  • Permintaan yang masuk ke proxy diteruskan ke sisi klien melalui SSH tunnel.
  • Tujuan akhirnya diakses dari sudut pandang jaringan tempat klien SSH berada.
  • Dengan ini, server remote dapat mengakses seluruh jaringan rumah atau jaringan privat yang bisa dijangkau PC pengguna.
  • Dynamic remote forwarding memerlukan OpenSSH 7.6 atau lebih baru di sisi klien.
  • Untuk mengekspos proxy SOCKS remote ke antarmuka eksternal, pengaturan GatewayPorts juga diperlukan seperti pada remote forwarding biasa.

Opsi menjalankan di background hanya mempertahankan tunnel

  • Jika Anda ingin mempertahankan port forwarding tanpa menjalankan perintah setelah koneksi SSH dibuat, gunakan opsi -N.
  • Untuk memindahkan tunnel ke background, Anda bisa menggunakan opsi -f bersama-sama.
  • Contoh per jenis adalah sebagai berikut.
ssh -f -N -L ...  
ssh -f -N -R ...  
ssh -f -N -D ...  
  • Dalam otomasi atau lingkungan operasi jangka panjang, mekanisme penghentian tunnel, penyambungan ulang, dan deteksi gangguan juga perlu disiapkan secara terpisah.

Perintah dibedakan berdasarkan lokasi pembukaan port

  • ssh -L membuka port baru di klien SSH lokal.
  • ssh -R membuka port baru di server SSH remote.
  • ssh -D membuat proxy SOCKS di klien SSH lokal.
  • ssh -R tanpa tujuan membuat proxy SOCKS di server SSH remote.
  • Aturan dasar untuk mengingat perintahnya adalah sebagai berikut.
-L = local:remote  
-R = remote:local  
  • Alamat dan port di sisi kiri titik dua adalah titik listening baru yang dibuka.
  • local bisa berarti klien SSH itu sendiri atau perangkat internal yang dapat diakses klien.
  • remote bisa berarti server SSH itu sendiri atau perangkat internal lain yang dapat diakses server.

Kesimpulan

SSH tunnel dipilih berdasarkan arah akses

  • Jika ingin menggunakan layanan remote dari PC Anda, gunakan local forwarding -L.

  • Jika ingin mengekspos PC Anda atau layanan internal ke sisi server remote, gunakan remote forwarding -R.

  • Jika ingin mengakses banyak tujuan di jaringan remote secara fleksibel, gunakan dynamic local forwarding -D.

  • Jika ingin membuat seluruh jaringan sisi klien bisa diakses secara fleksibel dari gateway remote, gunakan dynamic remote forwarding -R tanpa tujuan.

  • Saat merancang SSH tunnel, hal-hal berikut perlu diperiksa lebih dulu.

    • Lokasi tempat port baru harus dibuka
    • Perangkat yang dapat mengakses tujuan akhir
    • Pengaturan GatewayPorts, firewall, dan hak akses SSH
    • Risiko keamanan yang dapat timbul karena eksposur eksternal
  • Kriteria penilaian utamanya adalah di sisi mana layanan ingin dibuat terlihat, dan perangkat mana yang benar-benar dapat mengakses tujuan tersebut.

Belum ada komentar.

Belum ada komentar.