SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Cara Instal dan Mengamankan Webmin di Ubuntu 24.04

Instal Webmin di Ubuntu 24.04, lalu amankan port 10000 dengan SSH tunnel atau IP allowlist, sertifikat Let's Encrypt, autentikasi dua faktor, dan Fail2ban.

Yang Anda bangun

Webmin adalah panel kontrol web yang menyediakan antarmuka browser untuk seluruh server Linux, termasuk pengguna, paket, cron job, firewall, Apache, BIND, disk, dan ratusan modul lainnya. Webmin dapat diakses melalui HTTPS pada port 10000. Proses instalasinya hanya terdiri dari tiga perintah dan memerlukan waktu sekitar satu menit. Panduan ini membahas bagian kedua lebih panjang karena Webmin login sebagai root dan dapat melakukan apa pun yang dapat dilakukan root. Webmin yang terbuka untuk umum atau tidak memiliki autentikasi bukan sekadar "risiko yang harus dikelola"; kondisi tersebut berarti server sepenuhnya telah disusupi dengan halaman login di depannya. Jadi, instal Webmin dalam sepuluh menit, lalu gunakan sisa waktu hingga satu jam untuk memastikan hanya Anda yang dapat mengaksesnya.

Prasyarat dan satu peringatan penting

Anda memerlukan KVM VPS Ubuntu 24.04 yang masih baru, serta akses sebagai root atau pengguna dengan sudo. Webmin ditulis dalam Perl dan berukuran ringan. RAM 1 GB sudah lebih dari cukup, dan saat idle penggunaannya jauh di bawah seperempat gigabita. Webmin mendengarkan koneksi TCP pada port 10000 melalui web server bawaannya sendiri (miniserv.pl), bukan Apache atau nginx. Jadi, tidak ada komponen lain yang perlu diinstal terlebih dahulu.

Ada dua hal yang perlu ditentukan sebelum memulai. Pertama, akun yang digunakan untuk login. Webmin melakukan autentikasi terhadap akun Unix melalui PAM. Karena itu, Anda harus login sebagai root atau sebagai pengguna dalam grup sudo menggunakan password Unix akun tersebut. Cloud image biasanya hanya menggunakan key dan tidak menetapkan password pada pengguna default. Webmin tidak dapat login menggunakan akun tanpa password. Tetapkan password terlebih dahulu dengan sudo passwd youruser. Jika tidak, login akan gagal, apa pun yang Anda masukkan.

Kedua, dan ini adalah peringatannya: jangan hanya membuka port 10000 ke Internet lalu membiarkannya terbuka. Tentukan sekarang apakah Anda akan mengakses Webmin melalui SSH tunnel (disarankan karena tidak ada layanan yang diekspos) atau membatasi akses hanya ke IP Anda. Keputusan ini menentukan setiap langkah berikutnya. Karena itu, baca kedua opsi sebelum mengubah firewall.

Instal Webmin dari repositori resmi

Webmin menyediakan repositori apt bertanda tangan digital. Skrip penyiapan menambahkan repositori dan kunci penandatanganan GPG-nya, sehingga proses apt upgrade berikutnya mengambil Webmin seperti paket lainnya. Anda mendapatkan pembaruan terautentikasi, bukan .deb yang diunduh tetapi tidak pernah diperbarui.

curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.sh

Skrip menampilkan tindakan yang akan dilakukan dan meminta Setup repository? (y/N). Jawab y. Setelah selesai, instal paketnya. Flag --install-recommends mengambil dependensi modul Perl dan SSL umum agar modul individual tidak gagal kemudian karena kesalahan pustaka yang hilang.

sudo apt-get install --install-recommends webmin

Webmin pernah mengganti nama skrip ini. Panduan lama merujuk ke setup-repos.sh. Jika URL mentah mengembalikan 404, ambil one-liner terbaru langsung dari webmin.com/download, bukan menetapkan nama tertentu. Instalasi yang benar berakhir dengan baris seperti Webmin install complete. You can now login to https://your-host:10000/ as root. Service diaktifkan dan berjalan, konfigurasi tersimpan di /etc/webmin, permintaan dicatat ke /var/webmin/miniserv.log, dan login yang gagal dicatat ke syslog, yaitu journal systemd pada Ubuntu 24.04.

