SSD Nodes Learn
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-07-24

Cara pasang Webmin di Ubuntu 24.04

Panduan lengkap memasang Webmin pada Ubuntu 24.04 serta cara mengamankan port 10000 menggunakan Let's Encrypt, Fail2ban, dan SSH tunnel untuk keselamatan.

Apa yang anda bina

Webmin ialah panel kawalan web yang menyediakan antaramuka pelayar untuk keseluruhan pelayan Linux — pengguna, pakej, tugasan cron, tembok api, Apache, BIND, cakera, dan seratus modul lain — yang boleh dicapai melalui HTTPS pada port 10000. Proses pemasangan hanya melibatkan tiga arahan dan mengambil masa kira-kira satu minit. Panduan ini memberikan tumpuan lebih pada bahagian kedua kerana Webmin log masuk sebagai root dan boleh melakukan apa sahaja yang boleh dilakukan oleh root. Webmin yang terbuka luas atau tanpa pengesahan bukan sekadar "risiko untuk diurus"; ia adalah pencerobohan pelayan sepenuhnya dengan halaman log masuk di hadapannya. Oleh itu, pasang ia dalam masa sepuluh minit, kemudian gunakan baki masa sejam untuk memastikan hanya anda sahaja yang boleh mencapainya.

Prasyarat dan satu amaran penting

VPS Ubuntu 24.04 KVM yang baru dengan akses root atau pengguna sudo. Webmin menggunakan Perl dan sangat ringan — 1 GB RAM sudah mencukupi dan ia hanya menggunakan kurang daripada suku gigabait semasa dalam keadaan idle. Ia menggunakan port TCP 10000 melalui pelayan web terbina dalam (miniserv.pl), bukan Apache atau nginx, jadi tiada perisian lain perlu dipasang terlebih dahulu.

Dua perkara perlu diputuskan sebelum anda bermula. Pertama, akaun untuk log masuk: Webmin menggunakan PAM untuk pengesahan akaun Unix, jadi anda perlu log masuk sebagai root atau pengguna dalam kumpulan sudo menggunakan kata laluan Unix akaun tersebut. Imej awan (cloud images) biasanya hanya menggunakan kunci SSH tanpa kata laluan pada pengguna lalai, dan Webmin tidak boleh log masuk ke akaun tanpa kata laluan. Tetapkan kata laluan dengan sudo passwd youruser terlebih dahulu, jika tidak log masuk akan gagal walaupun maklumat yang dimasukkan adalah betul.

Kedua, ini adalah amaran: jangan hanya buka port 10000 kepada internet dan biarkan sahaja. Tentukan sekarang sama ada anda akan mengakses Webmin melalui terowong SSH (disyorkan, tiada pendedahan port) atau mengehadkannya kepada IP anda sendiri. Keputusan ini akan menentukan setiap langkah di bawah, jadi baca kedua-dua pilihan sebelum anda mengubah tetapan firewall.

Pasang Webmin daripada repositori rasmi

Webmin menyediakan repositori apt yang ditandatangani. Skrip tetapan akan menambah repositori dan kunci penandatanganan GPG supaya pelaksanaan apt upgrade pada masa hadapan akan mengambil Webmin seperti pakej lain. Ini memastikan anda mendapat kemas kini yang disahkan dan bukannya fail .deb yang dimuat turun yang tidak boleh dikemas kini secara automatik.

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

Skrip akan memaparkan tindakan yang bakal dilakukan dan bertanya Setup repository? (y/N) — jawab y. Setelah selesai, pasang pakej tersebut. Flag --install-recommends akan mengambil kebergantungan modul Perl dan SSL yang biasa supaya modul individu tidak gagal dengan ralat missing-library kemudian hari.

sudo apt-get install --install-recommends webmin

