SSD Nodes Learn
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-07-24

Jinsi ya kusakinisha Webmin kwenye Ubuntu 24.04

Sakinisha Webmin kwenye Ubuntu 24.04 na uimarische kwa kutumia Let's Encrypt, Fail2ban, na SSH tunnel ili kulinda port 10000 dhidi ya uvamizi wa seva.

Unachojenga

Webmin ni paneli ya udhibiti wa wavuti inayoweka kiolesle cha kivinjari kwenye seva nzima ya Linux — watumiaji, vifurushi, kazi za cron, firewall, Apache, BIND, diski, na moduli nyingine mia moja — inayofikiwa kupitia HTTPS kwenye port 10000. Ufungaji wenyewe unahusisha amri tatu na huchukua takriban dakika moja. Sababu ya mwongozo huu kutumia sehemu kubwa ya maelezo katika nusu ya pili ni kwamba Webmin huingia kama root na inaweza kufanya kila kitu ambacho root anaweza kufanya. Webmin iliyo wazi au isiyo na uthibitisho wa utambulisho si "hatari ya kudhibiti"; ni uvamizi kamili wa seva wenye ukurasa wa kuingia mbele yake. Kwa hivyo, iweke ndani ya dakika kumi, kisha tumia muda uliobakia kuhakikisha kuwa ni wewe pekee unayeweza kuifikia.

Mahitaji ya awali na onyo la muhimu

Mfumo mpya wa Ubuntu 24.04 KVM VPS wenye root au mtumiaji wa sudo. Webmin inatumia Perl na ni nyepesi — RAM ya 1 GB inatosha na inatumia chini ya gigabaiti 0.25 wakati ikiwa imetulia. Inasikiliza kwenye TCP 10000 kupitia seva yake ya web iliyojumuishwa (miniserv.pl), si Apache au nginx, hivyo hakuna kitu kingine kinachohitaji kusakinishwa kwanza.

Mambo mawili ya kuamua kabla ya kuanza. Kwanza, akaunti utakayotumia kuingia: Webmin hutumia akaunti za Unix kupitia PAM, hivyo unaingia kama root au mtumiaji aliye kwenye kikundi cha sudo kwa kutumia nywila ya Unix ya akaunti hiyo. Picha za cloud (cloud images) kwa kawaida hutumia funguo (keys) tu na hazina nywila iliyowekwa kwenye mtumiaji wa kawaida, na Webmin hawezi kuingia kwenye akaunti isiyo na nywila. Weka nywila kwa kutumia sudo passwd youruser kwanza, vinginevyo utafeli kuingia hata ukiandika nini.

Pili, na hili ndilo onyo: usifungue tu port 10000 kwa mtandao wa internet na kuacha. Amua sasa kama utafikia Webmin kupitia SSH tunnel (inapendekezwa, hakuna kitu kinachowaziwa) au uliwekee mipaka kwa IP yako mwenyewe. Uamuzi huo pekee unaamua kila hatua inayofuata, hivyo soma chaguo zote mbili kabla ya kugusa firewall.

Sakinisha Webmin kutoka kwenye repository rasmi

Webmin hutoa repository ya apt iliyosainiwa. Script ya usanidi huongeza repository hiyo na ufunguo wake wa GPG. Hii inaruhusu apt upgrade zijazo kupata Webmin kama kifurushi kingine chochote. Utapata sasisho zilizothibitishwa badala ya kupakua .deb ambayo haijatimizwa.

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

Script itaonyesha hatua inayofuata na kuuliza Setup repository? (y/N) — jibu y. Ukimaliza, sakinisha kifurushi. Flag ya --install-recommends huvuta utegemezi wa Perl na SSL ili kuzuia makosa ya library baadaye.

sudo apt-get install --install-recommends webmin

Webmin imebadilisha jina la script hii hapo awali — mwongozo wa zamani unataja setup-repos.sh. Ikiwa URL inatoa kosa la 404, chukua command mpya moja kwa moja kutoka webmin.com/download. Usitegemee jina la zamani. Usakinishaji sahihi huisha na mstari kama Webmin install complete. You can now login to https://your-host:10000/ as root. Huduma imewashwa na inafanya kazi, faili ya usanidi ipo chini ya /etc/webmin, maombi yanarekodiwa kwenye /var/webmin/miniserv.log, na logins zinazoshindwa huenda kwenye syslog — kwenye Ubuntu 24.04, kwenye systemd journal.