Pastikan service benar-benar aktif dan listening sebelum membuka browser:

sudo systemctl status webmin --no-pager
sudo ss -tlnp | grep 10000

Anda ingin melihat status active (running) dan baris yang menunjukkan miniserv.pl terikat ke 0.0.0.0:10000. Alamat tersebut berubah menjadi 127.0.0.1:10000 setelah Anda menggunakan rute tunnel di bawah ini. Jika ss tidak menampilkan apa pun pada 10000, Webmin tidak berjalan. Baca journalctl -u webmin -n 50 sebelum melanjutkan.

Login pertama dan peringatan sertifikat

Arahkan browser ke https://YOUR_SERVER_IP:10000. Dua hal terjadi pada server baru.

Jika ufw aktif, halaman tidak akan dimuat sama sekali. Ubuntu menonaktifkan ufw pada image server-nya sendiri, tetapi banyak provider mengaktifkannya terlebih dahulu. Masalah ini dibahas pada bagian mode kegagalan di bawah. Jika port terbuka, browser menampilkan blokir satu halaman penuh: "Your connection is not private" dengan kode NET::ERR_CERT_AUTHORITY_INVALID di Chrome, atau SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" di Firefox. Hal ini wajar dan bukan tanda pembobolan. Webmin membuat sertifikat self-signed saat instalasi (/etc/webmin/miniserv.pem). Karena tidak ada certificate authority yang memvalidasinya, browser menolak mempercayainya secara otomatis. Koneksi tetap terenkripsi; sertifikat tersebut hanya tidak divalidasi oleh pihak tepercaya. Untuk sementara, klik Advanced, lalu Proceed. Sertifikat ini akan diganti dengan benar pada bagian selanjutnya.

Login dengan root atau user sudo beserta password Unix-nya. Setelah itu, Anda masuk ke dashboard System Information. Kesalahan yang sering terjadi adalah mengetik http://, bukan https://. miniserv merespons dengan HTTP biasa pada port tersebut dan menampilkan teks persis "This web server is running in SSL mode. Try the URL https://...". Solusinya cukup mengubah http menjadi https pada address bar.

Keputusan keamanan: bagaimana Anda akan mengakses Webmin?

Sekarang bagian yang paling penting. Panel yang setara dengan root tidak boleh berada di Internet terbuka dan melayani upaya login dari setiap pemindai di seluruh dunia. Ada dua opsi yang dapat dipertanggungjawabkan, sesuai urutan preferensi. Setiap antarmuka administrasi yang di-host sendiri menghadapi pertanyaan yang sama. Karena itu, apakah Vaultwarden aman bergantung pada endpoint administrasinya dan file cadangannya, bukan pada enkripsinya.

Tunnel SSH pada Opsi B lebih baik karena sama sekali tidak mengekspos apa pun. Allowlist IP pada Opsi A dapat diterima jika alamat Anda statis. Tidak memilih keduanya adalah kesalahan yang ingin dicegah oleh panduan ini. Jika Anda lebih memilih mengakses Webmin melalui jaringan privat, gunakan VPN WireGuard yang di-host sendiri untuk menghubungkan server, lalu bind Webmin ke alamat tunnel, bukan ke alamat publik.

Batasi Webmin ke IP Anda

Di panel, buka Webmin, lalu Webmin Configuration, kemudian IP Access Control. Pilih "Only allow from listed addresses" dan masukkan IP publik Anda, yang dapat diketahui dengan menjalankan curl ifconfig.me di laptop. Simpan. Webmin menulis konfigurasi ini ke baris allow= dalam /etc/webmin/miniserv.conf, lalu memulai ulang dirinya sendiri.

