Header Ads

SET UP SSH TUNNELING ATAU PORT FORWARDING

SET UP SSH TUNNELING ATAU PORT FORWARDING - SSH tunneling atau disebut juga SSH port forwarding adalah metode untuk membuat koneksi SSH terenkripsi antara client dan server melalui layanan port yang dapat di-relay.

SSH tunneling berguna untuk mengangkut layanan jaringan data yang menggunakan protokol yang tidak dienkripsi, seperti VNC atau FTP, mengakses konten yang dibatasi secara geografis atau mem-bypass firewall perantara. Pada dasarnya Sampeyan bisa melakukan forward port TCP apa pun dan melewati traffic melalui koneksi SSH yang lebih aman.


Ada tiga jenis SSH port forwarding:

  • Local Port Forwarding: Mem-fordward koneksi dari host client ke host server SSH dan kemudian ke port host tujuan.
  • Remote Port Forwarding: Mem-fordward port dari host server ke host client dan kemudian ke port host tujuan.
  • Dynamic Port Forwarding: Membuat server proxy SOCKS yang memungkinkan komunikasi di berbagai port.

Pada topik ini, kita akan mengatur SSH tunnels encryption pada Local Port Forwarding, Remote Port Forwarding, dan Dynamic Port Forwarding.

Local Port Forwarding

Local Port Forwarding memungkinkan Sampeyan untuk meneruskan port lokal (SSH client) ke port pada mesin yang di-remote (server ssh), yang kemudian diteruskan ke port pada mesin tujuan.
Dalam jenis Local Port Forwarding ini SSH client terkoneksi pada port yang diberikan dan tunnel koneksi apa pun pada port tersebut ke port yang ditentukan pada remote SSH server, yang kemudian menghubungkan ke port pada mesin tujuan. Mesin tujuan bisa berupa remote SSH server atau mesin lainnya.

Local Port Forwarding sebagian besar digunakan untuk terhubung ke layanan jarak jauh pada jaringan internal seperti database atau server VNC.

Pada Linux, macOS dan sistem Unix lainnya untuk membuat port forwarding lokal meneruskan opsi -L ke ssh client:
$ ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

Opsi yang digunakan adalah sebagai berikut:
  • [LOCAL_IP:]LOCAL_PORT - IP dan Port pada local. Ketika LOCAL_IP dihilangkan maka ssh client akan mem-binding localhost.
  • DESTINATION:DESTINATION_PORT - IP atau hostname dan port dari server tujuan (destination machine).
  • [USER@]SERVER_IP - remote SSH user dan server IP address.

Sampeyan dapat menggunakan port apa pun yang lebih besar dari 1024 sebagai LOCAL_PORT. Port yang kurang dari 1024 adalah privileged ports dan hanya dapat digunakan oleh root. Jika server SSH Sampeyan melakukan listening pada port selain 22 (default) maka gunakanlah opsi -p [PORT_NUMBER].

Nama host tujuan harus resolvable dari server SSH.

Katakanlah Sampeyan memiliki server database MySQL yang berjalan pada mesin db1.host di jaringan internal (pribadi), pada port 3306 yang dapat diakses dari mesin public1.host dan Sampeyan ingin terhubung menggunakan mysql pada lokal Sampeyan ke server database. Untuk melakukannya, Sampeyan dapat meneruskan koneksi seperti:
$ ssh -L 3336:db1.host:3306 user@public1.host

Maka setelah Sampeyan menjalankan perintah, Sampeyan akan diminta untuk memasukkan remote SSH user password. Setelah memasukkannya, Sampeyan baru bisa masuk ke server dan SSH tunnel yang sudah dibuat. Bisa juga dengan mengatur otentikasi berbasis SSH key-based authentication dan terhubung ke server tanpa memasukkan password.

Sekarang jika Sampeyan mengarahkan local machine database client ke 127.0.0.1:3336, maka koneksi akan diteruskan ke server MySQL db1.host:3306 melalui mesin public1.host yang akan bertindak sebagai server perantara.

Sampeyan dapat mem-forward banyak port ke beberapa tujuan dalam satu perintah ssh. Sebagai contoh, Sampeyan memiliki server database MySQL lain yang berjalan pada mesin db2.host dan Sampeyan ingin terhubung ke kedua server dari local client yang akan Sampeyan jalankan:
$ ssh -L 3336:db1.host:3306 3337:db2.host:3306 user@public1.host

Untuk terhubung ke server kedua Sampeyan menggunakan 127.0.0.1:3337.

Ketika host tujuan sama dengan server SSH, alih-alih menentukan IP host atau hostname, Sampeyan dapat menggunakan localhost.

Katakanlah Sampeyan perlu terhubung ke remote machine melalui VNC yang berjalan di server yang sama dan tidak dapat diakses dari luar. Perintah yang Sampeyan gunakan adalah:
$ ssh -L 5901:127.0.0.1:5901 -N -f user@remote.host

Opsi -f memberitahu ssh command untuk dijalankan di background dan -N tidak untuk mengeksekusi remote command. Kita menggunakan localhost karena VNC dan server SSH berjalan pada host yang sama.

Jika Sampeyan mengalami kesulitan menyiapkan tunneling, periksa konfigurasi server SSH remote Sampeyan dan pastikan AllowTcpForwarding tidak di setup ke "no". Secara default, tunelling diizinkan.

Remote Port Forwarding


Remote Port Forwarding adalah kebalikan dari local port forwarding. Ini memungkinkan Sampeyan untuk melakukan forwarding port pada remote machine (ssh server) ke port pada local machine (ssh client), yang kemudian diteruskan ke port pada mesin tujuan (destination machine).

