phpMyAdmin memudahkan pekerjaan administrasi database melalui browser. Adminer menawarkan kemudahan serupa untuk mengelola data. Namun, kemudahan membuka tool dari mana saja perlu disertai pertanyaan: siapa saja yang seharusnya bisa menjangkau halaman tersebut?
Saya menyarankan agar port database dan panel administrasinya tidak dibuka ke seluruh internet. Kebutuhan mengelola database dari luar kantor atau rumah dapat dipenuhi melalui VPN atau SSH tunnel, sementara layanan yang dituju tetap berada di jaringan privat.
Port tertutup, jalur web masih terbuka
Ada dua jalur yang perlu diperhatikan. Jalur pertama adalah koneksi langsung ke layanan database. Jalur kedua adalah aplikasi web yang memiliki akses ke database, termasuk phpMyAdmin, Adminer, dan pgAdmin.
Menutup port database dari internet hanya membatasi jalur pertama. Jika panel administrasi masih dapat dibuka melalui website publik, orang dari luar tetap dapat mengirim request ke panel itu. Web server kemudian menjalankan tool yang berkomunikasi dengan database dari sisi server.
Halaman login memang membatasi penggunaan, tetapi layanan webnya sudah menerima request sebelum pengguna berhasil masuk. Upaya menebak password dan eksploitasi celah pada aplikasi tetap dapat diarahkan ke sana. Dampak akses yang berhasil juga mengikuti hak akun database: akun yang dapat menghapus tabel membawa risiko berbeda dari akun yang hanya dapat membaca.
Karena itu, pemeriksaan keamanan perlu mencakup keduanya. Database yang hanya menerima koneksi lokal tidak otomatis membuat panel webnya menjadi privat.
Koneksi aplikasi tidak membutuhkan akses dari semua alamat
Jika aplikasi dan database berada di mesin yang sama, koneksi dapat menggunakan Unix socket atau alamat loopback. Jika berada di server berbeda, gunakan jaringan privat dan batasi koneksi pada server aplikasi yang membutuhkan.
Pada PostgreSQL, pengaturan listen_addresses menentukan interface yang menerima koneksi. Nilai default-nya adalah localhost, sedangkan tanda bintang berarti semua interface yang tersedia. Pengaturan ini berbeda tanggung jawab dari autentikasi pengguna.
Mendengarkan pada semua interface belum tentu berarti layanan dapat dijangkau internet; firewall dan routing ikut menentukan. Namun, membuka akses ke semua sumber untuk menyelesaikan masalah koneksi membuat batasnya terlalu luas. Telusuri alamat sumber dan jalur jaringan yang benar, lalu berikan akses hanya pada kebutuhan tersebut.
Kebutuhan | Jalur akses yang disarankan | Batas yang dipertahankan |
Aplikasi satu mesin | Unix socket atau loopback | Koneksi database tidak memerlukan interface publik. |
Aplikasi beda server | Jaringan privat, dengan aturan akses dari server aplikasi | Anggota jaringan lain tidak otomatis diizinkan. |
Administrasi jarak jauh | VPN atau SSH tunnel menuju layanan privat | Port database dan panel tidak terbuka ke seluruh internet. |
Akses administrator melewati jalur yang dibatasi
Dengan VPN, administrator masuk ke jaringan privat terlebih dahulu. Salah satu dasar teknisnya adalah IPsec yang menyediakan perlindungan dan kebijakan akses pada lapisan IP. Setelah koneksi terbentuk, aturan jaringan tetap perlu membatasi layanan yang boleh dijangkau. Akun VPN tidak perlu mendapat akses ke seluruh server.
Untuk pekerjaan sesekali, SSH tunnel dapat meneruskan koneksi melalui sesi SSH. Protokol koneksi SSH mendukung forwarding TCP melalui tunnel terenkripsi. Layanan tujuan bisa berupa port database atau panel web internal. Untuk local forwarding, batasi port di laptop pada loopback agar tidak ikut tersedia bagi perangkat lain.
Perlindungan tunnel mengikuti jalurnya: bila koneksi diteruskan dari server SSH ke mesin lain, segmen lanjutan itu tetap perlu diamankan. Verifikasi identitas server SSH dan gunakan kredensial yang dikelola dengan baik.
VPN dan tunnel juga membutuhkan disiplin operasional. Akses mantan administrator harus dicabut, perangkat yang dipakai perlu dijaga, dan kredensial database tetap wajib diperiksa oleh database.
Panel administrasi membutuhkan pembatasan tersendiri
Panel sebaiknya ditempatkan pada layanan internal yang hanya bisa dijangkau melalui jalur administrator. Jika panel memakai web server yang juga melayani website publik, pembatasan harus berlaku pada host atau lokasi panel tersebut. Pastikan tidak ada alamat lain yang menyajikan panel yang sama tanpa pembatasan.
Dokumentasi keamanan phpMyAdmin menyarankan HTTPS, pembaruan ketika ada kerentanan, serta pertimbangan autentikasi tambahan sebelum pengguna memberikan kredensial MySQL. Ini mendukung pertahanan berlapis: pembatasan jaringan, autentikasi panel, dan hak database menjalankan tugas masing-masing.
HTTPS melindungi pertukaran data selama koneksi. Ia tidak menentukan siapa yang boleh membuka halaman. Mengganti nama direktori panel juga tidak memberi pembatasan akses. Untuk Adminer yang diunggah sementara, hapus file tersebut ketika pekerjaan selesai jika memang tidak diperlukan lagi.
Pisahkan akun aplikasi dari akun administrasi. Berikan hak sesuai tugasnya; koneksi yang datang dari jaringan privat tetap tidak membutuhkan hak superuser untuk pekerjaan biasa.
Ada keadaan yang mengharuskan endpoint publik, misalnya keterbatasan layanan hosting. Batasi alamat sumber bila memungkinkan, gunakan autentikasi tambahan dan MFA jika tersedia, serta TLS dengan verifikasi sertifikat untuk koneksi database. Pilihan ini tetap membawa layanan ke batas publik dan membutuhkan pemeliharaan lebih ketat. Password kuat saja tidak menggantikan pembatasan sumber koneksi.
Pemeriksaan harus dilakukan dari luar jaringan
Setelah pembatasan diterapkan, uji dari koneksi internet yang tidak memakai VPN. Pada rancangan dengan layanan privat, koneksi langsung ke database harus gagal dan panel tidak boleh menyajikan halaman login kepada sumber yang tidak diizinkan. Kemudian sambungkan VPN atau tunnel dan pastikan administrator yang berhak tetap dapat bekerja.
Periksa juga alamat IPv6 bila digunakan, alamat IP langsung, dan host alternatif yang mungkin melewati aturan pada domain utama. Pengujian dari dalam server saja tidak membuktikan bahwa batas akses dari internet sudah benar.
Saat meninjau server berikutnya, tanyakan dua hal secara terpisah: apakah orang dari internet bisa menjangkau database, dan apakah mereka bisa menjangkau tool yang mengelolanya? Jika salah satunya masih terbuka tanpa kebutuhan yang jelas, itulah akses yang perlu dibatasi.