Risikonya: jika IP rumah Anda dinamis dan berubah, atau Anda salah mengetik alamat tersebut, akses Anda akan terkunci. Browser kemudian menampilkan "Access denied for <your IP>" tanpa formulir login, dan tidak ada akses melalui Webmin untuk memulihkannya. Perbaiki masalah ini dari konsol server melalui SSH atau VNC dari penyedia Anda:

sudo nano /etc/webmin/miniserv.conf
# find the line that begins  allow=
# correct your IP, or delete the whole line to allow all again
sudo systemctl restart webmin

Menghapus baris allow= memulihkan akses yang sepenuhnya terbuka. Lakukan ini hanya untuk pemulihan, lalu segera tetapkan nilai yang benar.

Opsi B: bind ke localhost dan buat tunnel melalui SSH (direkomendasikan)

Cara yang lebih baik daripada allowlist apa pun adalah tidak mendengarkan pada interface publik sama sekali. Atur miniserv agar hanya bind ke loopback, lalu akses melalui tunnel SSH terenkripsi yang sudah Anda percaya.

Edit /etc/webmin/miniserv.conf dan tambahkan atau ubah satu baris:

bind=127.0.0.1

Restart dengan sudo systemctl restart webmin. Webmin kini tidak dapat diakses dari Internet, pemindaian port 10000 tidak menemukan apa pun, dan pemeriksaan ss dari bagian sebelumnya kini menunjukkan bahwa layanan tersebut bind ke 127.0.0.1:10000. Dari laptop Anda, buka tunnel:

ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IP

Biarkan sesi tersebut tetap terbuka, lalu buka https://localhost:10000 di browser. Trafik berjalan di dalam SSH, yang sudah diautentikasi dengan key Anda dan dienkripsi. Karena itu, Anda dapat menerima sertifikat self-signed dengan aman di sini. Lapisan SSH yang memberikan perlindungan sebenarnya. Tutup sesi SSH, dan Webmin tidak lagi dapat diakses. Tidak ada yang perlu dimasukkan ke allowlist, tidak ada yang terekspos, dan tidak ada service tambahan yang perlu diperkuat keamanannya.

Jika Anda menetapkan bind=127.0.0.1 lalu lupa membuat tunnel, akses jarak jauh akan berhenti. Itu berarti fitur tersebut bekerja, bukan mengalami masalah. Pulihkan dengan cara yang sama seperti pada Opsi A: dari console, hapus baris bind atau tetapkan bind=0.0.0.0, lalu restart. Ini adalah kebiasaan tunneling yang sama seperti saat Anda mengakses mesin pengembangan jarak jauh yang menjalankan Claude Code dalam tmux: satu sesi SSH, semuanya privat, dan tidak ada service tambahan yang mendengarkan pada interface publik.

Ganti sertifikat self-signed dengan sertifikat yang valid

Jika Webmin diakses melalui hostname pada Opsi A, hilangkan peringatan browser dengan sertifikat Let's Encrypt yang valid. Anda memerlukan nama DNS, misalnya panel.example.com, dengan A record yang mengarah ke server, serta layanan yang merespons HTTP challenge pada port 80 selama validasi.

Fitur ini sudah tersedia di Webmin: Webmin, lalu Webmin Configuration, lalu SSL Encryption, lalu tab Let's Encrypt. Masukkan hostname, arahkan "website root directory" ke path yang disajikan melalui port 80 untuk domain tersebut, lalu kirim permintaan. Webmin memperoleh sertifikat, memperbarui baris certfile= dan keyfile= dalam miniserv.conf, lalu memperbaruinya secara otomatis sebelum masa berlakunya berakhir. Muat ulang halaman, dan ikon gembok tidak lagi menampilkan peringatan.