Hakikisha huduma inafanya kazi na inasikiliza kabla ya kufungua kivinjari:

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

Unahitaji hali ya active (running) na mstari unaoonyesha miniserv.pl iliyounganishwa na 0.0.0.0:10000 — anwani hiyo itabadilika kuwa 127.0.0.1:10000 utapotumia njia ya tunnel hapa chini. Ikiwa ss haionyeshi chochote kwenye port 10000, Webmin haikuwaka; soma journalctl -u webmin -n 50 kabla ya kuendelea.

Ingia kwa mara ya kwanza, na onyo la cheti

Elekeza kivinjari chako kwenye https://YOUR_SERVER_IP:10000. Mambo mawili hutokea kwenye mfumo mpya.

Ikiwa ufw imewashwa — picha ya seva ya Ubuntu huja ikiwa imezimwa, lakini wasambazaji wengi huwasha mapema — ukurasa hautafunguka kabisa, jambo ambalo limefafanuliwa kwenye hali za hitilafu hapa chini. Ikiwa port imefunguliwa, kivinjari chako kitatoa kizuizi kikubwa cha ukurasa: "Your connection is not private" ikiwa na kodi NET::ERR_CERT_AUTHORITY_INVALID kwenye Chrome, au SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" kwenye Firefox. Hii ni hali inayotarajiwa na si uvamizi. Webmin ilitengeneza cheti cha kujisaini (self-signed certificate) wakati wa usakinishaji (/etc/webmin/miniserv.pem), na kwa sababu hakuna mamlaka ya cheti (certificate authority) inayokithitisha, kivinjari kinakataa kukiamini kimya kimya. Muunganisho bado umefichwa (encrypted); haujathibitishwa tu. Bonyeza (Advanced, kisha Proceed) kwa sasa — tutabadilisha cheti hiki ipasavyo baadaye.

Ingia ukitumia root au mtumiaji wako wa sudo na nywila yake ya Unix, kisha utafika kwenye dashboard ya System Information. Makosa ya kawaida hapa ni kuandika http:// badala ya https://. miniserv hujibu HTTP ya kawaida kwenye port hiyo kwa maandishi yale yale "This web server is running in SSL mode. Try the URL https://..." — suluhisho ni kubadilisha http kuwa https kwenye sehemu ya anwani (address bar).

Uamuzi wa usalama: utafikiamaje Webmin?

Sasa sehemu muhimu zaidi. Panel yenye uwezo wa root isipaswe kuwa wazi kwenye mtandao wa internet ili ijibu majaribio ya kuingia kutoka kwa kila skana duniani. Una chaguo mbili salama, kwa kufuata mpangilio wa upendeleo.

SSH tunnel katika Option B ndiyo bora zaidi, kwa sababu haionyeshi kitu chochote. IP allowlist katika Option A inakubalika ikiwa anwani yako ni static. Kutofanya lolote kati ya hayo ni kosa ambalo mwongozo huu unalenga kuliepuka. Ikiwa ungependa kufikia Webmin kupitia mtandao binafsi badala ya chaguo hizi, weka seva nyuma ya self-hosted WireGuard VPN na uunganishe Webmin kwenye anwani ya tunnel badala ya anwani ya umma.

Chaguo A: weke mipaka ya Webmin kwa IP yako

Kwenye jopo, fungua Webmin, kisha Webmin Configuration, kisha IP Access Control. Chagua "Only allow from listed addresses" na uweke IP yako ya umma, ambayo unaweza kuipata kwa kuendesha curl ifconfig.me kwenye laptop yako. Hifadhi. Webmin huandika hii kwenye mstari wa allow= ndani ya /etc/webmin/miniserv.conf na kujizima na kuwaka tena.