Webmin pernah menukar nama skrip ini sebelum ini — panduan lama merujuk kepada setup-repos.sh — jadi jika URL asal memulangkan ralat 404, ambil baris arahan tunggal yang terkini terus dari webmin.com/download daripada menggunakan nama yang tetap. Pemasangan yang betul akan berakhir dengan baris seperti Webmin install complete. You can now login to https://your-host:10000/ as root. Perkhidmatan telah diaktifkan dan sedang berjalan, fail konfigurasi berada di bawah /etc/webmin, log permintaan disimpan ke /var/webmin/miniserv.log, dan kegagalan log masuk dihantar ke syslog — pada Ubuntu 24.04, ia dihantar ke systemd journal.

Sahkan perkhidmatan benar-benar aktif dan sedang mendengar sebelum anda membuka pelayar:

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

Anda memerlukan status active (running) dan baris yang menunjukkan miniserv.pl terikat pada 0.0.0.0:10000 — alamat tersebut akan bertukar kepada 127.0.0.1:10000 sebaik sahaja anda menggunakan laluan terowong di bawah. Jika ss tidak menunjukkan apa-apa pada port 10000, Webmin tidak bermula; baca journalctl -u webmin -n 50 sebelum meneruskan.

Log masuk pertama, dan amaran sijil

Arahkan pelayar anda ke https://YOUR_SERVER_IP:10000. Dua perkara berlaku pada pemasangan baharu.

Jika ufw aktif — imej pelayan Ubuntu asal menyediakannya dalam keadaan tidak aktif, tetapi banyak penyedia telah mengaktifkannya lebih awal — halaman tidak akan dimuatkan langsung, seperti yang dijelaskan dalam mod kegagalan di bawah. Jika port dibuka, pelayar anda akan memaparkan sekatan halaman penuh: "Your connection is not private" dengan kod NET::ERR_CERT_AUTHORITY_INVALID dalam Chrome, atau SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" dalam Firefox. Ini adalah perkara biasa dan bukan pencerobohan. Webmin menjana sijil kendiri (self-signed) semasa pemasangan (/etc/webmin/miniserv.pem), dan kerana tiada pihak berkuasa sijil (certificate authority) yang mengesahkannya, pelayar enggan mempercayainya secara senyap. Sambungan masih disulitkan; ia cuma tidak disahkan. Klik sahaja (Advanced, kemudian Proceed) buat masa ini — kita akan menggantikan sijil ini dengan cara yang betul kemudian.

Log masuk dengan root atau pengguna sudo anda dan kata laluan Unix anda, dan anda akan mendarat di papan pemuka Maklumat Sistem. Satu kesilapan biasa di sini ialah menaip http:// dan bukannya https://. miniserv membalas HTTP biasa pada port tersebut dengan teks "This web server is running in SSL mode. Try the URL https://..." — penyelesaiannya adalah dengan menukar http kepada https pada bar alamat.

Keputusan keselamatan: bagaimana anda akan mengakses Webmin?

Bahagian ini adalah yang paling penting. Panel dengan hak akses root tidak sepatutnya terdedah kepada internet terbuka untuk menerima percubaan log masuk daripada semua pengimbas di dunia. Anda mempunyai dua pilihan yang selamat, mengikut urutan keutamaan.

Terowong SSH dalam Pilihan B adalah pilihan yang lebih baik kerana ia tidak mendedahkan apa-apa pun. Senarai putih IP dalam Pilihan A boleh diterima jika alamat IP anda adalah statik. Tidak menggunakan kedua-duanya adalah kesilapan yang ingin dielakkan oleh panduan ini. Jika anda lebih suka mengakses Webmin melalui rangkaian peribadi, letakkan pelayan di belakang VPN WireGuard kendiri dan tetapkan Webmin pada alamat terowong dan bukannya alamat awam.

Pilihan A: hadkan Webmin kepada IP anda

Di dalam panel, buka Webmin, kemudian Webmin Configuration, kemudian IP Access Control. Pilih "Only allow from listed addresses" dan masukkan IP awam anda, yang boleh didapati dengan menjalankan curl ifconfig.me pada komputer riba anda. Simpan. Webmin akan menulis maklumat ini ke baris allow= dalam /etc/webmin/miniserv.conf dan memulakan semula perkhidmatan tersebut.

