SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor

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

Ubuntu 24.04 সার্ভারে Webmin ইনস্টল করার সঠিক পদ্ধতি জানুন। port 10000 সুরক্ষিত রাখতে SSH tunnel, IP allowlist, Let's Encrypt SSL, 2FA এবং Fail2ban কনফিগার করার পূর্ণ গাইড।

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

Webmin হলো একটি ওয়েব কন্ট্রোল প্যানেল যা পুরো Linux সার্ভার, ইউজার, প্যাকেজ, cron job, ফায়ারওয়াল, Apache, BIND, ডিস্ক এবং আরও শত শত মডিউল পরিচালনার জন্য একটি ব্রাউজার-ভিত্তিক ইন্টারফেস প্রদান করে। এটি port 10000-এ HTTPS-এর মাধ্যমে অ্যাক্সেস করা যায়। এর ইনস্টলেশন প্রক্রিয়াটি মাত্র তিনটি কমান্ডের এবং এতে প্রায় এক মিনিট সময় লাগে। এই গাইডের বেশিরভাগ অংশ দ্বিতীয় অর্ধে ব্যয় করার কারণ হলো, Webmin সরাসরি root হিসেবে লগইন করে এবং root ব্যবহারকারীর মতো যেকোনো কাজ করতে সক্ষম। একটি উন্মুক্ত বা অনিরাপদ Webmin কেবল "ব্যবস্থাপনার ঝুঁকি" নয়; এটি একটি লগইন পেজের আড়ালে থাকা সম্পূর্ণ সার্ভার কম্প্রোমাইজ। তাই এটি দশ মিনিটে ইনস্টল করুন এবং পরবর্তী এক ঘণ্টা ব্যয় করুন এটি নিশ্চিত করতে যে শুধুমাত্র আপনিই এটি অ্যাক্সেস করতে পারবেন।

প্রয়োজনীয় শর্তাবলি এবং একটি সতর্কবার্তা

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

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

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

অফিশিয়াল repository থেকে Webmin ইনস্টল করুন

Webmin একটি signed apt repository প্রকাশ করে। Setup script repository এবং এর GPG signing key যোগ করে, যাতে পরবর্তী apt upgrade run-এ Webmin অন্য package-এর মতোই pull হয়। ফলে নিজে থেকে patch না হওয়া downloaded .deb-এর বদলে authenticated update পান।

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

Script-টি কী করতে যাচ্ছে তা দেখায় এবং Setup Webmin stable repository? (y/N) জানতে চায়। উত্তর দিন y। কাজ শেষ হলে package-টি ইনস্টল করুন। --install-recommends flag-টি সাধারণ Perl এবং SSL module dependency-গুলো pull করে। ফলে পরে individual module-এ missing-library error হয় না।

sudo apt-get install --install-recommends webmin

Webmin আগে এই script-এর নাম পরিবর্তন করেছে। পুরোনো guide-গুলোতে setup-repos.sh উল্লেখ থাকতে পারে। তাই raw URL 404 দিলে কোনো নাম নির্দিষ্ট না করে webmin.com/download থেকে সরাসরি বর্তমান one-liner নিন। সঠিক installation-এর শেষে Webmin install complete. You can now login to https://your-host:10000/ as root-এর মতো একটি line দেখা যায়। Service-টি enabled এবং running থাকে। Configuration /etc/webmin-এর অধীনে থাকে। Request /var/webmin/miniserv.log-এ log হয়। Failed login syslog-এ যায়; Ubuntu 24.04-এ তা systemd journal-এ থাকে।

Browser খোলার আগে নিশ্চিত করুন যে এটি সত্যিই চালু আছে এবং listening করছে:

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

