SSD Nodes Learn
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-07-24

Ubuntu 24.04-এ Webmin ইনস্টল ও সিকিউর করার নিয়ম

Ubuntu 24.04-এ Webmin ইনস্টল করুন এবং port 10000 সুরক্ষিত করতে SSH tunnel, Let's Encrypt এবং Fail2ban ব্যবহার করে সার্ভার হ্যাকিং ঝুঁকি কমান।

আপনি যা তৈরি করছেন

Webmin হলো একটি ওয়েব কন্ট্রোল প্যানেল যা একটি সম্পূর্ণ Linux সার্ভারের জন্য ব্রাউজার-ভিত্তিক front end প্রদান করে — এর মাধ্যমে ব্যবহারকারী (users), প্যাকেজ (packages), cron jobs, firewall, Apache, BIND, disk এবং আরও শতাধিক মডিউল নিয়ন্ত্রণ করা যায়। এটি port 10000-এ HTTPS-এর মাধ্যমে অ্যাক্সেস করা যায়। এটি ইনস্টল করতে মাত্র তিনটি কমান্ড লাগে এবং সময় লাগে প্রায় এক মিনিট। এই গাইডের দ্বিতীয় অর্ধেকের ওপর বেশি সময় দেওয়ার কারণ হলো, Webmin root হিসেবে লগ-ইন করে এবং root ব্যবহারকারী যা করতে পারেন, এটিও তা করতে পারে। কোনো সুরক্ষা বা authentication ছাড়া Webmin থাকা মানে কোনো "ঝুঁকি ব্যবস্থাপনা" নয়; এর মানে হলো একটি লগইন পেজের মাধ্যমে সম্পূর্ণ সার্ভার হ্যাক হওয়ার সুযোগ তৈরি করে দেওয়া। তাই এটি দশ মিনিটে ইনস্টল করুন, তারপর বাকি সময়টুকু এটি শুধুমাত্র আপনি অ্যাক্সেস করতে পারেন তা নিশ্চিত করতে ব্যয় করুন।

পূর্বশর্ত এবং একটি সতর্কবার্তা

root বা sudo ইউজারসহ একটি নতুন Ubuntu 24.04 KVM VPS। Webmin হলো Perl ভিত্তিক একটি হালকা সফটওয়্যার — 1 GB RAM যথেষ্ট এবং এটি ব্যবহারের সময় এক চতুর্থা GB এর কম জায়গা নেয়। এটি নিজস্ব bundled web server (miniserv.pl) এর মাধ্যমে TCP 10000 পোর্টে কাজ করে, Apache বা nginx নয়; তাই আগে থেকে অন্য কিছু ইনস্টল করার প্রয়োজন নেই।

শুরু করার আগে দুটি বিষয় সিদ্ধান্ত নিতে হবে। প্রথমটি হলো, আপনি কোন অ্যাকাউন্ট দিয়ে লগ-ইন করবেন: Webmin, PAM এর মাধ্যমে Unix অ্যাকাউন্ট যাচাই করে, তাই আপনি root অথবা sudo গ্রুপের কোনো ইউজার হিসেবে সেই অ্যাকাউন্টের Unix password ব্যবহার করে লগ-ইন করবেন। Cloud images এ সাধারণত ডিফল্ট ইউজারের জন্য কোনো পাসওয়ার্ড সেট করা থাকে না, শুধুমাত্র key থাকে; Webmin পাসওয়ার্ডহীন অ্যাকাউন্টে লগ-ইন করতে পারে না। প্রথমে sudo passwd youruser দিয়ে একটি পাসওয়ার্ড সেট করুন, অন্যথায় আপনি যা-ই টাইপ করুন না কেন লগ-ইন ব্যর্থ হবে।