Risiko: jika IP rumah anda adalah dinamik dan berubah, atau anda tersalah taip alamat tersebut, anda akan terkunci daripada akses. Pelayar kemudian akan memaparkan "Access denied for <your IP>" tanpa borang log masuk, dan tiada laluan web untuk masuk semula. Anda boleh membaikinya melalui konsol pelayan menggunakan SSH atau VNC pembekal 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

Memadam baris allow= akan memulihkan akses terbuka sepenuhnya, jadi lakukan langkah ini hanya untuk pemulihan, kemudian segera tetapkan nilai yang betul.

Pilihan B: ikat pada localhost dan buat terowong melalui SSH (disyorkan)

Cara yang lebih baik daripada menggunakan senarai putih (allowlist) adalah dengan tidak mendengar pada antara muka awam sama sekali. Beritahu miniserv untuk hanya terikat pada loopback, kemudian akses ia melalui terowong SSH tersulit yang telah anda percayai.

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

bind=127.0.0.1

Mulakan semula dengan sudo systemctl restart webmin. Webmin kini tidak boleh dicapai dari internet — imbasan port pada 10000 tidak menemui apa-apa, dan semakan ss sebelum ini kini menunjukkan ia terikat pada 127.0.0.1:10000. Dari komputer riba anda, buka satu terowong:

ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IP

Biarkan sesi itu terbuka dan layari https://localhost:10000. Trafik dihantar di dalam SSH, yang telah disahkan oleh kunci anda dan tersulit, jadi anda boleh menerima sijil self-signed di sini dengan selamat — lapisan SSH melakukan perlindungan sebenar. Tutup sesi SSH dan Webmin akan terputus. Tiada senarai putih yang perlu diurus, tiada pendedahan, tiada perkhidmatan tambahan untuk diperkukuh.

Jika anda menetapkan bind=127.0.0.1 dan terlupa membuka terowong, akses jauh akan terhenti — itu adalah fungsi yang berfungsi, bukan ralat. Pulihkan dengan cara yang sama seperti Pilihan A: dari konsol, buang baris bind atau tetapkan bind=0.0.0.0, kemudian mulakan semula. Ini adalah tabiat penggunaan terowong yang sama seperti yang anda gunakan untuk mengakses kotak pembangunan jauh yang menjalankan Claude Code dalam tmux — satu sesi SSH, semuanya peribadi, tiada perkhidmatan tambahan yang mendengar pada antara muka awam.

Gantikan sijil self-signed dengan sijil sebenar

Jika anda mendedahkan Webmin pada nama hos di bawah Option A, hapuskan amaran pelayar dengan sijil Let's Encrypt yang sebenar. Anda memerlukan nama DNS — contohnya panel.example.com — dengan rekod A yang menghala ke pelayan, dan sesuatu yang menjawab cabaran HTTP port-80 semasa pengesahan.

Webmin mempunyai fungsi ini secara terbina: Webmin, kemudian Webmin Configuration, kemudian SSL Encryption, kemudian tab Let's Encrypt. Masukkan nama hos, halakan "website root directory" ke laluan yang dilayani pada port 80 untuk domain tersebut, dan buat permintaan. Webmin akan mendapatkan sijil, mengemas kini baris certfile= dan keyfile= dalam miniserv.conf untuk anda, dan memperbaharuinya secara automatik sebelum tamat tempoh. Muat semula halaman dan ikon mangga akan kelihatan bersih.

