Lewati ke isi

Keamanan/Cyber Security

Cara Mengamankan phpMyAdmin dari Akses Publik

Langkah mengamankan phpMyAdmin di VPS, dari membatasi IP, akses lewat SSH tunnel, Basic Auth, sampai menolak login root dan memasang Fail2ban.

Terbit 5 menit baca

Jawaban singkat

Jangan biarkan phpMyAdmin terbuka untuk semua orang. Batasi aksesnya ke IP tertentu atau hanya dari localhost lewat SSH tunnel, tambahkan Basic Auth, wajibkan HTTPS, tolak login root, dan perbarui rutin. Bila jarang dipakai, matikan saja.

Daftar isi
  1. Langkah 1: Putuskan dulu, apakah phpMyAdmin perlu selalu menyala?
  2. Langkah 2: Batasi akses hanya dari IP tertentu
  3. Langkah 3: Pakai SSH tunnel bila IP-mu berubah-ubah
  4. Langkah 4: Tambahkan lapisan Basic Auth
  5. Langkah 5: Perketat konfigurasi phpMyAdmin
  6. Langkah 6: Wajibkan HTTPS dan pasang Fail2ban
  7. Langkah 7: Perbarui secara rutin
  8. Ringkasan pilihan pengamanan
  9. Pertanyaan yang sering diajukan

Coba buka https://alamat-servermu/phpmyadmin dari HP yang memakai data seluler. Kalau halaman login phpMyAdmin langsung muncul, berarti siapa pun di internet juga bisa melihatnya, dan alamat seperti itu termasuk yang paling rajin dipindai bot.

phpMyAdmin sendiri bukan aplikasi yang buruk. Masalahnya, ia memberi akses penuh ke database lewat browser. Satu password yang lemah, satu celah yang belum ditambal, dan isi database berpindah tangan. Panduan ini ditujukan untuk phpMyAdmin yang kamu pasang sendiri di VPS (misalnya lewat paket phpmyadmin di Ubuntu atau Debian). Di hosting cPanel, phpMyAdmin hanya bisa dibuka setelah login cPanel, jadi fokusnya cukup pada keamanan akun cPanel itu.

Langkah 1: Putuskan dulu, apakah phpMyAdmin perlu selalu menyala?

Kalau kamu hanya membuka phpMyAdmin sebulan sekali, pilihan paling aman adalah menonaktifkannya dan menyalakannya saat dibutuhkan. Di Apache pada Ubuntu atau Debian:

sudo a2disconf phpmyadmin
sudo systemctl reload apache2

Saat perlu, jalankan sudo a2enconf phpmyadmin lalu muat ulang Apache lagi. Untuk pekerjaan rutin seperti impor dan ekspor, perintah mysqldump dan mysql lewat SSH sering lebih cepat dan tidak membuka pintu apa pun.

Langkah 2: Batasi akses hanya dari IP tertentu

Kalau phpMyAdmin harus tetap menyala, langkah paling berdampak adalah membatasi siapa yang boleh membukanya. Pada paket Debian dan Ubuntu, konfigurasi Apache-nya ada di /etc/phpmyadmin/apache.conf. Di dalam blok <Directory /usr/share/phpmyadmin>, tambahkan:

Require ip 127.0.0.1 ::1
Require ip 203.0.113.10

Ganti 203.0.113.10 dengan IP statis kantormu. Pastikan di blok yang sama tidak ada Require all granted, karena beberapa baris Require yang berdiri sendiri dibaca sebagai "salah satu terpenuhi", sehingga aturan IP-mu jadi tidak berarti. Uji lalu muat ulang:

sudo apache2ctl configtest
sudo systemctl reload apache2

Untuk Nginx, aturan serupa ditaruh di blok location yang melayani phpMyAdmin, dengan baris allow 203.0.113.10; lalu deny all;. Uji dengan sudo nginx -t sebelum memuat ulang.

Langkah 3: Pakai SSH tunnel bila IP-mu berubah-ubah

Banyak koneksi internet kantor dan rumah tidak punya IP tetap. Solusinya: izinkan hanya localhost (baris Require ip 127.0.0.1 ::1 di atas), lalu buka phpMyAdmin melalui terowongan SSH dari laptopmu:

ssh -L 8080:127.0.0.1:80 user@alamat-server

Selama sesi SSH itu terbuka, buka http://localhost:8080/phpmyadmin di browser laptop. Bagi server, permintaanmu datang dari 127.0.0.1, sehingga lolos aturan. Bagi orang lain di internet, phpMyAdmin tidak bisa dibuka sama sekali. Lalu lintasnya juga terenkripsi oleh SSH. Bila server punya banyak administrator, pola ini bisa dikembangkan menjadi satu pintu masuk khusus seperti dijelaskan di apa itu bastion host.

Langkah 4: Tambahkan lapisan Basic Auth