Changamoto: ikiwa IP yako ya nyumbani ni dynamic na inabadilika, au ukiandika anwani kimakosa, utajifunga nje. Kivinjari (browser) kitaonyesha "Access denied for <your IP>" na bila fomu ya kuingia, na hakuna njia ya kurudi kupitia tovuti. Unaweza kurekebisha kupitia console ya server kwa kutumia SSH au VNC ya mtoa huduma wako:

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

Kufuta mstari wa allow= hurudisha ufikiaji wa wazi kabisa, hivyo fanya hivyo kwa ajili ya kurejesha tu, kisha weka thamani sahihi mara moja.

Chaguo B: funga kwenye localhost na utumie tunnel kupitia SSH (inapendekezwa)

Ni bora kuliko kutumia allowlist kutokufanya miniserv isikilize kwenye interface ya umma kabisa. Iambie miniserv ifunge kwenye loopback pekee, kisha uifikie kupitia tunnel ya SSH iliyosimbwa ambayo tayari unaamini.

Hariri /etc/webmin/miniserv.conf na uongeze, au ubadilishe, mstari mmoja:

bind=127.0.0.1

Anzisha tena kwa kutumia sudo systemctl restart webmin. Webmin sasa haifikiki kutoka kwenye internet — port scan ya 10000 haipati kitu, na ukaguzi wa ss uliopita sasa unaonyesha imefungwa kwenye 127.0.0.1:10000. Kutoka kwenye laptop yako, fungua tunnel:

ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IP

Acha hiyo session ikiwa wazi na ufungue https://localhost:10000. Trafiki inapita ndani ya SSH, ambayo tayari imethibitishwa na funguo yako na imesimbwa, hivyo unaweza kukubali cheti cha self-signed hapa kwa usalama — tabaka la SSH ndilo linalofanya ulinzi halisi. Funga session ya SSH na Webmin itatoweka. Hakuna cha kuweka kwenye allowlist, hakuna kilichofichuliwa, na hakuna huduma ya ziada ya kuimarisha.

Ukiseti bind=127.0.0.1 na ukasahau tunnel, ufikiaji wa mbali utasimama — hiyo ni kazi ya mfumo, siyo hitilafu. Rudia kwa njia kama Option A: kutoka kwenye console, ondoa mstari wa bind au seti bind=0.0.0.0, kisha anza upya. Hii ni tabia ile ile ya kutumia tunneling unayotumia kuifikia box ya maendeleo ya mbali inayotumia Claude Code kwenye tmux — session moja ya SSH, kila kitu ni cha siri, hakuna huduma nyingine inayosikiliza kwenye interface ya umma.

Badilisha cheti cha self-signed na cheti halisi

Ikiwa unaweka Webmin kwenye hostname chini ya Option A, ondoa onyo la kivinjari kwa kutumia cheti halisi cha Let's Encrypt. Unahitaji jina la DNS — kwa mfano panel.example.com — lenye A record inayoelekeza kwenye seva, na kitu kinachojibu http challenge kwenye port-80 wakati wa uthibitisho.

Webmin ina sehemu hii iliyojengwa ndani: Webmin, kisha Webmin Configuration, kisha SSL Encryption, kisha tab ya Let's Encrypt. Ingiza hostname, elekeza "website root directory" kwenye njia inayohudumiwa kwenye port 80 kwa domain hiyo, kisha omba. Webmin itapata cheti, itafanya marekebisho kwenye mistari ya certfile= na keyfile= ndani ya miniserv.conf kwa ajili yako, na itafanya upya cheti hicho kiweze kujiidhinisha kabla hakijaisha muda wake. Pakia upya ukurasa na alama ya kufuli itakuwa safi.

