Ubuntu 24.04 पर Webmin कैसे install करें
Ubuntu 24.04 पर Webmin install करें और port 10000 को सुरक्षित बनाएं। इसमें Let's Encrypt, 2FA और Fail2ban का उपयोग करके server को सुरक्षित करना सीखें।
आप क्या बना रहे हैं
Webmin एक web control panel है जो पूरे Linux server के लिए browser front end प्रदान करता है — इसमें users, packages, cron jobs, firewall, Apache, BIND, disks और सौ अन्य modules शामिल हैं — जिन्हें port 10000 पर HTTPS के माध्यम से एक्सेस किया जा सकता है। इसकी installation में केवल तीन commands लगते हैं और इसमें लगभग एक मिनट का समय लगता है। इस guide का दूसरा आधा हिस्सा लंबा होने का कारण यह है कि Webmin root के रूप में login करता है और वह सब कुछ कर सकता है जो root कर सकता है। यदि Webmin बिना authentication के खुला रहता है, तो यह केवल "एक जोखिम" नहीं है; यह एक पूर्ण server compromise है जिसके सामने एक login page लगा है। इसलिए इसे दस मिनट में install करें, और फिर बाकी का एक घंटा यह सुनिश्चित करने में बिताएं कि केवल आप ही इसे एक्सेस कर सकें।
Prerequisites और एक महत्वपूर्ण चेतावनी
एक नया Ubuntu 24.04 KVM VPS, जिसमें root या sudo user हो। Webmin Perl पर आधारित और हल्का है — 1 GB RAM पर्याप्त है और idle होने पर यह एक quarter GB से भी कम जगह लेता है। यह अपने स्वयं के bundled web server (miniserv.pl) के माध्यम से TCP 10000 पर listen करता है, Apache या nginx पर नहीं, इसलिए पहले से कुछ भी install करने की आवश्यकता नहीं है।
शुरू करने से पहले दो निर्णय लेना आवश्यक है। पहला, वह account जिससे आप log in करेंगे: Webmin, PAM के माध्यम से Unix accounts के साथ authenticate करता है, इसलिए आप root या sudo group के किसी user के रूप में उस account के Unix password का उपयोग करके log in करेंगे। Cloud images में आमतौर पर default user के लिए केवल key होती है और कोई password सेट नहीं होता है, और Webmin बिना password वाले account से log in नहीं कर सकता। पहले sudo passwd youruser के साथ password सेट करें, अन्यथा आप जो भी टाइप करेंगे login विफल हो जाएगा।
दूसरा, और यह चेतावनी है: port 10000 को सीधे internet के लिए open करके न छोड़ें। अभी तय करें कि क्या आप Webmin तक SSH tunnel के माध्यम से पहुँचेंगे (अनुशंसित, कुछ भी expose नहीं होगा) या इसे केवल अपने स्वयं के IP तक सीमित रखेंगे। यह एक निर्णय नीचे के हर step को प्रभावित करेगा, इसलिए firewall को छूने से पहले दोनों options को पढ़ लें।
Official repository से Webmin install करें
Webmin एक signed apt repository प्रदान करता है। Setup script इस repo और इसकी GPG signing key को add कर देता है। इससे भविष्य में होने वाले apt upgrade runs में Webmin अन्य packages की तरह pull हो जाएगा। आपको authenticated updates मिलेंगे, न कि कोई downloaded .deb जो खुद को patch नहीं कर पाता।
curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.shScript यह बताएगा कि वह क्या करने वाला है और Setup repository? (y/N) पूछेगा — y का उत्तर दें। पूरा होने पर, package install करें। --install-recommends flag common Perl और SSL module dependencies को pull करता है ताकि बाद में individual modules में missing-library errors न आएं।
sudo apt-get install --install-recommends webminWebmin ने पहले इस script का नाम बदला है — पुराने guides में setup-repos.sh का संदर्भ मिलता है — इसलिए यदि raw URL 404 error दे, तो किसी पुराने नाम पर निर्भर रहने के बजाय webmin.com/download से current one-liner लें। सही installation Webmin install complete. You can now login to https://your-host:10000/ as root जैसी line के साथ समाप्त होता है। Service enabled और running है, config /etc/webmin में रहती है, requests /var/webmin/miniserv.log में log होती हैं, और failed logins syslog में जाते हैं — Ubuntu 24.04 पर, ये systemd journal में जाते हैं।
Browser खोलने से पहले confirm करें कि यह वास्तव में up और listening है:
sudo systemctl status webmin --no-pager
sudo ss -tlnp | grep 10000आपको active (running) status और miniserv.pl को 0.0.0.0:10000 से bound दिखाने वाली line चाहिए — नीचे दिए गए tunnel route का उपयोग करने पर वह address 127.0.0.1:10000 में बदल जाएगा। यदि ss पोर्ट 10000 पर कुछ भी नहीं दिखाता है, तो Webmin start नहीं हुआ है; आगे बढ़ने से पहले journalctl -u webmin -n 50 पढ़ें।
पहला login, और certificate warning
अपने browser को https://YOUR_SERVER_IP:10000 पर point करें। एक नए box पर दो चीजें होती हैं।
यदि ufw active है — Ubuntu का अपना server image इसे inactive रखता है, लेकिन कई providers इसे pre-enable रखते हैं — तो page load नहीं होगा, जिसका विवरण नीचे failure modes में दिया गया है। यदि port open है, तो आपका browser full-page block दिखाएगा: Chrome में NET::ERR_CERT_AUTHORITY_INVALID code के साथ "Your connection is not private", या Firefox में SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead"। यह अपेक्षित है और कोई security breach नहीं है। Webmin ने install करते समय एक self-signed certificate (/etc/webmin/miniserv.pem) generate किया है, और क्योंकि कोई certificate authority इसकी पुष्टि नहीं करती है, browser चुपचाप इस पर भरोसा करने से मना कर देता है। Connection अभी भी encrypted है; बस इसकी पुष्टि नहीं की गई है। अभी के लिए आगे बढ़ें (Advanced, फिर Proceed) — हम आगे चलकर इस certificate को सही ढंग से replace करेंगे।
root या अपने sudo user और उसके Unix password के साथ log in करें, और आप System Information dashboard पर पहुँच जाएंगे। यहाँ एक सामान्य गलती https:// के बजाय http:// टाइप करना है। miniserv उस port पर plain HTTP पर ठीक यह text देता है: "This web server is running in SSL mode. Try the URL https://..." — इसका समाधान address bar में http को https में बदलना है।
सुरक्षा निर्णय: आप Webmin तक कैसे पहुँचेंगे?
अब सबसे महत्वपूर्ण भाग। एक root-equivalent पैनल को खुले internet पर नहीं होना चाहिए, जहाँ दुनिया के हर scanner से login attempts का सामना करना पड़े। आपके पास प्राथमिकता के क्रम में दो सुरक्षित विकल्प हैं।
Option B में SSH tunnel बेहतर है, क्योंकि यह कुछ भी expose नहीं करता है। यदि आपका address static है, तो Option A में IP allowlist स्वीकार्य है। दोनों में से कुछ भी न करना वही गलती है जिसे यह guide रोकने के लिए बनाई गई है। यदि आप ऊपर दिए गए विकल्पों के बजाय एक private network के माध्यम से Webmin तक पहुँचना चाहते हैं, तो server को self-hosted WireGuard VPN के पीछे रखें और Webmin को public address के बजाय tunnel address पर bind करें।
Option A: Webmin को अपने IP तक सीमित करें
Panel में, Webmin, फिर Webmin Configuration, और फिर IP Access Control खोलें। "Only allow from listed addresses" चुनें और अपना public IP दर्ज करें। आप अपने laptop पर curl ifconfig.me चलाकर अपना IP जान सकते हैं। Save करें। Webmin इसे /etc/webmin/miniserv.conf की allow= line में लिखता है और खुद को restart करता है।
सावधानी: यदि आपका home IP dynamic है और बदल जाता है, या यदि आप address टाइप करने में गलती करते हैं, तो आप खुद को lock out कर लेंगे। Browser फिर "Access denied for <your IP>" दिखाएगा और कोई login form नहीं दिखेगा। वापस जाने के लिए कोई web path नहीं बचेगा। आप इसे SSH या अपने provider के VNC के माध्यम से server console से ठीक कर सकते हैं:
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 webminallow= line को delete करने से access पूरी तरह open हो जाएगा। इसलिए रिकवरी के लिए ही ऐसा करें, और उसके तुरंत बाद सही value सेट करें।
Option B: localhost पर bind करें और SSH के माध्यम से tunnel करें (अनुशंसित)
किसी भी allowlist से बेहतर यह है कि public interface पर listen ही न किया जाए। miniserv को केवल loopback पर bind करने के लिए कहें, फिर एक encrypted SSH tunnel के माध्यम से इसे एक्सेस करें जिस पर आप पहले से भरोसा करते हैं।
/etc/webmin/miniserv.conf को edit करें और एक line जोड़ें या बदलें:
bind=127.0.0.1sudo systemctl restart webmin के साथ restart करें। Webmin अब internet से unreachable है — 10000 का port scan कुछ भी नहीं पाता, और पहले वाला ss check अब दिखाता है कि यह 127.0.0.1:10000 पर bound है। अपने laptop से, एक tunnel खोलें:
ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IPउस session को खुला रखें और https://localhost:10000 पर browse करें। traffic SSH के अंदर से जाता है, जो आपके key द्वारा पहले से authenticated और encrypted है, इसलिए आप यहाँ self-signed certificate को सुरक्षित रूप से accept कर सकते हैं — SSH layer ही वास्तविक सुरक्षा प्रदान कर रहा है। SSH session बंद करें और Webmin unreachable हो जाएगा। न कोई allowlist की आवश्यकता है, न कुछ expose हुआ है, और न ही harden करने के लिए कोई extra service है।
यदि आप bind=127.0.0.1 सेट करते हैं और tunnel खोलना भूल जाते हैं, तो remote access बंद हो जाएगा — यह feature का हिस्सा है, कोई fault नहीं। Option A की तरह ही recover करें: console से, bind line को हटा दें या bind=0.0.0.0 सेट करें, फिर restart करें। यह वही tunnelling तरीका है जिसका उपयोग आप tmux में Claude Code चलाने वाले remote development box तक पहुँचने के लिए करेंगे — एक SSH session, सब कुछ private, और public interface पर कुछ भी extra listen नहीं कर रहा है।
Self-signed certificate को real certificate से बदलें
यदि आपने Option A के तहत किसी hostname पर Webmin को expose किया है, तो real Let's Encrypt certificate का उपयोग करके browser warning को हटा दें। आपको एक DNS name की आवश्यकता होगी — जैसे panel.example.com — जिसमें server की ओर इशारा करने वाला एक A record हो, और validation के दौरान port-80 HTTP challenge का उत्तर देने वाला कोई माध्यम हो।
Webmin में यह feature built-in है: Webmin, फिर Webmin Configuration, फिर SSL Encryption, फिर Let's Encrypt tab। Hostname दर्ज करें, "website root directory" को उस path पर सेट करें जो उस domain के लिए port 80 पर serve होता है, और request करें। Webmin certificate प्राप्त कर लेगा, आपके लिए miniserv.conf में certfile= और keyfile= lines को update कर देगा, और expiry से पहले इसे automatically renew कर देगा। Page को reload करें और padlock icon सही हो जाएगा।
एक मुख्य समस्या: Webmin का अपना server port 10000 पर चलता है, port 80 पर नहीं। इसलिए http-01 challenge के लिए एक real web server — Apache या nginx — की आवश्यकता होती है जो port 80 पर panel.example.com के लिए response दे सके, अन्यथा DNS-based validation का उपयोग करें। यदि port 80 पर कुछ भी नहीं है, तो Webmin-only box पर request validation error के साथ fail हो जाएगी, जब तक कि आप Let's Encrypt को challenge file तक पहुँचने का तरीका न दे दें। इसके mechanics — DNS records, port-80 challenge, और renewal — किसी भी website के लिए certificate जारी करने के समान ही हैं। यदि आप इसके बारे में विस्तार से जानना चाहते हैं, तो Let's Encrypt TLS certificates with Certbot and nginx guide validation flow और DNS setup को विस्तार से समझाता है। यदि आपने SSH-tunnel का उपयोग किया है, तो आप इस section को पूरी तरह छोड़ सकते हैं: SSH के पीछे self-signed certificate सही काम करता है, और panel.example.com के लिए जारी किया गया real certificate https://localhost:10000 पर जाते समय केवल name-mismatch warning ही देगा।
Two-factor authentication चालू करें
Root panel के लिए केवल password पर्याप्त सुरक्षा नहीं है, इसलिए एक दूसरा factor जोड़ें। Webmin खोलें, फिर Webmin Configuration, और फिर Two-Factor Authentication पर जाएँ। Google Authenticator provider चुनें — यह standard TOTP है, इसलिए यह Authy, 1Password, या किसी भी authenticator app के साथ काम करता है — और save करें। Webmin आवश्यक Perl module (Authen::OATH और एक QR generator) install करेगा और feature को enable कर देगा; इस step से अभी तक कोई account सुरक्षित नहीं होगा।
इसके बाद प्रत्येक account को अपना device enrol करना होगा। 2FA enable होने के बाद, Webmin खोलें, फिर Webmin Users पर जाएँ, account चुनें, Enable Two-Factor For User चुनें, और Webmin एक QR code दिखाएगा; इसे app से scan करें और पुष्टि करने के लिए एक generated code दर्ज करें। इसके बाद, login करते समय password के बाद six-digit token माँगा जाएगा। Logout करने से पहले enrolment पूरा कर लें — यदि 2FA आवश्यक है लेकिन आपके account ने कभी code scan नहीं किया है, तो आप console से requirement को हटा सकते हैं, लेकिन पहले enrolment करना अधिक सरल है।
Brute-force logins को ban करने के लिए Fail2ban जोड़ें
एक restricted login endpoint को भी बार-बार होने वाले failures के लिए punish करना चाहिए। Webmin, failed logins को syslog में webmin[12345]: Invalid login as root from 10.0.0.9 के रूप में report करता है, या यदि username कोई Unix account नहीं है, तो Non-existent login as ... के रूप में report करता है — Ubuntu 24.04 पर ये lines systemd journal में जाती हैं, क्योंकि stock image में /var/log/auth.log नहीं होता है। Fail2ban में एक stock webmin-auth filter आता है जो ठीक इन्हीं दो lines से match करता है, और नीचे दिया गया jail backend = systemd को खुद set करता है, इसलिए इसे किसी custom regex या log path की आवश्यकता नहीं है।
/etc/fail2ban/jail.d/webmin.local बनाएँ:
[webmin-auth]
enabled = true
port = 10000
filter = webmin-auth
backend = systemd
maxretry = 4
bantime = 1hsudo systemctl restart fail2ban के साथ reload करें, फिर confirm करें कि jail live है:
sudo fail2ban-client status webmin-authशुरुआत में आपको jail की list में ban counter zero दिखेगा (journal backend पर File list: line नहीं होती है)। पूरी wiring को test करने के लिए, किसी दूसरे network से जानबूझकर कुछ बार login fail करें, फिर status command दोबारा चलाएँ और Currently banned को बढ़ते हुए देखें। यदि counter नहीं बढ़ता है, तो सुनिश्चित करें कि आप Fail2ban के ignoreip में मौजूद address से test नहीं कर रहे हैं, और server पर journalctl SYSLOG_IDENTIFIER=webmin चलाकर confirm करें कि Invalid login lines वास्तव में write हो रही हैं। यदि इस box पर Fail2ban अभी install नहीं है, तो Fail2ban on Ubuntu 24.04 for SSH guide में installation और वह SSH jail दिया गया है जिसे आपको इसके साथ ही चलाना चाहिए।
Webmin user की permissions को restrict करें
हर user को root access की आवश्यकता नहीं होती। Webmin, then Webmin Users में जाकर नए Webmin logins बनाएँ। प्रत्येक user को केवल आवश्यक modules ही प्रदान करें — उदाहरण के लिए, एक backups operator को केवल cron और filesystem modules ही दिखेंगे। User को edit करने पर सभी modules की एक checklist दिखाई देगी; किसी module को uncheck करने से वह उस user के menu से हट जाएगा और उसके underlying URLs block हो जाएंगे। यह defence in depth का एक तरीका है: यदि कोई low-privilege Webmin session चोरी हो जाता है, तो भी वह /etc/shadow को rewrite नहीं कर पाएगा यदि Users module उसकी list में नहीं है।
Webmin को अपडेट रखना
चूंकि आपने इसे apt repository से इंस्टॉल किया है, इसलिए sudo apt update && sudo apt upgrade सिस्टम के अन्य हिस्सों के साथ Webmin के नए रिलीज़ भी डाउनलोड कर लेता है। पैच तुरंत इंस्टॉल करें — कंट्रोल पैनल हैकर्स के पसंदीदा लक्ष्य होते हैं। Webmin खुद को Webmin, फिर Webmin Configuration, फिर Upgrade Webmin के माध्यम से भी अपडेट कर सकता है, लेकिन Ubuntu पर apt का उपयोग करना बेहतर है क्योंकि यह आपके अन्य package management के साथ वर्ज़न को एक समान रखता है। इसे वैकल्पिक न समझें: अतीत में कई Webmin CVEs remote-code-execution बग्स थे, और "पैच किए गए" और "कम्प्रोमाइज्ड" होने के बीच केवल एडमिन द्वारा अपग्रेड चलाने की गति का अंतर था।
Failure modes, with the strings you will see
"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. यह पहली बार लोड होने पर दिखाई देता है। कारण: install के दौरान Webmin द्वारा बनाया गया self-signed certificate किसी trusted issuer से प्रमाणित नहीं है। यह कोई attack नहीं है; channel encrypted है, बस प्रमाणित नहीं है। समाधान: अभी के लिए warning को bypass करें, फिर एक real Let's Encrypt certificate जारी करें, या यदि आप SSH tunnel के माध्यम से Webmin का उपयोग कर रहे हैं, तो इसे स्थायी रूप से स्वीकार करें।
"This web server is running in SSL mode. Try the URL https://..." आपने http://server:10000 टाइप किया है। miniserv उस port पर केवल TLS का उपयोग करता है और आपको plain text में यह जानकारी दे रहा है। समाधान: address bar में http को https में बदलें।
Page times out — ERR_CONNECTION_TIMED_OUT / "This site can't be reached". request Webmin तक कभी नहीं पहुँचती। Ubuntu पर इसका मुख्य कारण ufw द्वारा port 10000 को drop करना है। sudo ufw status से इसकी पुष्टि करें; यदि 10000 listed नहीं है, तो या तो sudo ufw allow 10000/tcp के साथ इसे open करें या, बेहतर होगा कि इसे closed ही रहने दें और Option B से SSH tunnel का उपयोग करें। अंतर ध्यान रखें: timeout का अर्थ है कि firewall चुपचाप packets को drop कर रहा है, जबकि ERR_CONNECTION_REFUSED का अर्थ है कि port reachable है लेकिन Webmin चल नहीं रहा है — sudo systemctl status webmin की जाँच करें।
"Access denied for <your IP>." आपने Option A के तहत IP Access Control सेट किया है और आपका वर्तमान address allow list में नहीं है — यह एक dynamic IP हो सकता है जो बदल गया है, या कोई typo है। browser के माध्यम से वापस आने का कोई रास्ता नहीं है। console से समाधान: /etc/webmin/miniserv.conf में allow= line को edit करें, उसे सही करें या delete करें, और sudo systemctl restart webmin चलाएँ।
"Login failed. Please try again." (जब credentials सही हों). उस account का कोई Unix password नहीं है, जो कि key-only cloud images के लिए standard है। Webmin Unix password के विरुद्ध PAM के माध्यम से authenticate करता है, और उस user के लिए वह password मौजूद नहीं है। समाधान: server पर sudo passwd youruser चलाएँ, फिर log in करें। यदि /var/webmin/miniserv.log में Non-existent login as ... दिखाई देता है, तो आप ऐसा username टाइप कर रहे हैं जो Unix account नहीं है।
दो से अधिक servers के लिए, प्रत्येक box पर control panel के बजाय automation बेहतर काम करता है: your first Ansible playbook से इसकी शुरुआत होती है।
FAQ
क्या Webmin को public internet पर expose करना सुरक्षित है?
Internet-facing Webmin को एक login page के साथ root shell की तरह समझें, क्योंकि वास्तव में यह वही है। यह केवल कई सुरक्षा परतों (layers) के साथ ही काफी सुरक्षित है: एक real certificate, two-factor authentication, Fail2ban, और या तो एक tight IP allowlist या, बेहतर होगा, कोई public exposure नहीं। सबसे कम जोखिम वाला setup Webmin को 127.0.0.1 से bind करता है और इसे SSH tunnel के माध्यम से एक्सेस करता है, जिससे open internet पर port 10000 किसी को जवाब नहीं देता।
मैं Webmin certificate warning को कैसे हटाऊं?
Warning (NET::ERR_CERT_AUTHORITY_INVALID) इसलिए आती है क्योंकि Webmin एक self-signed certificate के साथ आता है। Webmin में, Webmin Configuration, SSL Encryption, Let's Encrypt पर जाकर एक real certificate जारी करें। इसके लिए एक ऐसे DNS name का उपयोग करें जो server की ओर इशारा करता हो और validation के लिए port-80 challenge को handle कर सके। यदि आप Webmin को केवल localhost के SSH tunnel के माध्यम से एक्सेस करते हैं, तो warning हानिरहित है — SSH पहले से ही connection को encrypt और authenticate करता है — और आप self-signed certificate को सुरक्षित रूप से स्वीकार कर सकते हैं।
मैं Webmin को केवल अपने IP address तक कैसे सीमित करूं?
Webmin, Webmin Configuration, IP Access Control पर जाएं, "Only allow from listed addresses" चुनें, और curl ifconfig.me से अपना public IP दर्ज करें। Webmin इसे /etc/webmin/miniserv.conf की allow= line में स्टोर करता है। Dynamic home IP का ध्यान रखें: यदि यह बदलता है, तो आप लॉक हो जाएंगे और आपको server console से allow= line को ठीक करना होगा। इसलिए, practice में static address या SSH-tunnel method अधिक विश्वसनीय है।
सही password होने पर भी मेरा login क्यों विफल हो जाता है?
Webmin आपके Unix password के विरुद्ध PAM के माध्यम से authenticate करता है। cloud images में आमतौर पर default account पर कोई password सेट नहीं होता है, केवल key-only होती है — इसलिए PAM के पास match करने के लिए कुछ नहीं होता और login reject हो जाता है। password सेट करने के लिए server पर sudo passwd youruser चलाएं, फिर log in करें। इसके बजाय, /var/webmin/miniserv.log में Non-existent login as ... line का अर्थ है कि username स्वयं एक real Unix account नहीं है।
Plain SSH की तुलना में Webmin किस काम आता है?
Webmin एक discoverability और convenience layer है। यह log files ब्राउज़ करने, users और cron मैनेज करने, firewall rules edit करने, और हर command को याद रखे बिना disk और service state देखने के लिए वास्तव में उपयोगी है — यह occasional admins या mixed-skill teams के लिए सुविधाजनक है। Plain SSH अधिक तेज़ है, scriptable है, और routine work के लिए बहुत कम attack surface expose करता है। कई admins दोनों का उपयोग करते हैं: दैनिक कार्यों के लिए SSH, और occasional point-and-click कार्यों के लिए tunnel के पीछे localhost से bound Webmin।