Kendala pentingnya adalah server Webmin sendiri berjalan pada port 10000, bukan port 80. Karena itu, http-01 challenge memerlukan web server nyata, seperti Apache atau nginx, yang merespons untuk panel.example.com pada port 80, atau validasi berbasis DNS. Pada server yang hanya menjalankan Webmin tanpa layanan pada port 80, permintaan gagal dengan error validasi sampai Anda menyediakan cara bagi Let's Encrypt untuk mengakses file challenge. Mekanismenya, termasuk DNS record, port-80 challenge, dan pembaruan sertifikat, sama seperti saat menerbitkan sertifikat untuk situs web apa pun. Jika memerlukan penjelasan lebih lanjut, panduan sertifikat TLS Let's Encrypt dengan Certbot dan nginx menjelaskan alur validasi dan konfigurasi DNS secara terperinci. Jika Anda memilih akses melalui SSH tunnel, Anda dapat melewati bagian ini sepenuhnya: sertifikat self-signed sudah memadai di balik SSH, dan sertifikat valid yang diterbitkan untuk panel.example.com tetap akan menghasilkan peringatan ketidakcocokan nama saat Anda mengunjungi https://localhost:10000.

Aktifkan autentikasi dua faktor

Kata sandi saja memberikan perlindungan yang lemah untuk panel root, jadi tambahkan faktor kedua. Buka Webmin, lalu Webmin Configuration, kemudian Two-Factor Authentication. Pilih penyedia Google Authenticator, yaitu TOTP standar yang berfungsi dengan Authy, 1Password, atau aplikasi autentikator apa pun, lalu simpan. Webmin memasang modul Perl kecil yang diperlukan (Authen::OATH beserta generator QR) dan mengaktifkan fitur tersebut. Langkah ini saja belum melindungi akun mana pun.

Setiap akun kemudian mendaftarkan perangkatnya sendiri. Setelah 2FA diaktifkan, buka Webmin, lalu Webmin Users, pilih akun, pilih Enable Two-Factor For User, dan Webmin akan menampilkan kode QR. Pindai kode tersebut dengan aplikasi, lalu masukkan satu kode yang dihasilkan untuk mengonfirmasi. Setelah itu, login akan meminta token enam digit setelah kata sandi. Lakukan pendaftaran sebelum logout. Jika 2FA diwajibkan tetapi akun Anda belum pernah memindai kode, Anda masih dapat menghapus kewajiban tersebut dari konsol, tetapi mendaftar terlebih dahulu jauh lebih mudah.

Tambahkan Fail2ban untuk memblokir login dengan brute force

Endpoint login yang dibatasi tetap harus menghentikan percobaan gagal berulang. Webmin mencatat login gagal ke syslog dalam format webmin[12345]: Invalid login as root from 10.0.0.9, atau Non-existent login as ... untuk username yang bahkan bukan akun Unix. Pada Ubuntu 24.04, baris tersebut masuk ke journal systemd karena image standar tidak memiliki /var/log/auth.log. Fail2ban menyediakan filter bawaan webmin-auth yang mencocokkan kedua baris tersebut secara tepat. Jail di bawah ini menetapkan backend = systemd sendiri, sehingga tidak memerlukan regex atau path log khusus.

Buat /etc/fail2ban/jail.d/webmin.local:

[webmin-auth]
enabled  = true
port     = 10000
filter   = webmin-auth
backend  = systemd
maxretry = 4
bantime  = 1h

Muat ulang dengan sudo systemctl restart fail2ban, lalu pastikan jail aktif:

sudo fail2ban-client status webmin-auth

Jail tersebut seharusnya tercantum dengan penghitung ban awal sebesar zero. Pada backend journal, tidak ada baris File list:. Untuk menguji seluruh konfigurasi, sengaja gagalkan login beberapa kali dari jaringan lain. Setelah itu, jalankan kembali perintah status dan pantau kenaikan Currently banned. Jika nilainya tidak pernah berubah, pastikan Anda tidak menguji dari alamat yang masuk dalam ignoreip Fail2ban. Jalankan juga journalctl SYSLOG_IDENTIFIER=webmin pada server untuk memastikan baris Invalid login benar-benar ditulis. Jika Fail2ban belum terpasang pada server ini, panduan Fail2ban di Ubuntu 24.04 untuk SSH menjelaskan proses instalasi serta SSH jail yang sebaiknya dijalankan bersamaan dengan jail ini.

Batasi hal-hal yang dapat diakses setiap pengguna Webmin

