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/tcp
Pada 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_config
Kemudian tambahkan baris berikut ini.
GatewayPorts yes
Simpan kembali file konfigurasi tersebut lalu reload SSH service.
$ sudo systemctl reload ssh
3. 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 mencerdaskan
Simpan 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 9090
Sekarang 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-ip
Penjelasan perintah SSH diatas.
-R
menunjukkan penggunaan Reverse Tunnel artinya dari server ke lokal.0.0.0.0:8080:127.0.0.1:9090
SSH pada server akan melakukan bind ke0.0.0.0
(semua interface) port8080
agar bisa diakses lewat internet. Paket akan diteruskan ke alamat127.0.0.1
port9090
pada komputer lokal.- -C mengaktifkan kompresi.
- -N tidak perlu mengeksekusi perintah pada server karena yang digunakan hanyala port forwarding.
user@server-ip
login sebagaiuser
ke 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 -lnt4
State 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.