দ্বিতীয়টি হলো সতর্কবার্তা: শুধুমাত্র 10000 পোর্টটি ইন্টারনেটের জন্য ওপেন করে রেখে দেবেন না। আপনি কি SSH tunnel এর মাধ্যমে Webmin ব্যবহার করবেন (এটিই সুপারিশকৃত, এতে কোনো পোর্ট এক্সপোজ হয় না) নাকি শুধুমাত্র আপনার নিজস্ব IP এর জন্য এটি সীমাবদ্ধ রাখবেন, তা এখনই ঠিক করে নিন। এই একটি সিদ্ধান্ত নিচের প্রতিটি ধাপ নির্ধারণ করে দেবে, তাই firewall স্পর্শ করার আগে উভয় বিকল্পটি ভালো করে পড়ুন।

অফিসিয়াল রিপোজিটরি থেকে Webmin ইনস্টল করুন

Webmin একটি সাইন করা apt রিপোজিটরি প্রকাশ করে। সেটআপ স্ক্রিপ্টটি এই রিপোজিটরি এবং এর GPG সাইনিং কী যোগ করে। এর ফলে পরবর্তী apt upgrade রান করার সময় Webmin অন্যান্য প্যাকেজের মতো ডাউনলোড করা যাবে। এতে আপনি সরাসরি অথেন্টিকেটেড আপডেট পাবেন, যা কোনো ডাউনলোড করা .deb এর মতো নয় যা নিজে নিজে প্যাচ হতে পারে না।

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

স্ক্রিপ্টটি কী করতে যাচ্ছে তা প্রিন্ট করবে এবং Setup repository? (y/N) জিজ্ঞাসা করবে — উত্তর হিসেবে y দিন। কাজ শেষ হলে প্যাকেজটি ইনস্টল করুন। --install-recommends ফ্ল্যাগটি সাধারণ Perl এবং SSL মডিউল ডিপেন্ডেন্সিগুলো ডাউনলোড করে, যাতে পরবর্তীতে কোনো মডিউল missing-library এরর দিয়ে ফেইল না করে।

sudo apt-get install --install-recommends webmin

Webmin এর আগে এই স্ক্রিপ্টটির নাম পরিবর্তন করেছিল — পুরনো গাইডগুলোতে setup-repos.sh উল্লেখ করা আছে — তাই যদি র র URL 404 এরর দেয়, তবে কোনো নির্দিষ্ট নাম ব্যবহার না করে সরাসরি webmin.com/download থেকে বর্তমান ওয়ান-লাইনারটি সংগ্রহ করুন। একটি সঠিক ইনস্টলেশন Webmin install complete. You can now login to https://your-host:10000/ as root এর মতো একটি লাইন দিয়ে শেষ হয়। সার্ভিসটি এনাবল এবং রানিং অবস্থায় থাকে, কনফিগারেশন /etc/webmin এর নিচে থাকে, রিকোয়েস্টগুলো /var/webmin/miniserv.log এ লগ করা হয় এবং ফেইলড লগইনগুলো syslog এ যায় — Ubuntu 24.04 এর ক্ষেত্রে, এটি systemd journal এ যায়।

ব্রাউজার খোলার আগে এটি সঠিকভাবে চালু আছে এবং লিসেনিং করছে কিনা তা নিশ্চিত করুন:

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

আপনার একটি active (running) স্ট্যাটাস এবং 0.0.0.0:10000 এর সাথে miniserv.pl যুক্ত আছে এমন একটি লাইন প্রয়োজন — নিচের টানেল রুটটি ব্যবহার করলে এই অ্যাড্রেসটি 127.0.0.1:10000 এ পরিবর্তিত হয়ে যাবে। যদি ss এ 10000 পোর্টে কিছু না দেখায়, তবে Webmin চালু হয়নি; আরও এগোবার আগে journalctl -u webmin -n 50 পড়ুন।

প্রথম লগইন এবং সার্টিফিকেট সতর্কতা

আপনার ব্রাউজারটি https://YOUR_SERVER_IP:10000-এ নির্দেশ করুন। একটি নতুন ইনস্টলেশনে দুটি বিষয় ঘটে।

