Akses database jarak jauh: cara agar tidak terekspos ke seluruh internet
Dua cara terhubung ke database di VDS dari komputer kerja Anda: SSH tunnel dan port terbuka dengan pembatasan. Mana yang dipilih dan cara memeriksanya.
Diperbarui 23 Agustus 2026
Database yang mendengarkan di 0.0.0.0 dengan kata sandi root hanya bertahan sampai pemindaian pertama — dan seluruh rentang alamat dipindai terus-menerus. Pada saat yang sama, menghubungkan ke database dari laptop dengan klien itu praktis dan sering kali diperlukan. Ada dua cara, dan hanya satu di antaranya yang tidak memiliki kekurangan.
Metode 1: SSH tunnel (direkomendasikan)
Database tetap terikat ke 127.0.0.1, dan tidak ada yang terekspos ke luar selain SSH. Di komputer Anda sendiri:
ssh -L 5433:127.0.0.1:5432 root@YOUR_ADDRESS -N
ssh -L 3307:127.0.0.1:3306 root@YOUR_ADDRESS -N
Sekarang hubungkan ke 127.0.0.1:5433 di DBeaver, TablePlus, atau psql. Dari sudut pandang database, ini terlihat seperti koneksi lokal.
Sebagian besar klien dapat menyiapkan tunnel sendiri: pengaturan koneksi memiliki tab "SSH". Tentukan alamat mesin dari "Overview" panel /hosting/vds/m/<id> dan kunci Anda.
Keuntungan metode ini: Anda tidak perlu mengubah apa pun dalam konfigurasi database atau firewall.
Metode 2: port terbuka dengan pembatasan
Ini adalah pilihan terakhir — untuk saat layanan eksternal dengan alamat statis yang diketahui terhubung. Setiap langkah di bawah ini wajib:
ufw allow from 203.0.113.10 to any port 5432 proto tcp
Untuk PostgreSQL: listen_addresses = '*' dan baris hostssl all all 203.0.113.10/32 scram-sha-256 di pg_hba.conf. Untuk MySQL: bind-address = 0.0.0.0 dan pengguna yang terikat ke alamat tertentu:
CREATE USER 'app'@'203.0.113.10' IDENTIFIED BY 'long-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'203.0.113.10';
Tanpa TLS, koneksi seperti itu mengirim data dalam teks biasa. ufw allow 5432 tanpa menentukan sumber adalah persis apa yang dimaksud dengan "membukanya ke seluruh internet".
Verifikasi
Dari mesin lain:
nmap -Pn -p 3306,5432,6379,27017 YOUR_ADDRESS
Respons yang diharapkan adalah filtered atau closed pada semua port. Secara lokal, periksa apa yang mendengarkan dan di mana:
ss -tulpn | grep -E '3306|5432|6379'
Kesalahan umum
| Gejala | Penyebab |
|---|---|
| Klien tidak dapat terhubung melalui tunnel | Port lokal sudah dipakai — pilih yang lain |
Host ... is not allowed to connect | Pengguna MySQL terikat ke localhost |
no pg_hba.conf entry for host | Tidak ada aturan untuk alamat Anda |
| Port terbuka tetapi tidak ada yang merespons | Database hanya mendengarkan di 127.0.0.1 |
| Berhasil, lalu berhenti | Penyedia Anda memberi alamat dinamis — satu alasan lagi untuk menggunakan tunnel |
Mesin tidak memiliki IPv6, dan juga tidak memiliki alamat kedua. Tulis semua aturan untuk satu-satunya alamat IPv4 publik dari "Overview" — tidak akan ada kebingungan dengan dua stack.