Panduan Praktis SSH Tunnel: Port Forwarding Lokal dan Remote
(labs.iximiuz.com)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.
-Lmembuka port di klien SSH lokal, sedangkan-Rmembuka 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
GatewayPortsdi 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_portdi 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_addrdansshd_addrsebagai 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_portdan menunggu koneksi. -
Lalu lintas yang masuk ke port tersebut diteruskan melalui SSH tunnel ke
local_addr:local_portdi 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
localhostpada 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
GatewayPortsjuga 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
-fbersama-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 -Lmembuka port baru di klien SSH lokal.ssh -Rmembuka port baru di server SSH remote.ssh -Dmembuat proxy SOCKS di klien SSH lokal.ssh -Rtanpa 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.
localbisa berarti klien SSH itu sendiri atau perangkat internal yang dapat diakses klien.remotebisa 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
-Rtanpa 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.