যদি ufw সক্রিয় থাকে — Ubuntu-এর নিজস্ব সার্ভার ইমেজে এটি ডিফল্টভাবে নিষ্ক্রিয় থাকে, কিন্তু অনেক প্রোভাইডার এটি আগে থেকেই চালু করে রাখে — তবে পেজটি লোড হবে না; যা নিচের failure modes অংশে আলোচনা করা হয়েছে। যদি পোর্টটি খোলা থাকে, তবে আপনার ব্রাউজার একটি ফুল-পেজ ব্লক দেখাবে: Chrome-এ NET::ERR_CERT_AUTHORITY_INVALID কোডসহ "Your connection is not private", অথবা Firefox-এ SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead"। এটি স্বাভাবিক এবং কোনো হ্যাকিং নয়। Webmin ইনস্টলেশনের সময় একটি self-signed certificate তৈরি করে (/etc/webmin/miniserv.pem), এবং কোনো certificate authority এটি যাচাই না করায় ব্রাউজার এটিকে বিশ্বাস করতে অস্বীকার করে। কানেকশনটি তখনও encrypted থাকে; এটি কেবল যাচাইকৃত নয়। আপাতত ক্লিক করে এগিয়ে যান (Advanced, তারপর Proceed) — আমরা পরে সঠিকভাবে এই সার্টিফিকেটটি পরিবর্তন করব।

root অথবা আপনার sudo ইউজার এবং তার Unix পাসওয়ার্ড দিয়ে লগইন করুন, এবং আপনি System Information ড্যাশবোর্ডে পৌঁছাবেন। এখানে একটি সাধারণ ভুল হলো https:// এর পরিবর্তে http:// টাইপ করা। miniserv ওই পোর্টে plain HTTP-তে "This web server is running in SSL mode. Try the URL https://..." টেক্সটটি প্রদান করে — সমাধানটি হলো অ্যাড্রেস বার-এ http পরিবর্তন করে https করা।

নিরাপত্তা সংক্রান্ত সিদ্ধান্ত: আপনি কীভাবে Webmin-এ প্রবেশ করবেন?

এখন সবচেয়ে গুরুত্বপূর্ণ অংশ। একটি root-equivalent প্যানেল ইন্টারনেটে উন্মুক্ত রাখা উচিত নয় যাতে পৃথিবীর যেকোনো স্ক্যানার লগইন করার চেষ্টা করতে পারে। আপনার কাছে দুটি গ্রহণযোগ্য বিকল্প রয়েছে, যা পছন্দের ক্রমানুসারে নিচে দেওয়া হলো।

Option B-এর SSH tunnel পদ্ধতিটি সবচেয়ে ভালো, কারণ এটি কোনো তথ্যই প্রকাশ করে না। আপনার IP যদি static হয়, তবে Option A-এর IP allowlist ব্যবহার করা গ্রহণযোগ্য। কোনোটিই ব্যবহার না করা একটি ভুল, যা এই গাইডটি প্রতিরোধ করার জন্য তৈরি করা হয়েছে। আপনি যদি উপরের বিকল্প দুটির পরিবর্তে একটি প্রাইভেট নেটওয়ার্কের মাধ্যমে Webmin ব্যবহার করতে চান, তবে সার্ভারটিকে একটি self-hosted WireGuard VPN-এর পেছনে রাখুন এবং Webmin-কে পাবলিক IP-এর পরিবর্তে tunnel address-এর সাথে bind করুন।

Option A: Webmin-কে আপনার IP-তে সীমাবদ্ধ করুন

প্যানেল থেকে, Webmin, তারপর Webmin Configuration, তারপর IP Access Control ওপেন করুন। "Only allow from listed addresses" অপশনটি বেছে নিন এবং আপনার public IP দিন। আপনার ল্যাপটপে curl ifconfig.me কমান্ডটি চালিয়ে আপনি এই IP পেতে পারেন। Save করুন। Webmin এই তথ্যটি /etc/webmin/miniserv.conf ফাইলের allow= লাইনে লিখে নেয় এবং রিস্টার্ট নেয়।

সতর্কতা: আপনার home IP যদি dynamic হয় এবং পরিবর্তন হয়, অথবা আপনি যদি ভুল করে ভুল address টাইপ করেন, তবে আপনি সিস্টেম থেকে lock out হয়ে যাবেন। তখন ব্রাউজারে কোনো login form দেখাবে না, বরং "Access denied for <your IP>" দেখাবে এবং পুনরায় প্রবেশ করার কোনো 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 webmin

