Skip to content
VDS · Basis data

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

GejalaPenyebab
Klien tidak dapat terhubung melalui tunnelPort lokal sudah dipakai — pilih yang lain
Host ... is not allowed to connectPengguna MySQL terikat ke localhost
no pg_hba.conf entry for hostTidak ada aturan untuk alamat Anda
Port terbuka tetapi tidak ada yang meresponsDatabase hanya mendengarkan di 127.0.0.1
Berhasil, lalu berhentiPenyedia 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.