Episode ini membangun pertahanan pertama VNC: memahami vncpasswd dan keterbatasan password 8 karakter, password view-only, pembatasan akses dengan -localhost dan bind ke interface tertentu, serta aturan firewall yang hanya mengizinkan IP client tertentu.

Sejauh ini kalian fokus membuat VNC bekerja. Mulai episode 12, kita berbalik arah: bagaimana membuat VNC tidak mudah disusupi. Jujur saja — autentikasi bawaan VNC lemah. Password-nya pendek, transfer layarnya tidak terenkripsi, dan banyak implementasi membuka diri ke seluruh jaringan secara default.
Episode ini membangun pertahanan lapis pertama: memahami keterbatasan vncpasswd, menggunakan password view-only, membatasi akses dengan -localhost dan bind ke interface tertentu, serta mengonfigurasi firewall agar hanya IP client yang diizinkan bisa masuk. Enkripsi penuh akan menyusul di episode 13 dan 14.
Alat utama autentikasi VNC adalah vncpasswd. Dia membuat file password yang dibaca server untuk memvalidasi client:
vncpasswd
vncpasswd -f > ~/.vnc/passwdPerintah vncpasswd berjalan interaktif dan menulis ke ~/.vnc/passwd. Opsi -f memungkinkan password dibaca dari input terpisah — berguna saat membuat password untuk beberapa user dalam skrip.
Ini kelemahan mendasar yang wajib kalian pahami: autentikasi VNC klasik hanya memakai 8 karakter pertama dari password. Karakter sisanya diabaikan, dan verifikasinya memakai DES dengan kunci derivasi yang sudah dikenal publik. Konsekuensinya:
x11vnc -storepasswdKarena keterbatasan ini, jangan pernah mengandalkan password VNC sendirian. Password hanya lapis pertama; enkripsi transport (TLS/SSH) adalah lapis yang menutup celah sesungguhnya, dan akan dibahas di episode 13-14.
Warning
Jangan pernah memakai kata atau tanggal yang bisa ditebak sebagai password VNC. Dengan batas 8 karakter, setiap kemudahan mengingat adalah kelemahan yang bisa dieksploitasi lebih cepat.
Beberapa implementasi VNC memungkinkan dua kelas password: satu untuk kontrol penuh, satu lagi hanya untuk melihat layar. Di x11vnc, gunakan -viewpasswd:
x11vnc -display :0 -rfbauth /etc/x11vnc.pass -viewpasswd /etc/x11vnc-view.passPerintah x11vnc -display :0 -rfbauth /etc/x11vnc.pass -viewpasswd /etc/x11vnc-view.pass membuat koneksi dengan password utama bisa mengendalikan layar, sementara koneksi dengan password kedua hanya bisa melihat — tanpa bisa mengetik atau menggerakkan mouse.
Fitur ini ideal untuk skenario presentasi: peserta bisa mengikuti layar, hanya satu presenter yang mengendalikan. Kombinasikan dengan pembatasan clipboard yang dibahas di episode 11 untuk sesi yang benar-benar terkunci.
Cara paling tegas membatasi akses adalah -localhost, yang membuat server hanya mendengarkan di 127.0.0.1. Tidak ada mesin lain di jaringan yang bisa terhubung langsung:
x11vnc -display :0 -rfbauth /etc/x11vnc.pass -localhost
vncserver :1 -localhost -geometry 1920x1080Perintah vncserver :1 -localhost -geometry 1920x1080 memulai virtual display yang hanya bisa diakses dari mesin itu sendiri. Ini pola paling aman: VNC tetap mati bagi jaringan, dan akses dibuka hanya lewat SSH tunnel (episode 14).
Jika server punya beberapa interface jaringan, kalian bisa mengikat VNC hanya ke satu interface internal dengan opsi -listen di x11vnc:
x11vnc -display :0 -rfbauth /etc/x11vnc.pass -listen 192.168.1.20x11vnc -listen 192.168.1.20 membuat server mendengarkan hanya di alamat internal, sehingga VNC tidak terlihat dari interface publik. Verifikasi dengan ss:
ss -tulpn | grep 5900Firewall adalah lapis pertahanan yang mengatur siapa yang bisa mencapai port. Di Debian/Ubuntu dengan ufw, izinkan hanya satu IP client ke port VNC:
sudo ufw allow from 192.168.1.100 to any port 5900 proto tcp
sudo ufw status verbosePerintah sudo ufw allow from 192.168.1.100 to any port 5900 proto tcp membuat aturan yang hanya membuka port 5900 untuk IP tersebut — semua IP lain ditolak.
Di keluarga RHEL, aturan yang sama ditulis dengan rich rule:
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.100 port port=5900 protocol=tcp accept'
sudo firewall-cmd --reloadfirewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.100 port port=5900 protocol=tcp accept' menyimpan aturan permanen yang hanya menerima koneksi dari 192.168.1.100. Ubah alamat sesuai IP client kalian, bukan menyebar akses ke seluruh subnet.
Secara keseluruhan, pertahanan dasar VNC idealnya disusun berlapis:
-localhost.password + view-only + bind/interface + firewall -> server VNC amanEpisode 12 membangun pertahanan pertama: memahami kelemahan password VNC 8 karakter, memisahkan hak kontrol dengan password view-only, membatasi akses via -localhost dan bind interface, serta menutup port dengan firewall yang hanya mengizinkan IP client.
Inti yang harus dibawa pulang:
-viewpasswd membuat koneksi yang hanya bisa melihat layar.-localhost dan -listen membatasi akses di sisi server.Di episode 13 selanjutnya kita menutup kelemahan terbesar VNC: enkripsi — masalah VNC plaintext yang bisa disadap, aktivasi TLS/SSL di x11vnc dan TigerVNC, serta mengapa SSH tunnel adalah lapis enkripsi yang wajib. Sampai jumpa!