allow= লাইনটি মুছে ফেললে পুনরায় পূর্ণ অ্যাক্সেস ফিরে পাওয়া যাবে। তাই এটি শুধুমাত্র রিকভার করার জন্য ব্যবহার করুন, এরপর দ্রুত সঠিক value সেট করে নিন।

Option B: localhost-এ bind করা এবং SSH-এর মাধ্যমে tunnel করা (প্রস্তাবিত)

যেকোনো allowlist-এর চেয়ে পাবলিক interface-এ listen না করা বেশি কার্যকর। miniserv-কে শুধুমাত্র loopback-এ bind করার নির্দেশ দিন, তারপর আপনার বিশ্বস্ত একটি encrypted SSH tunnel-এর মাধ্যমে এটি ব্যবহার করুন।

/etc/webmin/miniserv.conf এডিট করুন এবং একটি লাইন যোগ করুন বা পরিবর্তন করুন:

bind=127.0.0.1

sudo systemctl restart webmin দিয়ে restart করুন। Webmin এখন ইন্টারনেট থেকে অ্যাক্সেস করা সম্ভব নয় — 10000 পোর্টের কোনো scan কিছু খুঁজে পাবে না, এবং আগের ss check এখন দেখাবে যে এটি 127.0.0.1:10000-এ bound করা আছে। আপনার laptop থেকে একটি tunnel খুলুন:

ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IP

session-টি খোলা রাখুন এবং https://localhost:10000-এ ব্রাউজ করুন। ট্রাফিক SSH-এর ভেতর দিয়ে প্রবাহিত হয়, যা আপনার key দিয়ে ইতিমধ্যে authenticated এবং encrypted। তাই আপনি এখানে self-signed certificate নিরাপদে গ্রহণ করতে পারেন — SSH layer-ই এখানে আসল সুরক্ষা প্রদান করছে। SSH session বন্ধ করে দিলে Webmin আর পাওয়া যাবে না। কোনো allowlist করার প্রয়োজন নেই, কোনো কিছু এক্সপোজড নয়, এবং অতিরিক্ত কোনো service harden করার প্রয়োজন নেই।

আপনি যদি bind=127.0.0.1 সেট করেন এবং tunnelটি বন্ধ করে দেন, তবে রিমোট অ্যাক্সেস বন্ধ হয়ে যাবে — এটি একটি ফিচার, কোনো ত্রুটি নয়। Option A-এর মতো একইভাবে এটি রিকভার করুন: console থেকে bind লাইনটি সরিয়ে ফেলুন অথবা bind=0.0.0.0 সেট করুন, তারপর restart করুন। এটি সেই একই tunnelling পদ্ধতি যা আপনি tmux-এ Claude Code running একটি remote development box অ্যাক্সেস করতে ব্যবহার করবেন — একটি SSH session, সবকিছু প্রাইভেট, এবং পাবলিক interface-এ অতিরিক্ত কোনো service listen করছে না।

self-signed certificate পরিবর্তন করে একটি real certificate ব্যবহার করুন

আপনি যদি Option A অনুযায়ী একটি hostname-এ Webmin ব্যবহার করেন, তবে browser warning দূর করতে একটি real Let's Encrypt certificate ব্যবহার করুন। এর জন্য আপনার একটি DNS name প্রয়োজন — যেমন panel.example.com — যার একটি A record সার্ভারটিকে নির্দেশ করবে। এছাড়া validation চলাকালীন port-80 HTTP challenge-এর উত্তর দেওয়ার মতো কিছু প্রয়োজন।

Webmin-এ এই সুবিধাটি বিল্ট-ইন আছে: Webmin, তারপর Webmin Configuration, তারপর SSL Encryption, এবং শেষে Let's Encrypt tab। hostname লিখুন, "website root directory" হিসেবে এমন একটি path দিন যা ওই domain-এর জন্য port 80-এ সার্ভ করা হয়, এবং request পাঠান। Webmin সার্টিফিকেটটি সংগ্রহ করবে, আপনার জন্য miniserv.conf ফাইলের certfile= এবং keyfile= লাইন দুটি আপডেট করবে, এবং মেয়াদ শেষ হওয়ার আগেই এটি স্বয়ংক্রিয়ভাবে রিনিউ (renew) করবে। পেজটি reload করলে padlockটি পরিষ্কার দেখাবে।