Tidak semua orang yang memerlukan panel harus memiliki akses root ke seluruh sistem. Buka Webmin, lalu Webmin Users, buat login Webmin tambahan, lalu berikan hanya modul yang diperlukan oleh setiap pengguna. Misalnya, operator pencadangan hanya dapat melihat modul cron dan filesystem. Saat mengedit pengguna, Anda akan melihat checklist yang berisi setiap modul. Membatalkan pilihan suatu modul akan menghapusnya dari menu pengguna tersebut dan memblokir URL yang mendasarinya. Ini merupakan pertahanan berlapis: bahkan sesi Webmin dengan hak istimewa rendah yang dicuri tidak dapat menulis ulang /etc/shadow jika modul Users tidak tercantum di dalamnya.

Memperbarui Webmin

Karena Anda menginstalnya dari repositori apt, sudo apt update && sudo apt upgrade mengambil rilis Webmin terbaru bersama pembaruan sistem lainnya. Segera terapkan patch karena control panel merupakan target yang sering diserang. Webmin juga dapat memperbarui dirinya sendiri melalui Webmin, lalu Webmin Configuration, kemudian Upgrade Webmin, tetapi metode apt lebih rapi di Ubuntu karena menjaga konsistensi versi dengan sistem manajemen paket lainnya. Jangan anggap pembaruan ini opsional. Beberapa CVE Webmin sebelumnya merupakan bug remote code execution, dan satu-satunya hal yang membedakan sistem yang sudah di-patch dari server yang breached adalah seberapa cepat administrator menjalankan upgrade.

Mode kegagalan dan pesan yang akan Anda lihat

"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. Pesan ini ditampilkan saat pemuatan pertama. Penyebabnya adalah sertifikat self-signed yang dibuat Webmin saat instalasi tidak memiliki penerbit tepercaya. Ini bukan serangan. Kanal tetap terenkripsi, tetapi tidak memiliki validasi dari pihak tepercaya. Solusinya adalah lanjutkan melalui peringatan tersebut untuk sementara, lalu terbitkan sertifikat Let's Encrypt yang valid. Anda juga dapat menerima sertifikat tersebut secara permanen jika mengakses Webmin melalui SSH tunnel.

"This web server is running in SSL mode. Try the URL https://...". Anda mengetik http://server:10000. miniserv hanya menggunakan TLS pada port tersebut dan menyampaikannya dalam teks biasa. Solusinya adalah ubah http menjadi https pada address bar.

Halaman mengalami timeout, ERR_CONNECTION_TIMED_OUT / "This site can't be reached". Permintaan tidak pernah sampai ke Webmin. Pada Ubuntu, penyebabnya hampir selalu ufw yang memblokir port 10000. Konfirmasikan dengan sudo ufw status. Jika 10000 tidak tercantum, Anda dapat membukanya dengan sudo ufw allow 10000/tcp atau, yang lebih baik, tetap menutupnya dan menggunakan SSH tunnel dari Option B. Perhatikan perbedaannya: timeout berarti firewall membuang paket secara diam-diam, sedangkan ERR_CONNECTION_REFUSED berarti port dapat dijangkau, tetapi Webmin tidak berjalan. Periksa sudo systemctl status webmin.

"Access denied for <your IP>." Anda mengatur IP Access Control pada Option A, tetapi alamat Anda saat ini tidak tercantum dalam allow list. Kemungkinan lain adalah alamat IP dinamis Anda berubah atau terdapat kesalahan pengetikan. Tidak ada jalur pemulihan melalui browser. Perbaiki dari console: edit baris allow= dalam /etc/webmin/miniserv.conf, perbaiki atau hapus baris tersebut, lalu jalankan sudo systemctl restart webmin.

"Login failed. Please try again." dengan kredensial yang Anda ketahui benar. Akun tersebut tidak memiliki password Unix. Kondisi ini umum pada cloud image yang hanya menggunakan key. Webmin melakukan autentikasi melalui PAM terhadap password Unix, dan password tersebut tidak tersedia untuk pengguna itu. Solusinya adalah jalankan sudo passwd youruser pada server, lalu login. Jika /var/webmin/miniserv.log menampilkan Non-existent login as ..., Anda memasukkan username yang bukan akun Unix.