Satu masalah utama: pelayan Webmin sendiri berjalan pada 10000, bukan 80, jadi cabaran http-01 memerlukan pelayan web sebenar — Apache atau nginx — yang menjawab untuk panel.example.com pada port 80, atau menggunakan pengesahan berasaskan DNS. Pada kotak Webmin-sahaja tanpa apa-apa pada port 80, permintaan akan gagal dengan ralat pengesahan sehingga anda memberikan cara kepada Let's Encrypt untuk mencapai fail cabaran tersebut. Mekanisme — rekod DNS, cabaran port-80, dan pembaharuan — adalah sama seperti mengeluarkan sijil untuk mana-mana laman web. Jika anda mahu maklumat lanjut, panduan sijil TLS Let's Encrypt dengan Certbot dan nginx menerangkan aliran pengesahan dan tetapan DNS secara terperinci. Jika anda menggunakan kaedah SSH-tunnel, anda boleh melangkau bahagian ini sepenuhnya: sijil self-signed adalah memadai di sebalik SSH, dan sijil sebenar yang dikeluarkan untuk panel.example.com hanya akan menghasilkan amaran ketidakpadanan nama apabila anda melawat https://localhost:10000.

Aktifkan pengesahan dua faktor

Kata laluan sahaja tidak mencukupi untuk melindungi panel root, jadi tambahkan faktor kedua. Buka Webmin, kemudian Webmin Configuration, kemudian Two-Factor Authentication. Pilih pembekal Google Authenticator — ini adalah TOTP standard, jadi ia berfungsi dengan Authy, 1Password, atau mana-mana aplikasi pengesah — dan simpan. Webmin akan memasang modul Perl yang diperlukan (Authen::OATH berserta penjana QR) dan mengaktifkan ciri tersebut; langkah ini sahaja belum melindungi mana-mana akaun.

Setiap akaun kemudian perlu mendaftarkan peranti sendiri. Selepas 2FA diaktifkan, buka Webmin, kemudian Webmin Users, pilih akaun, pilih Enable Two-Factor For User, dan Webmin akan memaparkan kod QR; imbas kod tersebut dengan aplikasi dan masukkan satu kod yang dijana untuk pengesahan. Selepas itu, proses log masuk akan meminta token enam digit selepas kata laluan. Daftar sebelum anda log keluar — jika 2FA diperlukan tetapi akaun anda belum pernah mengimbas kod, anda masih boleh memadam keperluan tersebut melalui konsol, tetapi adalah lebih mudah jika anda mendaftar terlebih dahulu.

Tambah Fail2ban untuk menyekat log masuk brute-force

Titik akhir log masuk yang terhad sekalipun perlu menghukum kegagalan berulang. Webmin melaporkan kegagalan log masuk ke syslog dalam bentuk webmin[12345]: Invalid login as root from 10.0.0.9, atau Non-existent login as ... untuk nama pengguna yang bukan akaun Unix — pada Ubuntu 24.04 baris tersebut masuk ke dalam systemd journal kerana imej stok tidak mempunyai /var/log/auth.log. Fail2ban disertakan dengan penapis webmin-auth stok yang memadankan kedua-dua baris tersebut, dan jail di bawah menetapkan backend = systemd sendiri, jadi ia tidak memerlukan regex atau laluan log tersuai.

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

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

Muat semula dengan sudo systemctl restart fail2ban, kemudian sahkan jail telah aktif:

sudo fail2ban-client status webmin-auth

Anda akan melihat jail disenaraikan dengan kaunter sekatan sifar pada permulaan (pada backend journal tiada baris File list:). Untuk membuktikan sambungan hujung ke hujung, gagalkan log masuk dengan sengaja beberapa kali dari rangkaian lain, kemudian jalankan semula arahan status dan perhatikan Currently banned meningkat. Jika ia tidak meningkat, pastikan anda tidak sedang menguji dari alamat dalam ignoreip Fail2ban, dan jalankan journalctl SYSLOG_IDENTIFIER=webmin pada pelayan untuk mengesahkan baris Invalid login sebenarnya sedang ditulis. Jika Fail2ban belum dipasang pada mesin ini, panduan Fail2ban pada Ubuntu 24.04 untuk SSH merangkumi pemasangan dan jail SSH yang perlu anda jalankan bersama jail ini.