একটি প্রধান সমস্যা: Webmin-এর নিজস্ব সার্ভার 10000 port-এ চলে, 80 port-এ নয়। তাই http-01 challenge সম্পন্ন করতে port 80-এ panel.example.com-এর জন্য একটি real web server — যেমন Apache বা nginx — প্রয়োজন, অথবা DNS-based validation প্রয়োজন। যদি কোনো সার্ভারে শুধুমাত্র Webmin থাকে এবং port 80-এ অন্য কিছু না থাকে, তবে Let's Encrypt-কে challenge file-টি পাওয়ার কোনো মাধ্যম না দেওয়া পর্যন্ত request-টি validation error দেখাবে। DNS records, port-80 challenge, এবং renewal-এর প্রক্রিয়া যেকোনো ওয়েবসাইটের সার্টিফিকেটের মতোই। এই বিষয়ে বিস্তারিত জানতে Let's Encrypt TLS certificates with Certbot and nginx guide গাইডটি দেখুন। আপনি যদি SSH-tunnel পদ্ধতি ব্যবহার করেন, তবে এই section-টি এড়িয়ে যেতে পারেন: SSH-এর মাধ্যমে self-signed certificate ব্যবহার করা নিরাপদ, এবং panel.example.com-এর জন্য ইস্যু করা একটি real certificate দিয়ে https://localhost:10000 ভিজিট করলে শুধুমাত্র name-mismatch warning দেখাবে।

Two-factor authentication চালু করুন

root panel-এর জন্য শুধুমাত্র password যথেষ্ট নয়, তাই একটি second factor যোগ করুন। Webmin খুলুন, তারপর Webmin Configuration, এরপর Two-Factor Authentication-এ যান। Google Authenticator provider হিসেবে নির্বাচন করুন — এটি standard TOTP, তাই এটি Authy, 1Password, বা যেকোনো authenticator app-এর সাথে কাজ করবে — এবং save করুন। Webmin প্রয়োজনীয় ছোট Perl module (Authen::OATH এবং একটি QR generator) ইনস্টল করবে এবং ফিচারটি সক্রিয় করবে; শুধুমাত্র এই ধাপটি সম্পন্ন করলেই কোনো অ্যাকাউন্ট সুরক্ষিত হবে না।

এরপর প্রতিটি অ্যাকাউন্টে নিজস্ব device এনরোল করতে হবে। 2FA সক্রিয় করার পর, Webmin খুলুন, তারপর Webmin Users-এ যান, অ্যাকাউন্টটি নির্বাচন করুন, Enable Two-Factor For User বেছে নিন এবং Webmin একটি QR code দেখাবে; অ্যাপ দিয়ে সেটি স্ক্যান করুন এবং নিশ্চিত করার জন্য একটি জেনারেট করা code প্রবেশ করান। এরপর থেকে, লগইন করার সময় password-এর পরে ছয় ডিজিটের token দিতে হবে। লগ আউট করার আগেই এনরোল সম্পন্ন করুন — যদি 2FA প্রয়োজন হয় কিন্তু আপনার অ্যাকাউন্ট কখনো কোনো code স্ক্যান না করে থাকে, তবে আপনি কনসোল থেকে সেই requirement সরিয়ে দিতে পারবেন, কিন্তু আগে এনরোল করে নেওয়া অনেক বেশি সুবিধাজনক।

Brute-force login প্রতিরোধ করতে Fail2ban যোগ করুন