Changamoto moja: seva ya Webmin inafanya kazi kwenye port 10000, si 80, hivyo http-01 challenge inahitaji seva ya web halisi — Apache au nginx — inayojibu kwa panel.example.com kwenye port 80, au uthibitisho unaotegemea DNS. Kwenye seva inayotumia Webmin pekee bila kitu kwenye port 80, ombi litashindwa kwa kosa la uthibitisho hadi utakapompa Let's Encrypt njia ya kufikia faili ya challenge. Hatua hizi — rekodi za DNS, port-80 challenge, na upyaisho — ni sawa na kutoa cheti kwa tovuti yoyote. Ikiwa unataka maelezo zaidi, mwongozo wa Let's Encrypt TLS certificates kwa kutumia Certbot na nginx unaelezea mchakato wa uthibitisho na mipangilio ya DNS kwa undani. Ikiwa ulitumia njia ya SSH-tunnel unaweza kuruka sehemu hii kabisa: cheti cha self-signed ni sawa nyuma ya SSH, na cheti halisi kilichotolewa kwa panel.example.com litatoa tu onyo la kutofautiana kwa jina (name-mismatch) unapofungua https://localhost:10000.

Washa uthibitishaji wa hatua mbili

Nywila pekee hutoa ulinzi mdogo kwa panel ya root, hivyo ongeza hatua ya pili. Fungua Webmin, kisha Webmin Configuration, kisha Two-Factor Authentication. Chagua mtoa huduma wa Google Authenticator — huu ni TOTP wa kawaida, hivyo hufanya kazi na Authy, 1Password, au programu yoyote ya uthibitishaji — kisha hifadhi. Webmin husakinisha moduli ndogo ya Perl inayohitajika (Authen::OATH pamoja na mtoa msimbo wa QR) na kuwasha kipengele hicho; hatua hii pekee bado haulindi akaunti yoyote.

Kila akaunti kisha huunganisha kifaa chake. Kwa 2FA ikiwa imewashwa, fungua Webmin, kisha Webmin Users, chagua akaunti, chagua Enable Two-Factor For User, na Webmin itaonyesha msimbo wa QR; uskani msimbo huo kwa programu na uingize msimbo mmoja uliotengenezwa ili kuthibitisha. Kuanzia wakati huo, kuingia kutahitaji tokeni ya tarakimu sita baada ya nywila. Usajili kabla ya kutoka — ikiwa 2FA inahitajika lakini akaunti yako haijawahi kuskani msimbo, unaweza bado kuondoa hitaji hilo kutoka kwenye console, lakini ni rahisi zaidi kusajili kwanza.

Ongeza Fail2ban ili kuzuia uvamizi wa login (brute-force)

Hata sehemu ya login iliyowekwa vizuizi inapaswa kutoa adhabu kwa majaribio ya kushindwa mara nyingi. Webmin hutoa taarifa za login zilizoshindwa kwenye syslog kwa mfumo wa webmin[12345]: Invalid login as root from 10.0.0.9, au Non-existent login as ... kwa jina la mtumiaji ambalo si akaunti ya Unix — kwenye Ubuntu 24.04 mistari hiyo inaingia kwenye systemd journal, kwa sababu picha ya kawaida haina /var/log/auth.log. Fail2ban inakuja na webmin-auth inayofanana na mistari hiyo miwili, na jail iliyo chini inajiset backend = systemd yenyewe, hivyo haihitaji regex au njia ya log iliyobadilishwa.

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

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

Pakia upya kwa kutumia sudo systemctl restart fail2ban, kisha thibitisha kuwa jail inafanya kazi:

sudo fail2ban-client status webmin-auth

Unapaswa kuona jail ikiorodheshwa ikiwa na kishazi cha ban (ban counter) cha sifuri mwanzoni (kwenye journal backend hakuna mstari wa File list:). Ili kuthibitisha mfumo mzima, jaribu kushindwa login kwa makusudi mara kadhaa kutoka mtandao mwingine, kisha endesha tena amri ya status na uangalie Currently banned ikiongezeka. Ikiwa haiongezeki, hakikisha hautumii anwani iliyo kwenye ignoreip ya Fail2ban, na endesha journalctl SYSLOG_IDENTIFIER=webmin kwenye seva ili kuthibitisha kuwa mistari ya Invalid login inaandikwa kweli. Ikiwa Fail2ban bado haijawekwa kwenye mashine hii, Mwongozo wa Fail2ban kwenye Ubuntu 24.04 kwa ajili ya SSH unaelezea uwekaji na jail ya SSH unayopaswa kuendesha pamoja na hii.

Zuia kila mtumiaji wa Webmin kufikia sehemu zisizohusika