আপনার active (running) status এবং 0.0.0.0:10000-এ bound miniserv.pl দেখানো একটি line দরকার। নিচের tunnel পদ্ধতি ব্যবহার করলে সেই address 127.0.0.1:10000-এ পরিবর্তিত হবে। 10000-এ ss কিছু না দেখালে Webmin start করেনি। এগিয়ে যাওয়ার আগে journalctl -u webmin -n 50 পড়ুন।

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

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

যদি ufw সক্রিয় থাকে (Ubuntu-এর নিজস্ব সার্ভার ইমেজে এটি নিষ্ক্রিয় থাকে, তবে অনেক প্রোভাইডার এটি আগে থেকেই সক্রিয় রাখে), তাহলে পেজটি লোড হবে না, যা নিচের ব্যর্থতার কারণ অংশে আলোচনা করা হয়েছে। যদি পোর্টটি খোলা থাকে, তবে আপনার ব্রাউজার একটি পূর্ণ-পৃষ্ঠা ব্লক প্রদর্শন করবে: Chrome-এ NET::ERR_CERT_AUTHORITY_INVALID কোডসহ "Your connection is not private" অথবা Firefox-এ SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" বার্তাটি দেখাবে। এটি প্রত্যাশিত এবং কোনো অনুপ্রবেশের ঘটনা নয়। Webmin ইনস্টল করার সময় একটি self-signed সার্টিফিকেট (/etc/webmin/miniserv.pem) তৈরি করে, এবং কোনো সার্টিফিকেট অথরিটি এর নিশ্চয়তা দেয় না বলে ব্রাউজার এটিকে বিশ্বাস করতে অস্বীকার করে। সংযোগটি এখনও এনক্রিপ্ট করা থাকে; শুধুমাত্র এর কোনো বাহ্যিক নিশ্চয়তা নেই। আপাতত এটি এড়িয়ে এগিয়ে যান (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-এর সমতুল্য কোনো প্যানেল সরাসরি ইন্টারনেটে উন্মুক্ত রাখা উচিত নয়, কারণ এতে বিশ্বের যেকোনো প্রান্ত থেকে স্ক্যানাররা লগইন করার চেষ্টা করতে পারে। আপনার কাছে দুটি গ্রহণযোগ্য বিকল্প রয়েছে, যা পছন্দের ক্রমানুসারে দেওয়া হলো। প্রতিটি self-hosted অ্যাডমিন ইন্টারফেস এই একই প্রশ্নের সম্মুখীন হয়, আর এই কারণেই Vaultwarden নিরাপদ কি না তা তার এনক্রিপশনের চেয়ে বরং তার অ্যাডমিন এন্ডপয়েন্ট এবং ব্যাকআপ ফাইলের ওপর বেশি নির্ভর করে।

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

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

প্যানেলের ভেতর Webmin, তারপর Webmin Configuration, এবং সবশেষে IP Access Control খুলুন। "Only allow from listed addresses" নির্বাচন করুন এবং আপনার পাবলিক IP লিখুন, যা আপনি আপনার ল্যাপটপে curl ifconfig.me চালিয়ে খুঁজে পেতে পারেন। সংরক্ষণ করুন। Webmin এটি /etc/webmin/miniserv.conf ফাইলের allow= লাইনে লিখে রাখে এবং নিজেকে রিস্টার্ট করে।

ফাঁদ: আপনার হোম IP যদি ডাইনামিক হয় এবং পরিবর্তিত হয়, অথবা আপনি যদি ভুল IP টাইপ করেন, তবে আপনি নিজেকেই লক করে ফেলবেন। তখন ব্রাউজারে "Access denied for <your IP>" দেখাবে এবং কোনো লগইন ফর্ম আসবে না, আর ওয়েব ইন্টারফেসে ফিরে আসার কোনো পথ থাকবে না। আপনি সার্ভার কনসোল থেকে SSH বা আপনার প্রোভাইডারের VNC ব্যবহার করে এটি ঠিক করতে পারেন:

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= লাইনটি মুছে ফেললে পুনরায় সব জায়গা থেকে অ্যাক্সেস পাওয়া যাবে, তাই এটি কেবল পুনরুদ্ধারের জন্য করুন এবং সাথে সাথে সঠিক মান সেট করুন।

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

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

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