একটি সীমিত login endpoint হলেও বারবার ভুল login করার চেষ্টা দণ্ডনীয় হওয়া উচিত। Webmin ব্যর্থ login গুলোর তথ্য syslog-এ webmin[12345]: Invalid login as root from 10.0.0.9 আকারে রিপোর্ট করে, অথবা কোনো Unix account না থাকা username-এর ক্ষেত্রে Non-existent login as ... আকারে রিপোর্ট করে। Ubuntu 24.04-এ এই লাইনগুলো systemd journal-এ জমা হয়, কারণ stock image-এ কোনো /var/log/auth.log থাকে না। Fail2ban-এ একটি ডিফল্ট webmin-auth filter থাকে যা ঠিক এই দুটি লাইনের সাথে মিলে যায়। নিচের jail-টি নিজেই backend = systemd সেট করে নেয়, তাই এতে কোনো custom regex বা log path প্রয়োজন নেই।

/etc/fail2ban/jail.d/webmin.local তৈরি করুন:

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

sudo systemctl restart fail2ban দিয়ে reload করুন, তারপর jail-টি সচল আছে কিনা তা নিশ্চিত করুন:

sudo fail2ban-client status webmin-auth

শুরুতে আপনি jail-টি একটি zero ban counter সহ দেখতে পাবেন (journal backend-এর ক্ষেত্রে কোনো File list: লাইন থাকে না)। পুরো প্রক্রিয়াটি পরীক্ষা করতে, অন্য কোনো network থেকে ইচ্ছে করে কয়েকবার login fail করুন, তারপর status command-টি পুনরায় চালান এবং Currently banned বাড়তে দেখুন। যদি এটি না বাড়ে, তবে নিশ্চিত করুন যে আপনি Fail2ban-এর ignoreip লিস্টের কোনো address থেকে পরীক্ষা করছেন না। এরপর server-এ journalctl SYSLOG_IDENTIFIER=webmin চালান যাতে নিশ্চিত হওয়া যায় যে Invalid login লাইনগুলো আসলে লেখা হচ্ছে। যদি এই machine-এ এখনও Fail2ban ইনস্টল করা না থাকে, তবে Fail2ban on Ubuntu 24.04 for SSH guide গাইডটি অনুসরণ করুন। এটি ইনস্টলেশন এবং এই গাইডের পাশাপাশি চালানোর জন্য প্রয়োজনীয় SSH jail সম্পর্কে ধারণা দেবে।

প্রতিটি Webmin ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ করুন

প্যানেল ব্যবহারের প্রয়োজন আছে এমন প্রত্যেকের সবকিছুর ওপর root অ্যাক্সেস প্রয়োজন হয় না। Webmin, তারপর Webmin Users-এ গিয়ে অতিরিক্ত Webmin লগইন তৈরি করুন এবং প্রতিটি ব্যবহারকারীকে শুধুমাত্র প্রয়োজনীয় মডিউলগুলো প্রদান করুন — উদাহরণস্বরূপ, একজন ব্যাকআপ অপারেটরকে শুধুমাত্র cron এবং filesystem মডিউল দেখার অনুমতি দিন। কোনো ব্যবহারকারীকে এডিট করলে প্রতিটি মডিউলের একটি চেকলিস্ট দেখা যাবে; কোনো মডিউল আনচেক করলে সেটি ওই ব্যবহারকারীর মেনু থেকে মুছে যাবে এবং সংশ্লিষ্ট URL গুলো ব্লক হয়ে যাবে। এটি হলো defence in depth: এমনকি একটি চুরি হওয়া low-privilege Webmin সেশন দিয়েও /etc/shadow পরিবর্তন করা সম্ভব নয় যদি Users মডিউলটি তার তালিকায় না থাকে।

Webmin আপডেট রাখা

যেহেতু আপনি apt repository থেকে এটি ইনস্টল করেছেন, তাই sudo apt update && sudo apt upgrade সিস্টেমের অন্যান্য প্যাকেজের সাথে Webmin-এর নতুন রিলিজগুলোও নিয়ে আসবে। দ্রুত প্যাচ ইনস্টল করুন — কন্ট্রোল প্যানেল হ্যাকারদের অন্যতম প্রধান লক্ষ্য। Webmin সরাসরি Webmin, তারপর Webmin Configuration, তারপর Upgrade Webmin মেনু থেকে নিজেকে আপডেট করতে পারে, তবে Ubuntu-তে apt ব্যবহার করা বেশি সুবিধাজনক কারণ এটি অন্যান্য প্যাকেজ ম্যানেজমেন্টের সাথে ভার্সন সামঞ্জস্যপূর্ণ রাখে। এটিকে ঐচ্ছিক মনে করবেন না: অতীতে বেশ কিছু Webmin CVE ছিল remote-code-execution বাগ, এবং "প্যাচ করা" এবং "কম্প্রোমাইজড" হওয়ার মধ্যে একমাত্র পার্থক্য ছিল অ্যাডমিন কত দ্রুত আপডেটটি সম্পন্ন করছেন।