Sio kila anayehitaji panel anahitaji mamlaka ya root juu ya kila kitu. Chini ya Webmin, kisha Webmin Users, tengeneza akaunti nyingine za Webmin na umpe kila mmoja moduli anazohitaji pekee — kwa mfano, msimamizi wa backups anayeweza kuona moduli za cron na filesystem pekee. Unapohariri mtumiaji, utaona orodha ya moduli zote; ukiondoa alama ya tiki kwenye moduli, itaondolewa kwenye menyu ya mtumiaji huyo na itazuia URL husika. Hii ni mbinu ya ulinzi wa kina: hata kama kikao cha Webmin chenye mamlaka madogo kitaibiwa, hakiwezi kuandika upya /etc/shadow ikiwa moduli ya Users haipo kwenye orodha yake.

Kuweka Webmin ikiwa imesasishwa

Kwa sababu umeinstall kutoka kwenye apt repository, sudo apt update && sudo apt upgrade itavuta matoleo mapya ya Webmin pamoja na mfumo wote. Sakinisha patch haraka — control panel ni lengo kuu la mashambulizi. Webmin inaweza pia kujisasisha yenyewe kupitia Webmin, kisha Webmin Configuration, kisha Upgrade Webmin, lakini njia ya apt ni bora zaidi kwenye Ubuntu kwa sababu inafanya matoleo yawe sawa na usimamizi wako mwingine wa package. Usichukulie hili kama hiari: CVE kadhaa za Webmin hapo awali zilikuwa bugs za remote-code-execution, na tofauti kati ya "patched" na "compromised" ilikuwa ni kasi ambayo admin alitekeleza upgrade.

Njia za kushindwa, pamoja na maandishi utakayoyaona

"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. Huonekana wakati wa kupakia ukurasa kwa mara ya kwanza. Sababu: cheti cha self-signed kilichozalishwa na Webmin wakati wa usakinishaji hakina mtoa huduma anayeaminika. Hii si shambulio; chaneli imefichwa kwa siri, lakini haijathibitishwa. Suluhisho: endelea kupitia onyo hilo kwa sasa, kisha utoe cheti halisi cha Let's Encrypt, au ukubali hali hiyo kudumu ikiwa unafikia Webmin kupitia SSH tunnel.

"This web server is running in SSL mode. Try the URL https://..." Umeandika http://server:10000. miniserv inatumia TLS pekee kwenye port hiyo na inakuambia hivyo kwa maandishi wazi. Suluhisho: badilisha http kuwa https kwenye sehemu ya anwani (address bar).

Ukurasa unachukua muda mrefu — ERR_CONNECTION_TIMED_OUT / "This site can't be reached". Ombi halifikiriki Webmin. Kwenye Ubuntu, hii mara nyingi ni ufw inayozuia port 10000. Hakiki kwa kutumia sudo ufw status; ikiwa 10000 haipo kwenye orodha, fungua kwa kutumia sudo ufw allow 10000/tcp au, bora zaidi, iache ikiwa imefungwa na utumie SSH tunnel kutoka kwenye Chaguo B. Kumbuka tofauti hii: timeout inamaanisha firewall inafuta paketi bila kutoa taarifa, wakati ERR_CONNECTION_REFUSED inamaanisha port inaweza kufikiwa lakini Webmin haijafanya kazi — kagua sudo systemctl status webmin.

"Access denied for <your IP>." Uliweka IP Access Control chini ya Chaguo A na anwani yako ya sasa haipo kwenye orodha ya kuruhusiwa — IP inayobadilika au makosa ya uandishi. Hakuna njia ya kurudi kupitia kivinjari. Suluhisho kutoka kwenye console: hariri mstari wa allow= kwenye /etc/webmin/miniserv.conf, urekebishe au ufute, kisha run sudo systemctl restart webmin.

"Login failed. Please try again." ukitumia taarifa sahihi. Akaunti haina password ya Unix, jambo ambalo ni la kawaida kwenye cloud images zinazotumia key pekee. Webmin hutumia PAM kuhakiki password ya Unix, na password hiyo haipo kwa mtumiaji huyo. Suluhisho: run sudo passwd youruser kwenye seva, kisha ingia. Ikiwa /var/webmin/miniserv.log inaonyesha Non-existent login as ..., unandika jina la mtumiaji ambalo si akaunti ya Unix kabisa.