bind=127.0.0.1

sudo systemctl restart webmin দিয়ে রিস্টার্ট করুন। Webmin এখন ইন্টারনেট থেকে আর অ্যাক্সেস করা যাবে না, পোর্ট স্ক্যান করলে 10000 পোর্টে কিছুই পাওয়া যাবে না এবং আগের ss চেকটি এখন দেখাবে যে এটি 127.0.0.1:10000-এ bind হয়ে আছে। আপনার ল্যাপটপ থেকে একটি tunnel ওপেন করুন:

ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IP

সেই সেশনটি খোলা রাখুন এবং https://localhost:10000 ব্রাউজ করুন। ট্রাফিক SSH-এর ভেতর দিয়ে যায়, যা আপনার কী (key) দ্বারা আগে থেকেই অথেন্টিকেটেড এবং এনক্রিপ্টেড। তাই আপনি এখানে নির্দ্বিধায় self-signed সার্টিফিকেট গ্রহণ করতে পারেন, কারণ SSH লেয়ারটিই প্রকৃত সুরক্ষা প্রদান করছে। SSH সেশন বন্ধ করলেই Webmin অদৃশ্য হয়ে যাবে। কোনো allowlist-এর প্রয়োজন নেই, কোনো কিছু এক্সপোজড নেই, এবং আলাদা করে কোনো সার্ভিস হার্ডেন করার দরকার নেই।

আপনি যদি bind=127.0.0.1 সেট করেন এবং tunnel করতে ভুলে যান, তবে রিমোট অ্যাক্সেস বন্ধ হয়ে যাবে; এটিই এই ফিচারের কাজ, কোনো ত্রুটি নয়। বিকল্প A-এর মতোই এটি পুনরুদ্ধার করুন: কনসোল থেকে bind লাইনটি মুছে ফেলুন অথবা bind=0.0.0.0 সেট করুন, তারপর রিস্টার্ট দিন। এটি সেই একই টানেলিং পদ্ধতি যা আপনি tmux-এ Claude Code চালানো একটি রিমোট ডেভেলপমেন্ট বক্সে প্রবেশের জন্য ব্যবহার করতেন; একটি SSH সেশন, সবকিছু ব্যক্তিগত, এবং পাবলিক ইন্টারফেসে বাড়তি কোনো সার্ভিস listen করছে না।

স্বাক্ষরবিহীন certificate-এর বদলে প্রকৃত certificate ব্যবহার করুন

Option A-এর অধীনে Webmin প্রকাশ করলে প্রকৃত Let's Encrypt certificate ব্যবহার করে browser warning সরিয়ে দিন। Certificate-এর জন্য একটি নাম এবং validation-এর সময় Let's Encrypt যেন port 80-এ পৌঁছাতে পারে, তার একটি উপায় প্রয়োজন। নামটি সাধারণত একটি DNS name, যেমন panel.example.com, যার A record সার্ভারের দিকে নির্দেশ করে। Webmin 2.650 থেকে (released June 25, 2026) এটি সার্ভারের public IP address-ও হতে পারে, যদি Certbot 5.3 বা পরবর্তী সংস্করণ ইনস্টল করা থাকে। Let's Encrypt IP certificate শুধু স্বল্পমেয়াদি profile-এ দেয়, যা প্রায় ছয় দিন বৈধ থাকে। তাই Webmin-এর automatic renewal interval দিন হিসেবে নির্ধারণ করুন; IP certificate-এর জন্য Webmin এর চেয়ে দীর্ঘ interval গ্রহণ করবে না।

