
TeknoCerdas.com – Salam cerdas untuk kita semua. Untuk mengakses localhost dari internet kebanyakan developer mungkin akan menggunakan tools populer seperti ngrok. Tapi jika anda sudah punya server seperti VPS yang dapat diakses dari internet maka cukup gunakan SSH tunneling untuk mengakses localhost dari internet. Cara ini juga lazim disebut dengan SSH reverse tunneling.
Akses ke localhost dari internet kadang sering dibutuhkan terutama untuk melakukan tes integrasi dengan pihak ketiga. Beberapa contohnya adalah mengetes Facebook atau Google OAuth, GitHub web hook, Slack web hook dan masih banyak lagi.
Baca Juga
Tutorial SSH: Menonaktifkan Login Menggunakan Password
Untuk mengakses localhost dari internet dengan SSH yang dibutuhkan adalah sebuah server yang memiliki IP publik dan konfigurasi firewall yang sesuai untuk memperbolehkan akses dari internet ke server tersebut.
Pada contoh ini kita akan melakukan forwarding port 8080 di server ke port 9090 di lokal komputer.
+----------+ v.x.y.z:8080 +------------+ 127.0.0.1:9090 +-----------+
| Internet | --------------> | SSH Server | ----------------> | Localhost |
+----------+ +------------+ +-----------+1. Pastikan Firewall Terbuka (Server)
Buka firewall pada port 8080 di sisi server agar koneksi dari internet dapat diteruskan ke komputer lokal. Jika anda menggunakan Ubuntu Linux anda dapat menggunakan perintah ufw untuk memperbolehkan akses perto 8080 TCP.
$ sudo ufw allow 8080/tcpPada distribusi Linux lain dapat menggunakan iptables secara langsung. Namun jika menggunakan hosting di cloud seperti AWS, GCP, DO dan lainnya silahkan atur lewat konfigurasi security group atau firewall masing-masing provider.
2. Modifikasi Konfigurasi SSH Daemon (Server)
Secara default port forwarding hanya dapat dilakukan jika bind_address pada server hanya local loopback atau 127.0.0.1. Jika ingin bind ke semua interface termasuk 0.0.0.0 maka harus mengubah konfigurasi GatewayPorts pada SSH.
Karena kita ingin port forwarding ini untuk dapat diakses lewat internet maka bind ke 0.0.0.0 wajib dilakukan. Untuk itu ubah file /etc/ssh/sshd_config.
$ vi /etc/ssh/sshd_configKemudian tambahkan baris berikut ini.
GatewayPorts yesSimpan kembali file konfigurasi tersebut lalu reload SSH service.
$ sudo systemctl reload ssh3. Menyalakan Web Server (Lokal)
Pada contoh ini saya menggunakan web server bawaan dari Python dan membuat sebuah file teknocerdas.txt sebagai file yang akan diakses nantinya. Isi dari file tersebut adalah sebagai berikut:
Teknocerdas.com - Berita teknologi yang mencerdaskanSimpan file tersebut. Diasumsikan file tersebut berada pada /tmp/webserver/teknocerdas.txt. Nyalakan web server bawaan dari Python 3 pada direktori /tmp/webserver.
$ python3 -m http.server --bind 127.0.0.1 --directory /tmp/webserver 9090Sekarang coba akses alamat http://localhost:9090/teknocerdas.txt lewat web browser.

4. Membuat SSH Tunnel (Lokal)
Sekarang waktunya untuk membuat SSH reverse tunnel yang akan meneruskan paket dari server port 8080 ke lokal komputer port 9090. Perintah yang digunakan adalah:
$ ssh -R 0.0.0.0:8080:127.0.0.1:9090 -C -N user@server-ipPenjelasan perintah SSH diatas.
-Rmenunjukkan penggunaan Reverse Tunnel artinya dari server ke lokal.0.0.0.0:8080:127.0.0.1:9090SSH pada server akan melakukan bind ke0.0.0.0(semua interface) port8080agar bisa diakses lewat internet. Paket akan diteruskan ke alamat127.0.0.1port9090pada komputer lokal.- -C mengaktifkan kompresi.
- -N tidak perlu mengeksekusi perintah pada server karena yang digunakan hanyala port forwarding.
user@server-iplogin sebagaiuserke server dengan alamatserver-ip.
Manual lengkap dapat dilihat dengan perintah man ssh atau online manual di https://www.openssh.com/manual.html.
5. Tes Koneksi Tunnel
Pada SSH server jalankan perintah berikut untuk mengetahui apakah ada service yang berjalan pada semua network interface dan port 8080.
$ ss -lnt4State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*Dapat terlihat sudah ada service yang berjalan pada 0.0.0.0:8080 itu artinya SSH reverse tunnel telah berjalan.
Pada komputer anda atau perangkat lain coba buka alamat IP dari server SSH port 8080 pada browser.
http://SERVER-IP:8080/teknocerdas.txt.
Harusnya tampilan terbuka dengan isi dari file teknocerdas.txt. Itu artinya localhost berhasil diakses lewat internet menggunakan SSH tunneling.

Jika dipadukan dengan layanan dari Cloudflare maka anda dapat gratis SSL certificate untuk domain tanpa perlu repot.
Cukup mudah bukan? Selamat mencoba.