Dokumentasi resmi phpMyAdmin menyarankan menaruh lapisan autentikasi di depannya, misalnya HTTP Basic Auth. Buat file password:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd namaadmin

Lalu di blok <Directory /usr/share/phpmyadmin> tambahkan AuthType Basic, AuthName "Terbatas", AuthUserFile /etc/phpmyadmin/.htpasswd, dan Require valid-user. Kalau kamu menggabungkannya dengan aturan IP, bungkus keduanya dalam <RequireAll> agar kedua syarat harus terpenuhi. Basic Auth hanya aman lewat HTTPS, karena tanpa enkripsi password-nya bisa disadap.

Langkah 5: Perketat konfigurasi phpMyAdmin

Buka /etc/phpmyadmin/config.inc.php dan tambahkan pengaturan berikut setelah definisi server:

$cfg['Servers'][$i]['AllowRoot'] = false;
$cfg['LoginCookieValidity'] = 1800;

AllowRoot = false menolak login dengan user root, sehingga penyerang tidak bisa menebak password akun paling berkuasa itu. Buat user database terpisah untuk tiap aplikasi dengan hak sesuai kebutuhan. LoginCookieValidity mengatur berapa detik sesi boleh menganggur sebelum harus login lagi. Kalau ada folder setup sisa instalasi manual, hapus setelah konfigurasi selesai.

Langkah 6: Wajibkan HTTPS dan pasang Fail2ban

Pastikan phpMyAdmin hanya dibuka lewat HTTPS, karena username dan password database dikirim lewat formulir login. Sertifikat gratis dari Let's Encrypt sudah cukup. Untuk menahan tebakan password, pastikan login gagal tercatat (lokasinya diatur dengan $cfg['AuthLog'], misalnya ke syslog) lalu arahkan Fail2ban ke log tersebut. Cara memasang Fail2ban dibahas di blokir brute force dengan Fail2ban.

Langkah 7: Perbarui secara rutin

phpMyAdmin pernah memiliki sejumlah celah keamanan, dan perbaikannya diumumkan di halaman pengumuman keamanan resminya. Jalankan sudo apt update && sudo apt upgrade secara berkala, atau pantau rilis baru bila kamu memasang versi dari situs resmi. Jangan lupa memperbarui PHP dan MySQL/MariaDB-nya juga.

Bila tujuanmu sebenarnya adalah mengakses database dari aplikasi desktop seperti DBeaver atau HeidiSQL, pertimbangkan cara lain yang dijelaskan di membuka akses remote MySQL dengan aman.

Ringkasan pilihan pengamanan

CaraTingkat perlindunganCocok untuk
Nonaktifkan saat tidak dipakaiPaling tinggiAkses sesekali
Hanya localhost + SSH tunnelSangat tinggiAdmin dengan IP berubah-ubah
Batasi IP kantorTinggiKantor dengan IP statis
Basic Auth + HTTPSLapisan tambahanDigabung dengan pembatasan IP
Tolak root, batas sesi, Fail2banLapisan tambahanSemua instalasi
Ganti alamat /phpmyadmin sajaRendahHanya mengurangi bot

Pertanyaan yang sering diajukan

Apakah cukup mengganti alamat /phpmyadmin ke nama lain?

Itu hanya mengurangi pemindaian otomatis. Siapa pun yang mengetahui alamatnya tetap bisa mencoba login, jadi tetap batasi IP atau pakai SSH tunnel.

Apakah phpMyAdmin di cPanel perlu diamankan dengan cara ini?

Tidak perlu, karena di cPanel phpMyAdmin hanya bisa dibuka setelah login cPanel. Yang perlu diamankan adalah akun cPanel-nya: password kuat dan 2FA.

Saya terkunci setelah membatasi IP, bagaimana memperbaikinya?

Masuk lewat SSH, edit kembali /etc/phpmyadmin/apache.conf, perbaiki baris Require ip, lalu jalankan apache2ctl configtest dan muat ulang Apache. Atau pakai SSH tunnel sementara.

Apakah Adminer lebih aman daripada phpMyAdmin?

Prinsipnya sama: alat apa pun yang memberi akses database lewat browser harus dibatasi aksesnya. Pilih yang kamu kuasai, lalu terapkan langkah yang sama.

Bisakah reset password admin WordPress tetap dilakukan setelah phpMyAdmin dibatasi?

Bisa, lewat SSH tunnel atau langsung dengan perintah mysql di server. Langkah lewat phpMyAdmin ada di reset password admin WordPress.

Checklist singkat:

  • phpMyAdmin tidak bisa dibuka dari jaringan luar yang tidak diizinkan.
  • Akses hanya lewat HTTPS atau SSH tunnel.
  • Login root ditolak, setiap aplikasi punya user database sendiri.
  • Login gagal tercatat dan diblokir otomatis.
  • Paket phpMyAdmin, PHP, dan database rutin diperbarui.

Sumber & referensi

Baca juga