Webmin-এ এই সুবিধা অন্তর্নির্মিত: Webmin, তারপর Webmin Configuration, তারপর SSL Encryption, তারপর Let's Encrypt tab। hostname বা IP address লিখুন, একটি validation method নির্বাচন করুন এবং request পাঠান। Webmin certificate সংগ্রহ করে, miniserv.conf-এর certfile= এবং keyfile= line আপনার হয়ে update করে এবং certificate মেয়াদ শেষ হওয়ার আগে স্বয়ংক্রিয়ভাবে renew করে। Page reload করুন। Padlock-এ আর warning থাকবে না।

একটি গুরুত্বপূর্ণ বিষয় হলো: Webmin-এর নিজস্ব server 10000 port-এ চলে, 80 port-এ নয়। তাই port 80-এ http-01 challenge-এর উত্তর দেওয়ার জন্য অন্য কিছু প্রয়োজন। এটি করার তিনটি উপায় আছে। Apache বা nginx যদি ইতিমধ্যে port 80-এ name-টি serve করে, তাহলে validation-এর জন্য সেই site-এর document directory নির্ধারণ করুন। IP address-এর ক্ষেত্রে এর জন্য Certbot 5.4 বা পরবর্তী সংস্করণ প্রয়োজন। Port 80-এ কিছু না চললে Certbot-এর অন্তর্নির্মিত web server বেছে নিন। এটি Webmin version 2.110-এ যোগ করা standalone mode। Certbot অল্প সময়ের জন্য port 80-এ নিজস্ব web server চালায়। তাই Certbot ইনস্টল থাকতে হবে এবং port 80 free ও firewall-এ open থাকতে হবে। অথবা DNS validation ব্যবহার করুন। এটি hostname-এর জন্য কাজ করে, কিন্তু IP address-এর জন্য নয়। Ubuntu 24.04-এর নিজস্ব certbot package-এর version 2.9। Hostname-এর standalone validation-এর জন্য এটি যথেষ্ট, কিন্তু IP certificate-এর জন্য অত্যন্ত পুরোনো। IP certificate-এর জন্য snap-এর মতো current Certbot ইনস্টল করুন, যা October 2026 অনুযায়ী 5.8 version-এ ছিল। এগুলোর কোনোটিই না থাকলে validation error-সহ request ব্যর্থ হবে। এই প্রক্রিয়া, DNS record, port-80 challenge এবং renewal—সবই যেকোনো website-এর জন্য certificate issue করার মতো। এই পটভূমি প্রয়োজন হলে Certbot এবং nginx দিয়ে Let's Encrypt TLS certificate guide-এ validation flow ও DNS setup বিস্তারিতভাবে দেখানো হয়েছে। SSH-tunnel পদ্ধতি ব্যবহার করলে এই section সম্পূর্ণ এড়িয়ে যেতে পারেন। SSH-এর আড়ালে self-signed certificate যথেষ্ট। তাছাড়া panel.example.com-এর জন্য issue করা প্রকৃত certificate ব্যবহার করলেও https://localhost:10000-এ গেলে name-mismatch warning দেখা দেবে।

টু-ফ্যাক্টর অথেন্টিকেশন চালু করা

শুধুমাত্র পাসওয়ার্ড root প্যানেলের জন্য যথেষ্ট সুরক্ষা নয়, তাই একটি দ্বিতীয় ধাপের সুরক্ষা যোগ করুন। Webmin খুলুন, তারপর Webmin Configuration-এ যান এবং Two-Factor Authentication নির্বাচন করুন। Google Authenticator প্রোভাইডারটি বেছে নিন; এটি একটি স্ট্যান্ডার্ড TOTP, তাই এটি Authy, 1Password বা যেকোনো অথেন্টিকেটর অ্যাপের সাথে কাজ করবে। এরপর সেটি সংরক্ষণ করুন। Webmin প্রয়োজনীয় ছোট Perl মডিউলটি (Authen::OATH এবং একটি QR জেনারেটর) ইনস্টল করবে এবং ফিচারটি চালু করবে; তবে এই ধাপটি এখনো কোনো অ্যাকাউন্টকে সুরক্ষিত করবে না।

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