Dalam jenis Remote Port Forwarding ini server SSH listening pada port yang diberikan dan tunneling koneksi apa pun ke port tersebut ke port yang sudah ditentukan pada local SSH client, yang kemudian menghubungkan ke port pada mesin tujuan. Mesin tujuan dapat berupa mesin lokal atau mesin lainnya.

Linux, macOS dan sistem Unix lainnya untuk membuat penerusan port jarak jauh meneruskan opsi -R ke klien ssh:
$ ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

Opsi yang digunakan adalah sebagai berikut:
  • [REMOTE:] REMOTE_PORT - IP dan port pada remote SSH server. REMOTE yang kosong berarti bahwa remote SSH server akan mengikat semua antarmuka (interfaces).
  • DESTINATION: DESTINATION_PORT - IP atau hostname dan port dari mesin tujuan.
  • [USER @] SERVER_IP - remote SSH user dan alamat IP server address.

Local port forwardingl sebagian besar digunakan untuk memberikan akses ke layanan internal kepada request dari luar.

Katakanlah Sampeyan sedang mengembangkan aplikasi web di mesin lokal dan Sampeyan ingin menampilkan pratinjau kepada rekan pengembang. Tapi Sampeyan tidak memiliki IP public sehingga pengembang lain tidak dapat mengakses aplikasi tersebut secara online.

Jika Sampeyan memiliki akses pada remote SSH server, maka Sampeyan dapat mengatur remote port forwarding sebagai berikut:
$ ssh -R 8080:127.0.0.1:3000 -N -f user@remote.host

Perintah di atas akan melakukan SSH server agar melakukan listenings pada port 8080 dan tunneling semua traffic dari port ini ke mesin lokal Sampeyan pada port 3000.

Sekarang pengembang Sampeyan dapat mengetik the_ssh_server_ip: 8080 di browser-nya dan melihat pratinjau aplikasi Sampeyan.

Jika Sampeyan mengalami kesulitan mengatur remote port forwarding, pastikan GatewayPorts diatur ke "yes" dalam konfigurasi remote SSH server.

Dynamic Port Forwarding

Dynamic port forwarding memungkinkan Sampeyan membuat soket pada ssh client lokal yang bertindak sebagai server proxy SOCKS. Ketika client terhubung ke port ini, koneksi diteruskan ke remote machine (ssh server), yang kemudian diteruskan ke dynamin port pada mesin tujuan.

Dengan cara ini, semua aplikasi yang menggunakan proxy SOCKS akan terhubung ke server SSH dan server akan meneruskan semua request traffic ke tujuan yang sebenarnya.

Linux, macOS dan sistem Unix lainnya untuk membuat dynamic port forwarding (SOCKS) meneruskan opsi -D ke klien ssh:
$ ssh -D [LOCAL_IP:]LOCAL_PORT [USER@]SSH_SERVER

Opsi yang digunakan adalah sebagai berikut:
  • [LOCAL_IP:]LOCAL_PORT - local machine ip dan port. Ketika LOCAL_IP dihilangkan, maka ssh client mengikat pada localhost.
  • [USER@]SERVER_IP - remote SSH user dan server IP address.
Contoh tipikal dari dynamic port forwarding adalah untuk tunnel traffic web browser melalui server SSH.

Perintah berikut akan membuat SOCKS tunnels pada port 9090:
$ ssh -D 9090 -N -f user@remote.host

Setelah tunneling dibuat, Sampeyan dapat mengkonfigurasi aplikasi untuk bisa menggunakannya. Disini akan dijelaskan cara mengkonfigurasi Firefox dan browser Google Chrome untuk menggunakan proxy SOCKS.

Port forwarding harus dikonfigurasikan secara terpisah untuk setiap aplikasi yang Sampeyan inginkan untuk melakukan tunnel traffic.

Set up SSH Tunneling pada Microsoft Windows


Pengguna Windows dapat membuat SSH tunnels menggunakan SSH Client Putty. Sampeyan dapat mendownload Putty di sini.

Buka Putty dan masukkan server SSH IP di form hostname (atau alamat IP).



Di bawah menu Connection, SSH (+ perluas) dan pilih Tunnels. Periksa tombol Local untuk mengatur lokal, Remote untuk jarak jauh, dan Dinamis untuk penerusan port dinamis.
  • Jika mengatur local forwarding masukkan local forwarding di bidang Source Port dan di Destination masukkan host tujuan dan IP, misalnya, localhost: 5901.
  • Untuk remote port forwarding, masukkan port forwarding remote SSH server di bidang Source Port dan di Destination masukkan host tujuan dan IP, misalnya, localhost: 3000.
  • Jika mengatur dynamic forwarding, masukkan hanya port SOCKS local di bidang Source Port.




Klik pada tombol Add seperti yang ditunjukkan pada gambar di bawah ini.



Kembali ke halaman Session untuk menyimpan pengaturan sehingga Sampeyan tidak perlu memasukkannya setiap kali menggunakan. Masukkan nama sessiona di bidang Saved Sessionss dan klik tombol Save.



Pilih Sessions yang disimpan dan masuk ke remote server dengan mengklik tombol Open.



Jika mengatur local forwarding masukkan local forwarding di bidang Source Port dan di Destination masukkan host tujuan dan IP, misalnya, localhost: 5901.
Untuk remote port forwarding, masukkan port forwarding remote SSH server di bidang Source Port dan di Destination masukkan host tujuan dan IP, misalnya, localhost: 3000.
Jika mengatur dynamic forwarding, masukkan hanya port SOCKS local di bidang Source Port.

Akan muncul jendela baru yang menanyakan nama pengguna dan password Sampeyan. Setelah Sampeyan memasukkan nama user dan password, maka Sampeyan akan masuk ke server dan SSH tunneling akan dimulai.