Untuk lebih dari beberapa server, automation lebih mudah diskalakan daripada control panel pada setiap server: playbook Ansible pertama Anda adalah titik awalnya.

FAQ

Apakah aman mengekspos Webmin ke Internet publik?

Perlakukan Webmin yang menghadap Internet sebagai root shell dengan halaman login, karena memang itulah fungsinya. Konfigurasi ini hanya cukup aman jika menggunakan beberapa lapisan perlindungan: sertifikat yang valid, autentikasi dua faktor, Fail2ban, serta allowlist IP yang ketat atau, lebih baik lagi, tanpa eksposur publik sama sekali. Konfigurasi dengan risiko paling rendah mengikat Webmin ke 127.0.0.1 dan mengaksesnya melalui SSH tunnel, sehingga port 10000 tidak menerima koneksi dari Internet terbuka.

Bagaimana cara menghilangkan peringatan sertifikat Webmin?

Peringatan (NET::ERR_CERT_AUTHORITY_INVALID) muncul karena Webmin menggunakan sertifikat self-signed. Terbitkan sertifikat yang valid dari Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt, menggunakan nama DNS yang mengarah ke server dan menyediakan layanan pada port-80 untuk challenge validasi. Jika Anda hanya mengakses Webmin melalui SSH tunnel ke localhost, peringatan tersebut tidak berbahaya. SSH sudah mengenkripsi dan mengautentikasi koneksi, sehingga Anda dapat menerima sertifikat self-signed tersebut dengan aman.

Bagaimana cara membatasi Webmin agar hanya dapat diakses dari alamat IP saya?

Buka Webmin, Webmin Configuration, IP Access Control, pilih "Only allow from listed addresses", lalu masukkan IP publik Anda dari curl ifconfig.me. Webmin menyimpan pengaturan ini pada baris allow= di /etc/webmin/miniserv.conf. Perhatikan IP rumah yang dinamis. Jika alamat tersebut berubah, Anda akan terkunci dan harus memperbaiki baris allow= dari konsol server. Karena itu, alamat statis atau metode SSH tunnel biasanya lebih andal.

Mengapa login saya gagal meskipun kata sandinya benar?

Webmin melakukan autentikasi melalui PAM menggunakan kata sandi Unix. Image cloud biasanya hanya menggunakan autentikasi berbasis key dan tidak menetapkan kata sandi pada akun default. Akibatnya, PAM tidak memiliki kata sandi yang dapat dicocokkan dan login ditolak. Jalankan sudo passwd youruser pada server untuk menetapkan kata sandi, lalu login kembali. Baris Non-existent login as ... di /var/webmin/miniserv.log menunjukkan bahwa username tersebut bukan akun Unix yang valid.

Apa keunggulan Webmin dibandingkan SSH biasa?

Webmin menyediakan lapisan kemudahan penggunaan dan kemudahan menemukan fitur. Webmin berguna untuk menelusuri log, mengelola user dan cron, mengedit aturan firewall, serta melihat status disk dan service tanpa harus mengingat setiap perintah. Fitur ini berguna bagi admin yang hanya sesekali mengelola server atau tim dengan tingkat keahlian yang beragam. SSH biasa lebih cepat, dapat dibuat dalam script, dan mengekspos permukaan serangan yang jauh lebih kecil untuk pekerjaan rutin. Banyak admin menggunakan keduanya: SSH untuk pekerjaan sehari-hari, serta Webmin yang diikat ke localhost dan diakses melalui tunnel untuk pekerjaan point-and-click sesekali. Jika pertanyaan sebenarnya adalah panel mana yang sebaiknya digunakan, bukan panel dibandingkan shell, pertimbangkan terlebih dahulu Cockpit dibandingkan dengan Webmin, karena keduanya berbeda dalam hal seberapa banyak bagian sistem yang dapat diubah dan cara masing-masing melakukan autentikasi.