Hadkan akses setiap pengguna Webmin

Tidak semua pengguna memerlukan akses root sepenuhnya. Di bawah Webmin, kemudian Webmin Users, cipta log masuk Webmin tambahan dan berikan modul yang diperlukan sahaja — sebagai contoh, operator sandaran yang hanya boleh melihat modul cron dan filesystem. Mengedit pengguna akan memaparkan senarai semak bagi setiap modul; membatalkan tanda pada modul tersebut akan membuangnya daripada menu pengguna dan menyekat URL berkaitan. Ini adalah pertahanan berlapis: sesi Webmin dengan hak akses rendah yang dicuri tetap tidak boleh mengubah /etc/shadow jika modul Users tiada dalam senarai aksesnya.

Mengemas kini Webmin

Kerana anda memasang daripada repositori apt, sudo apt update && sudo apt upgrade akan memuat turun versi Webmin baharu bersama dengan sistem yang lain. Kemas kini tampalan dengan segera — panel kawalan adalah sasaran utama. Webmin juga boleh dikemas kini sendiri melalui Webmin, kemudian Webmin Configuration, kemudian Upgrade Webmin, tetapi kaedah apt adalah lebih kemas pada Ubuntu kerana ia mengekalkan versi yang konsisten dengan pengurusan pakej anda yang lain. Jangan anggap ini sebagai pilihan: beberapa CVE Webmin sebelum ini adalah pepijat pelaksanaan kod jarak jauh (remote-code-execution), dan satu-satunya perbezaan antara "telah ditampal" dan "telah diceroboh" adalah kepantasan admin menjalankan kemas kini tersebut.

Mod kegagalan, bersama rentetan teks yang akan anda lihat

"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. Dipaparkan pada muatan pertama. Punca: sijil self-signed yang dijana oleh Webmin semasa pemasangan tidak mempunyai penerbit yang dipercayai. Ini bukan serangan; saluran disulitkan, cuma tidak disahkan. Penyelesaian: teruskan melalui amaran tersebut buat sementara waktu, kemudian keluarkan sijil Let's Encrypt yang sebenar, atau terima secara kekal jika anda mengakses Webmin melalui terowong SSH.

"This web server is running in SSL mode. Try the URL https://..." Anda menaip http://server:10000. miniserv hanya menggunakan TLS pada port tersebut dan memaklumkan anda melalui teks biasa. Penyelesaian: tukar http kepada https pada bar alamat.

Halaman tamat tempoh (timeout) — ERR_CONNECTION_TIMED_OUT / "This site can't be reached". Permintaan tidak sampai ke Webmin. Pada Ubuntu, ini hampir sentiasa disebabkan oleh ufw yang membuang port 10000. Sahkan dengan sudo ufw status; jika 10000 tidak disenaraikan, sama ada buka port tersebut dengan sudo ufw allow 10000/tcp atau, lebih baik, biarkan ia tertutup dan gunakan terowong SSH daripada Pilihan B. Perhatikan perbezaan ini: timeout bermaksud tembok api membuang paket secara senyap, manakala ERR_CONNECTION_REFUSED bermaksud port boleh dicapai tetapi Webmin tidak sedang berjalan — semak sudo systemctl status webmin.

"Access denied for <your IP>." Anda menetapkan IP Access Control di bawah Pilihan A dan alamat semasa anda tiada dalam senarai benarkan — IP dinamik yang telah berubah, atau kesilapan menaip. Tiada cara untuk masuk semula melalui pelayar. Penyelesaian dari konsol: edit baris allow= dalam /etc/webmin/miniserv.conf, betulkan atau padamkan, dan jalankan sudo systemctl restart webmin.