Failure modes, with the strings you will see

"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. প্রথমবার লোড করার সময় এটি দেখায়। কারণ: ইনস্টল করার সময় Webmin যে self-signed certificate তৈরি করেছে তাতে কোনো trusted issuer নেই। এটি কোনো আক্রমণ নয়; চ্যানেলটি encrypted, কিন্তু এটি যাচাইকৃত নয়। সমাধান: আপাতত warning উপেক্ষা করে এগিয়ে যান, তারপর একটি আসল Let's Encrypt certificate ইস্যু করুন, অথবা আপনি যদি SSH tunnel এর মাধ্যমে Webmin ব্যবহার করেন তবে এটি স্থায়ীভাবে গ্রহণ করুন।

"This web server is running in SSL mode. Try the URL https://..." আপনি http://server:10000 টাইপ করেছেন। miniserv ওই পোর্টে শুধুমাত্র TLS ব্যবহার করে এবং এটি আপনাকে plain text এ জানাচ্ছে। সমাধান: অ্যাড্রেস বার-এ http পরিবর্তন করে https করুন।

Page times out — ERR_CONNECTION_TIMED_OUT / "This site can't be reached". রিকোয়েস্টটি Webmin-এ পৌঁছাতে পারছে না। Ubuntu-তে এর কারণ সাধারণত ufw দ্বারা port 10000 ড্রপ করা। sudo ufw status দিয়ে এটি নিশ্চিত করুন; যদি 10000 লিস্টে না থাকে, তবে sudo ufw allow 10000/tcp দিয়ে এটি ওপেন করুন অথবা আরও ভালো হয় যদি এটি বন্ধ রেখে Option B থেকে SSH tunnel ব্যবহার করেন। পার্থক্যটি মনে রাখুন: timeout মানে হলো firewall নিঃশব্দে packets ড্রপ করছে, অন্যদিকে ERR_CONNECTION_REFUSED মানে হলো port টি reachable কিন্তু Webmin চলছে না — sudo systemctl status webmin চেক করুন।

"Access denied for <your IP>." আপনি Option A এর অধীনে IP Access Control সেট করেছেন এবং আপনার বর্তমান অ্যাড্রেসটি allow list-এ নেই — এটি একটি পরিবর্তন হওয়া dynamic IP অথবা টাইপিং ভুল। ব্রাউজার দিয়ে পুনরায় প্রবেশ করার কোনো পথ নেই। কনসোল থেকে সমাধান: /etc/webmin/miniserv.conf ফাইলে allow= লাইনটি এডিট করুন, এটি সংশোধন বা ডিলিট করুন, এবং sudo systemctl restart webmin রান করুন।

"Login failed. Please try again." সঠিক ক্রেডেনশিয়াল ব্যবহার করার পরেও। অ্যাকাউন্টে কোনো Unix password নেই, যা সাধারণত key-only cloud images-এ দেখা যায়। Webmin PAM এর মাধ্যমে Unix password দিয়ে authenticate করে, কিন্তু ওই ইউজারের জন্য কোনো পাসওয়ার্ড নেই। সমাধান: সার্ভারে sudo passwd youruser রান করুন, তারপর লগ ইন করুন। যদি /var/webmin/miniserv.logNon-existent login as ... দেখায়, তবে আপনি এমন একটি username টাইপ করছেন যা কোনো Unix account নয়।

কয়েকটি সার্ভারের বেশি হলে, প্রতিটি বক্সে কন্ট্রোল প্যানেল ব্যবহার করার চেয়ে automation বেশি কার্যকর: your first Ansible playbook দিয়ে এর শুরু করুন।