ব্রুট-ফোর্স লগইন ঠেকাতে Fail2ban যোগ করুন

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

/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 কমান্ড দিয়ে রিলোড করুন এবং জেলটি সক্রিয় হয়েছে কি না নিশ্চিত করুন:

sudo fail2ban-client status webmin-auth

আপনি জেলটিকে তালিকাভুক্ত অবস্থায় দেখবেন যেখানে শুরুতে ব্যান কাউন্টার শূন্য থাকবে (journal backend-এ কোনো File list: লাইন থাকে না)। সংযোগটি সঠিকভাবে কাজ করছে কি না তা যাচাই করতে, অন্য কোনো নেটওয়ার্ক থেকে ইচ্ছাকৃতভাবে কয়েকবার ভুল লগইন করুন। এরপর স্ট্যাটাস কমান্ডটি পুনরায় চালিয়ে দেখুন Currently banned বাড়ছে কি না। যদি এটি না বাড়ে, তবে নিশ্চিত করুন যে আপনি Fail2ban-এর ignoreip-এ থাকা কোনো অ্যাড্রেস থেকে পরীক্ষা করছেন না। এছাড়া সার্ভারে journalctl SYSLOG_IDENTIFIER=webmin চালিয়ে নিশ্চিত করুন যে Invalid login লাইনগুলো সঠিকভাবে লেখা হচ্ছে। যদি এই বক্সে Fail2ban ইনস্টল করা না থাকে, তবে Ubuntu 24.04-এ SSH-এর জন্য Fail2ban গাইড থেকে ইনস্টলেশন এবং SSH জেলের কনফিগারেশন দেখে নিতে পারেন, যা আপনার এই জেলের পাশাপাশি চালানো উচিত।

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

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

Webmin আপডেট রাখা

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

ব্যর্থতার ধরন এবং যে বার্তাগুলো দেখবেন

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

"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"। অনুরোধটি Webmin-এ পৌঁছাচ্ছে না। Ubuntu-তে প্রায়ই ufw port 10000-এর traffic drop করে। তবে ধরে নেওয়ার আগে পরীক্ষা করুন। sudo ufw status চালান। এটি Status: inactive দেখালে ufw কোনো traffic block করছে না। Ubuntu এটি disabled অবস্থায় ship করে, এবং allow rule যোগ করলেও ufw enable হয় না। তাই আরও upstream-এ খুঁজুন, যেমন provider-এর control panel-এর firewall-এ। এটি Status: active দেখালে default incoming policy এবং আরও বিস্তৃত rule দেখতে sudo ufw status verbose চালান। incoming traffic denied হলে এবং 10000 তালিকায় না থাকলে sudo ufw allow 10000/tcp দিয়ে port খুলুন। তবে আরও ভালো হলো port বন্ধ রেখে Option B-এর SSH tunnel ব্যবহার করা। পার্থক্যটি মনে রাখুন: timeout হলে firewall নীরবে packet drop করছে। অন্যদিকে ERR_CONNECTION_REFUSED বোঝায় port-এ পৌঁছানো যাচ্ছে, কিন্তু 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 করে তা সংশোধন বা মুছে দিন, তারপর sudo systemctl restart webmin চালান।

আপনি সঠিক বলে জানেন এমন credentials দিয়েও "Login failed. Please try again." Account-টির কোনো Unix password নেই। Key-only cloud image-এ এটি স্বাভাবিক। Webmin Unix password-এর বিরুদ্ধে PAM ব্যবহার করে authentication করে, কিন্তু user-এর জন্য সেই password নেই। সমাধান: server-এ sudo passwd youruser চালান, তারপর login করুন। /var/webmin/miniserv.log যদি Non-existent login as ... দেখায়, তাহলে আপনি এমন একটি username লিখছেন যা আদৌ Unix account নয়।

