SSH Port Forwarding | Fitur Joss yang Mungkin Belum Anda Ketahui



Beberapa praktisi IT biasanya membutuhkan IP publik agar perangkatnya dapat diakses dari jarak jauh (remote acccess). Banyak sekali kasus perangkat remote tersebut terhubung dengan internet yang memiliki IP private (dibelakang NAT) atau IP dinamis. (Berkaitan dengan NAT, IP private dan dinamis, silahkan telusuri lebih lanjut di Wikipedia)



Solusi yang pernah saya temui untuk menghadapi permasalahan tersebut diantaranya:
1. Menyewa IP publik dari provider. Beberapa rekan-rekan meyakini ini adalah solusi yang simpel. Namun tidak semua provider bersedia menyewakan IP publik lantaran isu utama kelangkaan IPv4
2. Membuat VPN dan melakukan routing atau port forwarding. Anda harus melakukan konfigurasi VPN server dan mengotentikasi perangkat yang akan digunakan. Setelah semuanya selesai, anda berhasil membuat jaringan internal baru dan bebas melakukan apa saja terhadap perangkat remote. Sayang sekali, saya dan mungkin rekan-rekan mengeluhkan tentang tahapan yang cukup banyak untuk dilakukan. Dan kedua perangkat harus terhubung di server VPN yang sama.
3. SSH remote port forwarding. Ini adalah solusi yang akan saya bahas. Saya mengambil solusi ini karena perangkat remote hanya perlu melakukan otentikasi saja dan konfigurasi yang lebih sedikit dari poin nomor 2.


Prerequisite
Memahami dasar SSH dan bagaimana caranya untuk terhubung dengan SSH server.


Apa itu SSH
SSH adalah sebuah protokol yang memungkinkan pengguna untuk melakukan remote access berbasis teks. SSH juga bisa digunakan sebagai media tunnel bagi anda yang ingin mengkases alamat tertentu sekaligus melewati batasan firewall. Sebagaimana namanya, tunnel merupakan sebuah terowongan maya yang digunakan untuk melewatkan data dari pengirim ke tujuan. Hal tersebut akan membuat seolah rute yang dilalui adalah rute bypass. Jika diperhatikan, SSH tunnel adalah sebuah konsep yang mirip sekali dengan port forwarding.

Tunnel yang diciptakan oleh SSH adalah jenis terowongan terenkripsi dan aman dari eavesdropping.


SSH Tunnel
Pembahasan berikut mungkin terlalu umum dan menjauh dari topik permasalahan, namun tidak ada salahnya mungkin akan sangat membantu.
Secara garis besar, kita dapat menggunakan SSH tunnel dengan 3 mode, diantaranya:

1. Local Port Forwarding (-L)
Adalah jenis port forwarding dimana setiap permintaan yang masuk ke PC anda dengan port tertentu, akan diteruskan ke alamat tujuan melalui SSH server.

Sintaks: ssh -L l_port:r_address:r_port user@ip_SSH_server -p ssh_port

Contoh: ssh -L 9000:ftp.debian.org:80 user@ip_SSH_server -p 22

Pada contoh diatas, PC anda akan membuka local port 9000. Setiap anda mengakses localhost:9000 (misalkan melalui browser), trafik tersebut akan diarahkan ke SSH server melalui tunnel, selanjutnya SSH server akan meneruskannya ke ftp.debian.org:80


contoh: ssh -L 9000:127.0.0.1:80 user@ssh.server -p 22

Nah, untuk contoh ini sedikit menipu. Perintah diatas menyatakan bahwa setiap akses dari PC anda ke localhost port 9000 maka akses tersebut akan diteruskan ke 127.0.0.1 port 80. Lho berarti loopback dong?

Tidak!

127.0.0.1 yang dimaksud adalah localhost milik SSH server, bukan milik PC anda. Sehingga ketika anda mengakses dari PC anda ke localhost port 9000, maka permintaan tersebut akan diteruskan ke SSH server, selanjutnya SSH server akan mengakses 127.0.0.1 (yaitu memanggil SSH server itu sendiri).


SSH local port forwarding sangat membantu apabila anda ingin keamanan super ketat dan mem-filter seluruh port kecuali diakses oleh localhost.

2. Remote Port Forwarding (-R)
Remote Port Forwarding adalah kebalikan dari Local Port Forwarding. Yaitu jenis port forwarding dimana setiap permintaan yang masuk ke SSH server dengan port tertentu, akan diteruskan ke alamat tujuan melalui PC anda.

Sintaks: ssh -R r_port:r_address:l_port user@ip_SSH_server -p ssh_port

Contoh: ssh -R 8080:127.0.0.1:80 user@ip_SSH_server -p 22