"Login failed. Please try again." dengan kredential yang anda tahu adalah betul. Akaun tersebut tiada kata laluan Unix, yang merupakan standard pada imej awan (cloud images) berasaskan kunci sahaja. Webmin melakukan pengesahan melalui PAM terhadap kata laluan Unix, dan kata laluan tersebut tidak wujud untuk pengguna tersebut. Penyelesaian: jalankan sudo passwd youruser pada pelayan, kemudian log masuk. Jika /var/webmin/miniserv.log menunjukkan Non-existent login as ..., anda menaip nama pengguna yang bukan merupakan akaun Unix langsung.

Untuk lebih daripada beberapa pelayan, automasi lebih mudah diskalakan berbanding menggunakan panel kawalan pada setiap mesin: playbook Ansible pertama anda adalah tempat permulaannya.

FAQ

Adakah selamat untuk mendedahkan Webmin pada internet awam?

Anggap Webmin yang terdedah ke internet sebagai shell root dengan halaman log masuk, kerana itulah fungsinya yang sebenar. Ia hanya cukup selamat jika menggunakan pelbagai lapisan: sijil yang sah, pengesahan dua faktor, Fail2ban, dan sama ada senarai putih IP yang ketat atau, lebih baik lagi, tiada pendedahan awam langsung. Tetapan berisiko paling rendah adalah mengikat Webmin pada 127.0.0.1 dan mengaksesnya melalui terowong SSH, supaya port 10000 tidak menjawab sesiapa di internet terbuka.

Bagaimanakah cara untuk membuang amaran sijil Webmin?

Amaran (NET::ERR_CERT_AUTHORITY_INVALID) muncul kerana Webmin disertakan dengan sijil self-signed. Dapatkan sijil yang sah melalui Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt, menggunakan nama DNS yang menghala ke pelayan dengan perkhidmatan yang mengendalikan cabaran port-80 untuk pengesahan. Jika anda hanya mengakses Webmin melalui terowong SSH ke localhost, amaran tersebut tidak berbahaya — SSH sudah pun menyulitkan dan mengesahkan sambungan — dan anda boleh menerima sijil self-signed tersebut dengan selamat.

Bagaimanakah cara untuk mengehadkan Webmin kepada alamat IP saya sahaja?

Pergi ke Webmin, Webmin Configuration, IP Access Control, pilih "Only allow from listed addresses", dan masukkan IP awam anda daripada curl ifconfig.me. Webmin menyimpan maklumat ini dalam baris allow= dalam /etc/webmin/miniserv.conf. Berhati-hati dengan IP rumah yang dinamik: jika ia berubah, anda akan terkunci dan perlu membaiki baris allow= daripada konsol pelayan, jadi alamat statik atau kaedah terowong-SSH adalah lebih dipercayai dalam praktiknya.

Mengapakah log masuk saya gagal walaupun menggunakan kata laluan yang betul?

Webmin melakukan pengesahan melalui PAM terhadap kata laluan Unix anda, dan imej awan biasanya hanya menggunakan kunci tanpa kata laluan ditetapkan pada akaun lalai — jadi tiada maklumat untuk PAM padankan dan log masuk ditolak. Jalankan sudo passwd youruser pada pelayan untuk menetapkannya, kemudian log masuk. Baris Non-existent login as ... dalam /var/webmin/miniserv.log pula bermaksud nama pengguna tersebut bukan akaun Unix yang sebenar.

Apakah kegunaan Webmin berbanding SSH biasa?

Webmin adalah lapisan kemudahan dan penemuan. Ia sangat berguna untuk melayari fail log, mengurus pengguna dan cron, menyunting peraturan firewall, serta melihat status cakera dan perkhidmatan tanpa perlu menghafal setiap arahan — memudahkan pentadbir kasual atau pasukan dengan kemahiran bercampur. SSH biasa adalah lebih pantas, boleh diskrip, dan mendedahkan permukaan serangan yang jauh lebih kecil untuk kerja rutin. Ramai pentadbir menjalankan kedua-duanya: SSH untuk penggunaan harian, dan Webmin yang diikat pada localhost di sebalik terowong untuk tugasan klik-dan-pilih yang jarang dilakukan.