দুই-একটির বেশি server হলে প্রতিটি box-এ control panel চালানোর চেয়ে automation সহজে scale করে: আপনার প্রথম Ansible playbook থেকেই এর শুরু।

FAQ

Webmin-কে public Internet-এ প্রকাশ করা কি নিরাপদ?

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

Webmin-এর certificate warning কীভাবে সরাব?

Webmin self-signed certificate ব্যবহার করে, তাই warning (NET::ERR_CERT_AUTHORITY_INVALID) দেখা যায়। Webmin থেকে Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt-এ গিয়ে একটি প্রকৃত certificate issue করুন। Server-এ নির্দেশ করা একটি DNS name ব্যবহার করুন। Certbot 5.3 বা পরবর্তী সংস্করণ ইনস্টল করা থাকলে server-এর public IP address-ও ব্যবহার করতে পারেন। Challenge-এর জন্য port 80-এ পৌঁছানো সম্ভব হতে হবে। এটি কোনো বিদ্যমান web server অথবা Certbot-এর নিজস্ব standalone server-এর মাধ্যমে উত্তর দিতে পারে। আপনি যদি সব সময় 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= line-এ সংরক্ষণ করে। Dynamic home IP সম্পর্কে সতর্ক থাকুন। IP পরিবর্তিত হলে আপনি access থেকে বিচ্ছিন্ন হয়ে যাবেন এবং server console থেকে allow= line ঠিক করতে হবে। তাই static address অথবা SSH-tunnel পদ্ধতি বাস্তবে বেশি নির্ভরযোগ্য।

সঠিক password দিয়েও আমার login ব্যর্থ হয় কেন?

Webmin আপনার Unix password যাচাই করতে PAM ব্যবহার করে। Cloud image-গুলোতে সাধারণত default account-এর জন্য password নির্ধারিত থাকে না এবং কেবল key authentication চালু থাকে। তাই PAM-এর মিলিয়ে দেখার মতো কোনো password থাকে না এবং login প্রত্যাখ্যাত হয়। Server-এ sudo passwd youruser চালিয়ে একটি password সেট করুন, তারপর login করুন। /var/webmin/miniserv.log-এ Non-existent login as ... line থাকলে তার অর্থ username-টি প্রকৃত Unix account নয়।

সাধারণ SSH-এর তুলনায় Webmin কী কাজে ভালো?

Webmin system-এর বিভিন্ন অংশ খুঁজে পাওয়া এবং পরিচালনা সহজ করার একটি স্তর। প্রতিটি command মুখস্থ না করেই log file দেখা, user ও cron পরিচালনা, firewall rule সম্পাদনা এবং disk ও service-এর অবস্থা দেখার জন্য এটি কার্যকর। মাঝে মাঝে server পরিচালনা করা administrator বা বিভিন্ন দক্ষতার team-এর জন্য এটি বিশেষভাবে সুবিধাজনক। সাধারণ কাজের ক্ষেত্রে plain SSH দ্রুততর, script করা যায় এবং attack surface অনেক কম রাখে। অনেক administrator দুটিই ব্যবহার করেন: প্রতিদিনের কাজের জন্য SSH, আর মাঝে মাঝে point-and-click কাজের জন্য tunnel-এর আড়ালে localhost-এ bind করা Webmin। আপনার প্রকৃত প্রশ্ন যদি panel বনাম shell না হয়ে কোন panel ব্যবহার করবেন হয়, তাহলে আগে Cockpit এবং Webmin-এর তুলনা বিবেচনা করা ভালো। কারণ system-এর কতটা অংশ প্রতিটি panel পরিবর্তন করতে পারে এবং প্রতিটি আপনাকে কীভাবে authenticate করে, সে ক্ষেত্রে দুটির মধ্যে পার্থক্য রয়েছে।