FAQ

পাবলিক ইন্টারনেটে Webmin এক্সপোজ করা কি নিরাপদ?

ইন্টারনেটে সরাসরি উন্মুক্ত Webmin-কে একটি লগইন পেজসহ root shell হিসেবে বিবেচনা করুন, কারণ এটি আসলে তাই। এটি কেবল তখনই যথেষ্ট নিরাপদ যখন আপনি একাধিক সুরক্ষা স্তর ব্যবহার করবেন: একটি আসল certificate, two-factor authentication, Fail2ban, এবং একটি কঠোর IP allowlist অথবা সবচেয়ে ভালো হয় যদি কোনো পাবলিক এক্সপোজার না থাকে। সবচেয়ে কম ঝুঁকিপূর্ণ সেটআপ হলো Webmin-কে 127.0.0.1-এর সাথে bind করা এবং SSH tunnel-এর মাধ্যমে এটি ব্যবহার করা, যাতে open internet-এ port 10000 কোনো সাড়া না দেয়।

আমি কীভাবে Webmin certificate warning দূর করব?

সতর্কবার্তা (NET::ERR_CERT_AUTHORITY_INVALID) দেখায় কারণ Webmin একটি self-signed certificate প্রদান করে। Webmin থেকে একটি আসল certificate ইস্যু করুন: Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt ব্যবহার করুন। এক্ষেত্রে এমন একটি DNS name ব্যবহার করুন যা সার্ভারের দিকে পয়েন্ট করে এবং validation-এর জন্য port-80 challenge সম্পন্ন করতে পারে। আপনি যদি কেবল localhost-এর মাধ্যমে SSH tunnel ব্যবহার করে Webmin অ্যাক্সেস করেন, তবে এই 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= লাইনে সংরক্ষণ করে। ডাইনামিক home IP-এর ক্ষেত্রে সতর্ক থাকুন: যদি এটি পরিবর্তিত হয় তবে আপনি lockout হয়ে যাবেন এবং সার্ভার কনসোল থেকে allow= লাইনটি মেরামত করতে হবে। তাই প্র্যাকটিক্যাল ব্যবহারের জন্য একটি static address বা SSH-tunnel পদ্ধতি বেশি নির্ভরযোগ্য।

সঠিক পাসওয়ার্ড থাকা সত্ত্বেও আমার login কেন ব্যর্থ হচ্ছে?

Webmin আপনার Unix password-এর বিপরীতে PAM-এর মাধ্যমে authenticate করে। ক্লাউড ইমেজগুলোতে সাধারণত ডিফল্ট অ্যাকাউন্টে কোনো পাসওয়ার্ড সেট করা থাকে না, শুধুমাত্র key থাকে — তাই PAM-এর মেলানোর মতো কিছু থাকে না এবং login রিজেক্ট হয়। পাসওয়ার্ড সেট করতে সার্ভারে sudo passwd youruser চালান, তারপর লগইন করুন। অন্যদিকে, /var/webmin/miniserv.log ফাইলের Non-existent login as ... লাইনটি নির্দেশ করে যে ইউজারনেমটি কোনো আসল Unix account নয়।

সাধারণ SSH-এর তুলনায় Webmin কেন ব্যবহার করা উচিত?

Webmin হলো একটি discoverability এবং convenience layer। লগ ফাইল ব্রাউজ করা, user এবং cron ম্যানেজ করা, firewall rules এডিট করা এবং প্রতিটি command মুখস্থ না করেই disk ও service state দেখার জন্য এটি অত্যন্ত উপযোগী — যা মাঝে মাঝে কাজ করা admin বা mixed-skill টিমের জন্য সুবিধাজনক। সাধারণ SSH দ্রুততর, scriptable, এবং রুটিন কাজের জন্য অনেক কম attack surface প্রদান করে। অনেক admin উভয়টিই ব্যবহার করেন: দৈনন্দিন কাজের জন্য SSH, এবং মাঝে মাঝে point-and-click কাজের জন্য tunnel-এর মাধ্যমে localhost-এ bind করা Webmin।