Webmin sa Ubuntu 24.04: Install at Secure Setup
I-install ang Webmin sa Ubuntu 24.04, saka i-secure ang port 10000 gamit ang SSH tunnel o IP allowlist, Let's Encrypt, 2FA, at Fail2ban.
Mga ginagawa mo
Ang Webmin ay isang web control panel na naglalagay ng browser front end sa buong Linux server. Saklaw nito ang users, packages, cron jobs, firewall, Apache, BIND, disks, at mahigit isandaang iba pang module. Maa-access ito sa HTTPS sa port 10000. Tatlong command lang ang kailangan para sa installation, at karaniwang tumatagal ito nang humigit-kumulang isang minuto. Karamihan ng gabay na ito ay nakatuon sa ikalawang bahagi dahil nagla-log in ang Webmin bilang root at kayang gawin ang lahat ng kayang gawin ng root. Ang Webmin na bukas sa lahat o walang authentication ay hindi lang “risk na kailangang pamahalaan”; ganap nitong nako-kompromiso ang server, na may login page lamang sa harap nito. Kaya i-install ito sa loob ng sampung minuto, pagkatapos ay gugulin ang natitirang oras upang matiyak na ikaw lamang ang makaka-access dito.
Mga kinakailangan at isang mahalagang babala
Kailangan mo ng bagong Ubuntu 24.04 KVM VPS na may root o sudo user. Ang Webmin ay nakasulat sa Perl at magaan; sapat na ang 1 GB RAM, at karaniwan itong gumagamit ng mas mababa sa isang-kapat ng isang gigabyte kapag idle. Nakikinig ito sa TCP 10000 sa sarili nitong bundled web server (miniserv.pl), hindi sa Apache o nginx, kaya wala nang ibang kailangang i-install muna.
May dalawang bagay na kailangan mong pagpasiyahan bago magsimula. Una, ang account na gagamitin mo sa pag-login: nag-a-authenticate ang Webmin laban sa Unix accounts sa pamamagitan ng PAM. Kaya magla-login ka bilang root o bilang user na kabilang sa sudo group, gamit ang Unix password ng account na iyon. Karaniwang key-only ang mga cloud image at walang nakatakdang password ang default user. Hindi makakapag-login ang Webmin sa account na walang password. Magtakda muna ng password gamit ang sudo passwd youruser, kung hindi ay mabibigo ang login anuman ang ilagay mo.
Ikalawa, at ito ang babala: huwag basta-bastang buksan ang port 10000 sa internet at pabayaan na lang. Magpasya ngayon kung maa-access mo ang Webmin sa pamamagitan ng SSH tunnel (inirerekomenda; walang direktang nakalantad) o kung lilimitahan mo ito sa sarili mong IP. Ang desisyong ito ang magtatakda sa bawat hakbang sa ibaba, kaya basahin muna ang dalawang option bago galawin ang firewall.
Mag-install ng Webmin mula sa official repository
Nagpa-publish ang Webmin ng signed apt repository. Idinadagdag ng setup script ang repository at ang GPG signing key nito upang ang mga susunod na apt upgrade run ay mag-download ng Webmin tulad ng ibang package. Makakakuha ka rin ng authenticated updates sa halip na isang na-download na .deb na hindi awtomatikong nag-a-update.
curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.shIpinapakita ng script ang mga gagawin nito at humihingi ng Setup repository? (y/N). Sagutin ito ng y. Kapag natapos na, i-install ang package. Kinukuha ng --install-recommends flag ang karaniwang Perl at SSL module dependencies upang hindi mabigo sa bandang huli ang mga indibidwal na module dahil sa nawawalang library.
sudo apt-get install --install-recommends webminNapangalanan nang muli ng Webmin ang script na ito dati. Tinutukoy ng mga lumang guide ang setup-repos.sh. Kung magbalik ng 404 ang raw URL, kunin ang kasalukuyang one-liner nang direkta sa webmin.com/download sa halip na mag-pin ng pangalan. Nagtatapos ang tamang installation sa linyang gaya ng Webmin install complete. You can now login to https://your-host:10000/ as root. Naka-enable at tumatakbo ang service. Nasa /etc/webmin ang configuration. Nila-log ang mga request sa /var/webmin/miniserv.log. Sa Ubuntu 24.04, ipinapadala sa syslog ang mga failed login, na nasa systemd journal.
Kumpirmahing aktwal na gumagana at nakikinig ito bago ka magbukas ng browser:
sudo systemctl status webmin --no-pager
sudo ss -tlnp | grep 10000Dapat kang makakita ng active (running) status at linyang nagpapakitang naka-bind ang miniserv.pl sa 0.0.0.0:10000. Magiging 127.0.0.1:10000 ang address na iyon kapag ginamit mo ang tunnel route sa ibaba. Kung walang ipinapakita ang ss sa 10000, hindi nagsimula ang Webmin. Basahin ang journalctl -u webmin -n 50 bago magpatuloy.
Unang pag-login at ang babala sa certificate
Ituro ang browser sa https://YOUR_SERVER_IP:10000. May dalawang mangyayari sa bagong setup.
Kung aktibo ang ufw, hindi ito aktibo sa sariling server image ng Ubuntu, pero maraming provider ang naka-enable na ito bilang default, hindi maglo-load ang page. Tatalakayin ito sa mga failure mode sa ibaba. Kung bukas ang port, magpapakita ang browser ng full-page block: "Your connection is not private" na may code na NET::ERR_CERT_AUTHORITY_INVALID sa Chrome, o SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" sa Firefox. Inaasahan ito at hindi ito indikasyon ng paglabag sa server. Gumawa ang Webmin ng self-signed certificate noong ini-install ito (/etc/webmin/miniserv.pem). Dahil walang certificate authority na nagpapatunay dito, tumatanggi ang browser na awtomatikong pagkatiwalaan ito. Naka-encrypt pa rin ang connection; wala lamang itong certificate na pinagtibay ng certificate authority. I-click muna ang Advanced, pagkatapos ay Proceed. Papalitan natin nang maayos ang certificate na ito sa mga susunod na bahagi.
Mag-login gamit ang root o ang iyong sudo user at Unix password nito. Pagkatapos, mapupunta ka sa System Information dashboard. Karaniwang pagkakamali rito ang pag-type ng http:// sa halip na https://. Sumasagot ang miniserv ng plain HTTP sa port na iyon gamit ang eksaktong text na "This web server is running in SSL mode. Try the URL https://...". Ang solusyon ay palitan lang ang http ng https sa address bar.
Ang desisyong pangseguridad: paano mo maa-access ang Webmin?
Ito ang bahaging mahalaga. Hindi dapat direktang nakalantad sa internet ang panel na katumbas ng root access at tumatanggap ng login attempts mula sa bawat scanner sa internet. May dalawang mapangangatwirang option, ayon sa priyoridad. Parehong humaharap sa tanong na ito ang bawat self-hosted admin surface. Kaya ang kung secure ang Vaultwarden ay nakasalalay sa admin endpoint at backup file nito, hindi sa encryption nito.
Mas mainam ang SSH tunnel sa Option B dahil wala itong inilalantad. Katanggap-tanggap ang IP allowlist sa Option A kung static ang address mo. Ang hindi paggamit sa alinman sa mga ito ang mismong pagkakamaling layong pigilan ng gabay na ito. Kung mas gusto mong i-access ang Webmin sa private network kaysa sa alinman sa dalawang option, ilagay ang server sa likod ng self-hosted WireGuard VPN at i-bind ang Webmin sa tunnel address sa halip na sa public address.
Opsyon A: paghigpit ng access sa Webmin para sa iyong IP
Sa panel, buksan ang Webmin, pagkatapos ay Webmin Configuration, at pagkatapos ay IP Access Control. Piliin ang "Only allow from listed addresses" at ilagay ang iyong public IP. Makikita mo ito sa laptop sa pamamagitan ng pagpapatakbo ng curl ifconfig.me. I-save ang setting. Isinusulat ito ng Webmin sa linyang allow= sa /etc/webmin/miniserv.conf at nire-restart nito ang sarili.
Ang panganib: kung dynamic ang home IP mo at magbago ito, o mali ang mailagay mong address, mawawalan ka ng access. Ipapakita ng browser ang "Access denied for <your IP>" at walang login form. Wala ring web access path para makabalik. Ayusin ito mula sa server console gamit ang SSH o VNC ng iyong provider:
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 webminKapag dinelete ang linyang allow=, maibabalik ang ganap na bukas na access. Gawin lamang ito para makabawi, at agad na magtakda ng tamang value.
Opsyon B: mag-bind sa localhost at mag-tunnel gamit ang SSH (inirerekomenda)
Mas mainam kaysa sa anumang allowlist ang hindi makinig sa public interface. Sabihan ang miniserv na mag-bind lamang sa loopback, saka itong i-access sa pamamagitan ng encrypted SSH tunnel na pinagkakatiwalaan mo na.
I-edit ang /etc/webmin/miniserv.conf at magdagdag o magbago ng isang linya:
bind=127.0.0.1Mag-restart gamit ang sudo systemctl restart webmin. Hindi na maa-access ang Webmin mula sa internet, walang makikita ang port scan sa 10000, at ipinapakita na ngayon ng ss check mula kanina na naka-bind ito sa 127.0.0.1:10000. Mula sa iyong laptop, magbukas ng tunnel:
ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IPPanatilihing bukas ang session na iyon at mag-browse sa https://localhost:10000. Dumadaan ang traffic sa loob ng SSH, na na-authenticate na ng iyong key at encrypted, kaya ligtas mong tanggapin dito ang self-signed certificate dahil ang SSH layer ang nagbibigay ng aktuwal na proteksyon. Isara ang SSH session at mawawala ang access sa Webmin. Walang kailangang i-allowlist, walang nakalantad, at walang karagdagang service na kailangang i-harden.
Kung i-set mo ang bind=127.0.0.1 at makalimutan ang tunnel, hihinto lang ang remote access. Ibig sabihin, gumagana ang feature at hindi ito fault. I-recover ito sa parehong paraan tulad ng Option A: mula sa console, alisin ang linyang bind o i-set ang bind=0.0.0.0, saka mag-restart. Ito rin ang tunnelling habit na gagamitin mo para ma-access ang remote development box na nagpapatakbo ng Claude Code sa tmux, isang SSH session lamang, lahat private, at walang karagdagang nakikinig sa public interface.
Palitan ang self-signed certificate ng totoong certificate
Kung inilalantad mo ang Webmin sa isang hostname gamit ang Option A, alisin ang browser warning sa pamamagitan ng totoong Let's Encrypt certificate. Kailangan mo ng DNS name, halimbawa panel.example.com, na may A record na nakaturo sa server, at ng serbisyong sumasagot sa port-80 HTTP challenge habang isinasagawa ang validation.
May built-in na feature ang Webmin para rito: Webmin, pagkatapos ay Webmin Configuration, pagkatapos ay SSL Encryption, pagkatapos ay ang Let's Encrypt tab. Ilagay ang hostname, ituro ang "website root directory" sa path na sine-serve sa port 80 para sa domain na iyon, at mag-request. Kukunin ng Webmin ang certificate, awtomatikong ia-update ang certfile= at keyfile= lines sa miniserv.conf, at awtomatikong ire-renew ito bago mag-expire. I-reload ang page at mawawala na ang warning sa padlock.
Ang isang mahalagang limitasyon: tumatakbo ang sariling server ng Webmin sa 10000, hindi sa 80. Kaya kailangan ng http-01 challenge ng aktuwal na web server, Apache o nginx, na sumasagot para sa panel.example.com sa port 80, o ng DNS-based validation. Sa isang Webmin-only na box na walang tumatakbo sa port 80, mabibigo ang request na may validation error hanggang mabigyan mo ang Let's Encrypt ng paraan para maabot ang challenge file. Pareho ang mechanics, DNS records, port-80 challenge, at renewal sa pag-isyu ng certificate para sa anumang website. Kung kailangan mo ng background tungkol dito, detalyadong ipinapaliwanag ng guide sa Let's Encrypt TLS certificates gamit ang Certbot at nginx ang validation flow at DNS setup. Kung SSH-tunnel route ang ginamit mo, maaari mong laktawan nang buo ang section na ito: ayos lang ang self-signed certificate kapag nasa likod ito ng SSH, at ang totoong certificate na inisyu para sa panel.example.com ay magpapakita pa rin ng name-mismatch warning kapag binisita mo ang https://localhost:10000.
I-on ang two-factor authentication
Hindi sapat ang password lamang na proteksyon para sa root panel, kaya magdagdag ng second factor. Buksan ang Webmin, pagkatapos ay Webmin Configuration, at pagkatapos ay Two-Factor Authentication. Piliin ang Google Authenticator provider. Standard TOTP ito, kaya gumagana ito sa Authy, 1Password, o anumang authenticator app. Pagkatapos, i-save ang configuration. Ini-install ng Webmin ang maliit na Perl module na kailangan nito (Authen::OATH pati isang QR generator) at ino-on ang feature. Hindi pa napoprotektahan ng hakbang na ito ang anumang account.
Ine-enrol naman ng bawat account ang sarili nitong device. Kapag naka-enable na ang 2FA, buksan ang Webmin, pagkatapos ay Webmin Users, piliin ang account, at piliin ang Enable Two-Factor For User. Magpapakita ang Webmin ng QR code. I-scan ito gamit ang app at maglagay ng isang generated code para kumpirmahin. Mula noon, hihingin ng login ang six-digit token pagkatapos ng password. Mag-enrol bago mag-logout. Kung required ang 2FA pero hindi pa nakapag-scan ng code ang iyong account, maaari mo pa ring alisin ang requirement mula sa console, pero mas kaunting abala kung mag-enrol ka muna.
Magdagdag ng Fail2ban para i-ban ang mga brute-force login
Kahit restricted ang login endpoint, dapat parusahan ang paulit-ulit na failed attempt. Iniuulat ng Webmin ang mga failed login sa syslog sa anyong webmin[12345]: Invalid login as root from 10.0.0.9, o Non-existent login as ... kapag ang username ay hindi man lang Unix account. Sa Ubuntu 24.04, napupunta ang mga linyang ito sa systemd journal dahil walang /var/log/auth.log ang stock image. May stock webmin-auth filter ang Fail2ban na eksaktong tumutugma sa dalawang linyang ito. Itinatakda mismo ng jail sa ibaba ang backend = systemd, kaya hindi nito kailangan ng custom regex o log path.
Gumawa ng /etc/fail2ban/jail.d/webmin.local:
[webmin-auth]
enabled = true
port = 10000
filter = webmin-auth
backend = systemd
maxretry = 4
bantime = 1hI-reload gamit ang sudo systemctl restart fail2ban, pagkatapos ay kumpirmahing aktibo ang jail:
sudo fail2ban-client status webmin-authDapat mong makita ang jail sa listahan na may ban counter na zero sa simula. Sa journal backend, walang File list: line. Para subukan ang buong wiring, sadyang mag-fail ng login nang ilang beses mula sa ibang network. Pagkatapos, patakbuhin muli ang status command at i-monitor ang pagtaas ng Currently banned. Kung hindi ito tumataas, tiyaking hindi ka nagte-test mula sa address na nasa ignoreip ng Fail2ban. Patakbuhin din ang journalctl SYSLOG_IDENTIFIER=webmin sa server upang kumpirmahing aktuwal na naisusulat ang mga Invalid login line. Kung hindi pa naka-install ang Fail2ban sa server na ito, saklaw ng Fail2ban on Ubuntu 24.04 para sa SSH guide ang installation at ang SSH jail na dapat mong patakbuhin kasabay nito.
Limitahan kung ano ang maaaring galawin ng bawat Webmin user
Hindi lahat ng nangangailangan ng panel ay nangangailangan ng root access sa lahat. Sa ilalim ng Webmin, pagkatapos ay Webmin Users, gumawa ng karagdagang Webmin logins at bigyan ang bawat isa ng mga module na kailangan lamang nito. Halimbawa, maaaring ang backups operator ay makakita lamang ng cron at filesystem modules. Kapag nag-edit ng user, makikita ang checklist ng bawat module. Kapag inalis ang check sa isang module, aalisin ito sa menu ng user at iba-block ang mga kaugnay na URL. Bahagi ito ng defense in depth: kahit manakaw ang isang low-privilege Webmin session, hindi nito maaaring baguhin ang /etc/shadow kapag wala sa listahan nito ang Users module.
Pagpapanatiling updated ng Webmin
Dahil nag-install ka mula sa apt repository, kumukuha ang sudo apt update && sudo apt upgrade ng mga bagong Webmin release kasabay ng iba pang bahagi ng system. Mag-install agad ng mga patch dahil paboritong target ang control panel. Maaari ring mag-update ang Webmin mula sa Webmin, pagkatapos ay Webmin Configuration, pagkatapos ay Upgrade Webmin, pero mas maayos ang apt path sa Ubuntu dahil nananatiling consistent ang mga version sa iba mong package management. Huwag itong ituring na optional: ilang nakaraang Webmin CVE ang mga bug na nagdudulot ng remote code execution, at ang tanging pagitan ng “patched” at “breached” ay kung gaano kabilis isinagawa ng admin ang upgrade.
Mga failure mode, kasama ang mga string na makikita mo
"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. Ipinapakita ito sa unang pag-load. Dahilan: walang trusted issuer ang self-signed certificate na ginawa ng Webmin noong installation. Hindi ito nangangahulugang may attack; encrypted ang channel, pero walang third party na nag-verify nito. Para ayusin: lampasan muna ang warning, pagkatapos ay mag-issue ng tunay na Let's Encrypt certificate. Maaari mo rin itong permanenteng tanggapin kung ina-access mo ang Webmin sa pamamagitan ng SSH tunnel.
"This web server is running in SSL mode. Try the URL https://..." Ang na-type mo ay http://server:10000. TLS lamang ang sinusuportahan ng miniserv sa port na iyon, kaya ipinapaalam nito ito sa plain text. Para ayusin: palitan ang http ng https sa address bar.
Nagti-time out ang page, ERR_CONNECTION_TIMED_OUT / "This site can't be reached". Hindi nakararating sa Webmin ang request. Sa Ubuntu, halos palaging ufw ang nagda-drop ng port 10000. Kumpirmahin gamit ang sudo ufw status; kung hindi nakalista ang 10000, maaari mo itong buksan gamit ang sudo ufw allow 10000/tcp o, mas mabuti, panatilihing sarado at gamitin ang SSH tunnel mula sa Option B. Mahalagang magkaiba ang mga ito: ang timeout ay nangangahulugang tahimik na dina-drop ng firewall ang mga packet, samantalang ang ERR_CONNECTION_REFUSED ay nangangahulugang reachable ang port pero hindi tumatakbo ang Webmin; tingnan ang sudo systemctl status webmin.
"Access denied for <your IP>." Nag-set ka ng IP Access Control sa ilalim ng Option A, at wala sa allow list ang kasalukuyan mong address. Posible ring dynamic IP ito na nagbago, o may typo. Walang paraan para makabalik gamit ang browser. Para ayusin mula sa console: i-edit ang linyang allow= sa /etc/webmin/miniserv.conf, itama o tanggalin ito, at patakbuhin ang sudo systemctl restart webmin.
"Login failed. Please try again." kahit tama ang credentials na alam mong tama. Walang Unix password ang account, na karaniwan sa key-only cloud images. Nag-a-authenticate ang Webmin sa pamamagitan ng PAM laban sa Unix password, at walang ganoong password ang user. Para ayusin: patakbuhin ang sudo passwd youruser sa server, pagkatapos ay mag-log in. Kung ipinapakita ng /var/webmin/miniserv.log ang Non-existent login as ..., username ang tina-type mo na hindi talaga Unix account.
Kung higit sa ilang server ang mina-manage mo, mas mahusay mag-scale ang automation kaysa mag-install ng control panel sa bawat box: doon nagsisimula ang una mong Ansible playbook.
FAQ
Ligtas bang ilantad ang Webmin sa public internet?
Ituring ang Webmin na nakaharap sa internet bilang root shell na may login page, dahil iyon mismo ang aktuwal nitong ginagawa. Sapat lamang ang kaligtasan nito kapag gumagamit ng maraming layer: tunay na certificate, two-factor authentication, Fail2ban, at mahigpit na IP allowlist o, mas mabuti, walang public exposure. Ang setup na may pinakamababang risk ay ang pag-bind ng Webmin sa 127.0.0.1 at pag-access dito sa pamamagitan ng SSH tunnel, kaya walang makakakonekta sa port 10000 mula sa open internet.
Paano ko aalisin ang certificate warning ng Webmin?
Lumilitaw ang warning (NET::ERR_CERT_AUTHORITY_INVALID) dahil nagre-release ang Webmin ng self-signed certificate. Mag-issue ng tunay na certificate mula sa Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt, gamit ang DNS name na nakaturo sa server at may service na sumasagot sa port-80 challenge para sa validation. Kung ina-access mo ang Webmin gamit lamang ang SSH tunnel papunta sa localhost, hindi mapanganib ang warning. Ini-encrypt at ina-authenticate na ng SSH ang connection, kaya ligtas mong maaaring tanggapin ang self-signed certificate.
Paano ko lilimitahan ang Webmin sa IP address ko lamang?
Pumunta sa Webmin, Webmin Configuration, IP Access Control, piliin ang "Only allow from listed addresses", at ilagay ang public IP mo mula sa curl ifconfig.me. Ini-store ito ng Webmin sa allow= line ng /etc/webmin/miniserv.conf. Mag-ingat sa dynamic home IP: kapag nagbago ito, mawawalan ka ng access at kailangan mong ayusin ang allow= line mula sa server console. Sa aktuwal na paggamit, mas maaasahan ang static address o ang SSH-tunnel method.
Bakit nabibigo ang login ko kahit tama ang password?
Nag-a-authenticate ang Webmin sa pamamagitan ng PAM laban sa Unix password mo. Karaniwang key-only ang cloud images at walang naka-set na password sa default account, kaya walang maitutugma ang PAM at nire-reject ang login. Patakbuhin ang sudo passwd youruser sa server upang mag-set ng password, saka mag-login. Kapag may Non-existent login as ... line sa /var/webmin/miniserv.log, nangangahulugan itong hindi totoong Unix account ang username mismo.
Para saan ang Webmin kumpara sa plain SSH?
Ang Webmin ay layer para mas madaling matuklasan at gamitin ang mga administration function. Praktikal ito para sa pag-browse ng log files, pag-manage ng users at cron, pag-edit ng firewall rules, at pagtingin sa disk at service state nang hindi kailangang kabisado ang bawat command. Kapaki-pakinabang ito para sa mga admin na paminsan-minsan lamang nag-aasikaso o sa mga team na magkakaiba ang skill level. Mas mabilis, mas madaling i-script, at mas maliit ang attack surface ng plain SSH para sa routine work. Maraming admin ang gumagamit ng pareho: SSH para sa araw-araw na administration, at Webmin na naka-bind sa localhost sa likod ng tunnel para sa paminsan-minsang point-and-click na gawain. Kung ang tunay mong tanong ay kung aling panel ang pipiliin, sa halip na panel laban sa shell, sulit munang timbangin ang Cockpit kumpara sa Webmin, dahil magkaiba ang lawak ng system na maaaring baguhin ng bawat isa at kung paano ka ina-authenticate ng mga ito.