Pada contoh diatas menyatakan setiap permintaan yang masuk ke SSH server dengan port 8080 akan diteruskan ke 127.0.0.1 port 80 (nah untuk remote port forwarding, 127.0.0.1 adalah localhost milik PC anda). Dengan kata lain, komputer anda yang berada dibelakang NAT atau memiliki IP private dapat diakses dari manapun melalui SSH server yang memiliki IP public.

Contoh lainnya misal: ssh -R 8080:192.168.10.1:80 user@ip_SSH_server -p 22

Sintaks diatas berbunyi apabila ada permintaan yang masuk ke SSH server dengan port 8080 maka server akan meneruskan permintaan tersebut ke PC anda, selanjutnya PC anda akan mencari alamat 192.168.10.1 dan mengakses port 80 pada alamat itu.

Remote port forwarding adalah solusi terbaik untuk masalah yang saya jabarkan pada pembuka artikel.

3. Dynamic Port Forwarding (-D)
Konsep dasar SSH port forwarding sebenarnya mirip sekali dengan proxy, namun pada pembahasan sebelumnya, pengguna harus menspesifikasikan baik remote address:port atau local address:port. Lalu bagaimana jika pengguna ingin menggunakan banyak address dan port sekaligus? Tentu akan merepotkan menuliskan ratusan bahkan ribuan address dan port. Selain itu, jika anda mengakses sebuah situs, beberapa diantaranya memiliki URL absolute jadi anda tidak bisa (sulit) memanfaat SSH local port forwarding.

Anda dapat menggunakan SSH sebagai proxy server dengan dynamic port forwarding dan memanfaatkan fitur SOCKS. SOCKS akan membantu anda mengarahkan seluruh paket yang datang dari komputer anda ke alamat dan port tertentu. Solusi ini sangat cocok bagi anda yang memiliki akses terbatas pada situs-situs tertentu (misalkan situs porno - bokep, red).

Sintaks: ssh -D r_port user@ip_SSH_server -p ssh_port

Contoh: ssh -D 1080 user@ip_SSH_server -p 22

Perintah diatas akan menghubungkan komputer anda dengan SSH server kemudian menjadikan komputer anda sebagai local proxy pada port 1080.

Selanjutnya, anda tinggal mencari sebuah aplikasi yang dapat mengarahkan permintaan komputer anda ke port tersebut (misalkan Proxychains)



NOTE
Ada beberapa hal yang perlu diperhatikan jika anda menggunakan fitur ini, diantaranya.
1. Pastikan konfigurasi pada sshd_config AllowTCPForwarding sudah yes atau all (secara default sudah)
2.  Jika anda ingin memberikan akses tunnel pada komputer lain, pastikan anda menyematkan opsi -g pada perintah. Contoh: Anda ingin memberikan akses VNC di SSH server pada teman melalui komputer anda.
Sehingga sintaksnya menjadi: ssh -g -L 9000:localhost:5091 user@ip_SSH_server -p 22
Teman anda tinggal mengakses VNC dengan alamat komputer anda dan port 9000
3. Secara default SSH akan memberikan akses shell pada komputer anda. Anda bisa menonaktifkan hal tersebut dengan memberikan opsi -N.
misalkan ssh -g -N -L 9000:localhost:5091 user@ip_SSH_server -p 22
4. Walaupun opsi -N membuat komputer anda keluar dari shell namun anda tidak boleh menutup jendela yang digunakan untuk terhubung dengan SSH server. Agar SSH client dapat berjalan pada background, gunakan opsi -f dan arahkan semua output baik itu stdout atau stderr ke blackhole.
Misalkan: ssh -g -f -N -L 9000:localhost:5091 user@ip_SSH_server -p 22 &> /dev/null
5. Port yang kurang dari 1025 atau 1-1024 (well-known port) harus menggunakan akses root untuk login ke SSH server. 
6. Jika anda ingin komputer lokal anda dapat diakses dari internet melalui SSH server, anda harus mengaktifkan gatewayport pada /etc/ssh/sshd_config.


Itu saja dari saya. Semoga artikel ini membantu kawan-kawan terutama praktisi IT.






Sumber:
Dev.to. (2020). The How To Of Port Forwarding With SSH - DEV Community 👩‍💻👨‍💻. [online] Available at:
Ssh.com. (2020). SSH port forwarding - Example, command, server config. [online] Available at:

P.S

Tidak ada komentar:

Posting Komentar

Terima kasih telah berkunjung.

Mencari Selisih Jumlah Hari Antara Dua Tanggal pada Bash Scripting

Beberapa waktu lalu lagi bikin projek yang melibatkan protokol HTTPS. Seperti yang kita tahu bahwa HTTPS merupakan protokol yang melindungi ...