Kwa zaidi ya seva chache, mifumo ya kujiendesha (automation) ni bora zaidi kuliko kutumia control panel kwenye kila sanduku: playbook yako ya kwanza ya Ansible ndipo hapo inapoanzia.

FAQ

Je, ni salama kuweka Webmin kwenye mtandao wa umma?

Chukulia Webmin inayopatikana kwenye mtandao kama root shell yenye ukurasa wa kuingia, kwa sababu ndivyo ilivyo. Ni salama kwa kiasi fulani tu ikiwa imewekwa katika hatua mbalimbali: cheti halisi, uthibitisho wa hatua mbili (2FA), Fail2ban, na iwe na orodha imara ya IP inayoruhusiwa au, bora zaidi, isionekane kabisa kwenye mtandao. Mpangilio wenye hatari ndogo zaidi ni kuunganisha Webmin na 127.0.0.1 na kuifikia kupitia SSH tunnel, hivyo port 10000 haitaitikia mtu yeyote kwenye mtandao wa wazi.

Ninawezaje kuondoa onyo la cheti cha Webmin?

Onyo (NET::ERR_CERT_AUTHORITY_INVALID) hutokea kwa sababu Webmin inakuja na cheti kilichojisaini (self-signed). Toa cheti halisi kutoka Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt, ukitumia jina la DNS linaloelekeza kwenye seva na huduma inayoshughulikia port-80 kwa ajili ya uthibitisho. Ikiwa unafikia Webmin kupitia SSH tunnel kwenda localhost pekee, onyo hilo halina madhara — SSH tayari inasimba na kuthibitisha muunganisho — na unaweza kukubali cheti hicho kilichojisaini kwa usalama.

Ninawezaje kuweka mipaka ya Webmin ili itumike na IP yangu tu?

Nenda kwenye Webmin, Webmin Configuration, IP Access Control, chagua "Only allow from listed addresses", na uweke IP yako ya umma kutoka curl ifconfig.me. Webmin huhifadhi hii kwenye mstari wa allow= ndani ya /etc/webmin/miniserv.conf. Kuwa mwangalifu na IP ya nyumbani inayobadilika: ikiibadilisha utafungiwa nje na utapaswa kurekebisha mstari wa allow= kutoka kwenye console ya seva, hivyo anwani ya kudumu au njia ya SSH-tunnel ni ya kuaminika zaidi kiutendaji.

Kwa nini kuingia kwangu kunafeli hata nikitumia nywila sahihi?

Webmin hutumia PAM kuthibitisha nywila yako ya Unix, na picha za wingu (cloud images) kwa kawaida huwa na funguo pekee bila nywila iliyowekwa kwenye akaunti ya msingi — hivyo hakuna kitu ambacho PAM kinaweza kukilinganisha na kuingia hukataliwa. Run sudo passwd youruser kwenye seva ili kuweka nywila, kisha ingia. Mstari wa Non-existent login as ... kwenye /var/webmin/miniserv.log unamaanisha kuwa jina la mtumiaji lenyewe si akaunti halisi ya Unix.

Webmin ina faida gani ikilinganishwa na SSH ya kawaida?

Webmin ni tabaka la urahisi na urahisi wa kutafuta vitu. Ni muhimu kwa kupitia faili za log, kusimamia watumiaji na cron, kuhariri sheria za firewall, na kuona hali ya diski na huduma bila kukariri kila amri — ni rahisi kwa wasimamizi wa mara kwa mara au timu zenye ujuzi mchanganyiko. SSH ya kawaida ni ya haraka zaidi, inaweza kuandikwa kwa script, na ina eneo dogo la kushambuliwa kwa kazi za kawaida. Wasimamizi wengi hutumia zote mbili: SSH kwa kazi za kila siku, na Webmin iliyounganishwa na localhost nyuma ya tunnel kwa kazi za mara kwa mara za kubofya.