SSD Nodes Learn Hosting plans →
راهنماها Matt Connorتوسط Matt Connor

نصب و ایمن‌سازی Webmin در Ubuntu 24.04

Webmin را در Ubuntu 24.04 نصب کنید و پورت 10000 را با تونل SSH یا فهرست مجاز IP، گواهی واقعی Let's Encrypt، احراز هویت دومرحله‌ای و Fail2ban ایمن کنید.

آنچه در حال ساخت آن هستید

Webmin یک پنل کنترل تحت وب است که یک رابط کاربری مرورگر برای کل سرور لینوکس، کاربران، بسته‌ها، cron jobها، فایروال، Apache، BIND، دیسک‌ها و صدها ماژول دیگر فراهم می‌کند و از طریق HTTPS روی پورت 10000 در دسترس است. نصب آن شامل سه دستور است و حدود یک دقیقه زمان می‌برد. دلیلی که این راهنما بخش عمده‌ای از طول خود را به نیمه دوم اختصاص داده، این است که Webmin با دسترسی root وارد سیستم می‌شود و می‌تواند هر کاری که root قادر به انجام آن است را انجام دهد. یک Webmin بدون محدودیت یا بدون احراز هویت، «یک ریسک مدیریتی» نیست؛ بلکه یک نفوذ کامل به سرور است که تنها یک صفحه ورود در مقابل آن قرار دارد. بنابراین آن را در ده دقیقه نصب کنید و سپس باقی ساعت را صرف اطمینان از این کنید که فقط شما به آن دسترسی دارید.

پیش‌نیازها و یک هشدار صادقانه

یک سرور مجازی KVM با سیستم‌عامل Ubuntu 24.04 و دسترسی root یا یک کاربر با امتیازات sudo. ابزار Webmin مبتنی بر Perl و سبک است؛ 1 گیگابایت رم برای آن کاملاً کافی است و در حالت idle، کمتر از یک‌چهارم گیگابایت مصرف می‌کند. این ابزار از طریق وب‌سرور داخلی خود (miniserv.pl) روی پورت TCP 10000 گوش می‌دهد و نیازی به Apache یا nginx ندارد، بنابراین پیش از نصب آن به هیچ نرم‌افزار دیگری نیاز نیست.

پیش از شروع، باید دو مورد را تعیین کنید. نخست، حسابی که با آن وارد می‌شوید: Webmin احراز هویت را از طریق PAM و بر اساس حساب‌های کاربری Unix انجام می‌دهد، بنابراین شما با حساب root یا کاربری در گروه sudo و با استفاده از رمز عبور Unix همان حساب وارد می‌شوید. در ایمیج‌های ابری، معمولاً ورود فقط با کلید SSH امکان‌پذیر است و رمز عبوری برای کاربر پیش‌فرض تنظیم نشده است؛ Webmin نمی‌تواند با حسابی که رمز عبور ندارد وارد شود. ابتدا با دستور sudo passwd youruser یک رمز عبور تنظیم کنید، در غیر این صورت ورود شما با هر رمز عبوری با شکست مواجه خواهد شد.

دوم، و این همان هشدار است: پورت 10000 را بدون ملاحظه روی اینترنت باز نگذارید و آن را به حال خود رها نکنید. همین حالا تصمیم بگیرید که آیا می‌خواهید از طریق یک تونل SSH به Webmin دسترسی داشته باشید (که توصیه می‌شود و هیچ پورتی را در معرض قرار نمی‌دهد) یا دسترسی را فقط به IP خود محدود کنید. این تصمیمِ واحد، تمام مراحل زیر را تحت تأثیر قرار می‌دهد، بنابراین پیش از دست‌کاری فایروال، هر دو گزینه را مطالعه کنید.

نصب 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 Webmin stable repository? (y/N) می‌پرسد؛ پاسخ y را وارد کنید. پس از پایان کار، بسته را نصب کنید. فلگ --install-recommends وابستگی‌های رایج Perl و ماژول‌های SSL را دریافت می‌کند تا ماژول‌های اختصاصی بعداً به دلیل خطای نبود کتابخانه دچار مشکل نشوند.

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) را مشاهده کنید و خطی که نشان می‌دهد miniserv.pl به 0.0.0.0:10000 متصل شده است. پس از استفاده از روش تونل در ادامه، این آدرس به 127.0.0.1:10000 تغییر می‌کند. اگر ss هیچ خروجی‌ای روی پورت 10000 نشان نداد، یعنی Webmin اجرا نشده است؛ پیش از ادامه، journalctl -u webmin -n 50 را مطالعه کنید.

اولین ورود و هشدار گواهی

مرورگر خود را به https://YOUR_SERVER_IP:10000 هدایت کنید. در یک سرور تازه، دو اتفاق رخ می‌دهد.

اگر ufw فعال باشد (ایمیج‌های سرور اوبونتو به‌صورت پیش‌فرض آن را غیرفعال نگه می‌دارند، اما بسیاری از ارائه‌دهندگان آن را از قبل فعال می‌کنند)، صفحه اصلاً بارگذاری نخواهد شد که در بخش حالت‌های شکست در ادامه به آن پرداخته شده است. اگر پورت باز باشد، مرورگر شما یک صفحه مسدودکننده کامل نمایش می‌دهد: "Your connection is not private" با کد NET::ERR_CERT_AUTHORITY_INVALID در کروم، یا SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" در فایرفاکس. این مورد انتظار است و به معنای نفوذ نیست. Webmin در زمان نصب یک گواهی خود-امضا (self-signed) تولید کرده است (/etc/webmin/miniserv.pem) و چون هیچ مرجع صدور گواهی (CA) آن را تایید نمی‌کند، مرورگر به‌طور خودکار به آن اعتماد نمی‌کند. اتصال همچنان رمزنگاری‌شده است؛ صرفاً تاییدیه شخص ثالث را ندارد. فعلاً با کلیک کردن (Advanced و سپس Proceed) از این مرحله عبور کنید؛ ما در ادامه این گواهی را به‌درستی جایگزین خواهیم کرد.

با root یا کاربر sudo خود و رمز عبور یونیکس آن وارد شوید تا به داشبورد اطلاعات سیستم هدایت شوید. یک اشتباه رایج در اینجا، تایپ کردن http:// به‌جای https:// است. سرویس miniserv در آن پورت به درخواست‌های HTTP معمولی با متن دقیق "This web server is running in SSL mode. Try the URL https://..." پاسخ می‌دهد؛ راه‌حل این است که در نوار آدرس، http را به https تغییر دهید.

تصمیم امنیتی: چگونه به Webmin دسترسی خواهید داشت؟

اکنون به بخش مهم ماجرا می‌رسیم. یک پنل با دسترسی معادل root نباید روی اینترنت آزاد قرار بگیرد تا به تلاش‌های ورود از سوی تمام اسکنرهای موجود در جهان پاسخ دهد. شما دو گزینه قابل دفاع دارید که به ترتیب اولویت ذکر شده‌اند. هر رابط مدیریتی در سناریوهای self-hosted با همین پرسش مواجه می‌شود؛ به همین دلیل است که امنیت Vaultwarden بیش از آنکه به رمزنگاری آن وابسته باشد، به نقطه پایانی مدیریت (admin endpoint) و فایل پشتیبان آن بستگی دارد.

تونل SSH در گزینه B انتخاب بهتری است، زیرا هیچ چیزی را در معرض دید قرار نمی‌دهد. لیست سفید IP در گزینه A نیز اگر آدرس شما ثابت (static) باشد، قابل قبول است. انجام ندادن هیچ‌کدام از این دو، دقیقاً همان اشتباهی است که این راهنما برای جلوگیری از آن نوشته شده است. اگر ترجیح می‌دهید به جای دو گزینه قبل، از طریق یک شبکه خصوصی به Webmin دسترسی داشته باشید، سرور را پشت یک شبکه خصوصی WireGuard قرار دهید و Webmin را به جای آدرس عمومی، روی آدرس تونل bind کنید.

گزینه A: محدود کردن Webmin به IP شما

در پنل، به مسیر Webmin و سپس Webmin Configuration و در نهایت IP Access Control بروید. گزینه "Only allow from listed addresses" را انتخاب کرده و IP عمومی خود را وارد کنید؛ می‌توانید این IP را با اجرای دستور curl ifconfig.me روی لپ‌تاپ خود پیدا کنید. تنظیمات را ذخیره کنید. Webmin این مقدار را در خط allow= در فایل /etc/webmin/miniserv.conf می‌نویسد و خود را بازنشانی می‌کند.

نکته مهم: اگر IP خانگی شما پویا (dynamic) است و تغییر می‌کند، یا آدرس را اشتباه وارد کنید، دسترسی خود را مسدود خواهید کرد. در این صورت مرورگر پیام "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 و تونل‌زنی از طریق SSH (توصیه شده)

بهتر از هر لیست مجاز (allowlist)، این است که سرویس اصلاً روی رابط عمومی (public interface) گوش ندهد. به miniserv بگویید فقط به loopback متصل شود، سپس از طریق یک تونل SSH رمزنگاری‌شده که از قبل به آن اعتماد دارید، به آن دسترسی پیدا کنید.

فایل /etc/webmin/miniserv.conf را ویرایش کرده و یک خط را اضافه یا تغییر دهید:

bind=127.0.0.1

سرویس را با sudo systemctl restart webmin مجدداً راه‌اندازی کنید. Webmin اکنون از طریق اینترنت غیرقابل دسترس است، اسکن پورت 10000 هیچ چیزی پیدا نمی‌کند و بررسی ss که قبلاً انجام دادید، اکنون نشان می‌دهد که سرویس به 127.0.0.1:10000 متصل شده است. از لپ‌تاپ خود، یک تونل باز کنید:

ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IP

آن نشست (session) را باز بگذارید و به https://localhost:10000 بروید. ترافیک درون SSH جریان می‌یابد که قبلاً توسط کلید شما احراز هویت و رمزنگاری شده است؛ بنابراین می‌توانید با خیال راحت گواهی خود-امضا (self-signed) را در اینجا بپذیرید، چرا که لایه SSH حفاظت اصلی را انجام می‌دهد. با بستن نشست SSH، دسترسی به Webmin قطع می‌شود. هیچ چیزی برای لیست مجاز وجود ندارد، هیچ چیزی در معرض دید نیست و هیچ سرویس اضافی برای ایمن‌سازی (harden) نیاز نخواهید داشت.

اگر bind=127.0.0.1 را تنظیم کردید و تونل را فراموش کردید، دسترسی از راه دور به‌سادگی قطع می‌شود؛ این عملکرد صحیح ویژگی است، نه یک خطا. بازیابی را مانند گزینه A انجام دهید: از کنسول، خط bind را حذف کنید یا bind=0.0.0.0 را تنظیم کرده و سپس سرویس را مجدداً راه‌اندازی کنید. این همان عادت تونل‌زنی است که برای دسترسی به یک ماشین توسعه از راه دور که Claude Code را در tmux اجرا می‌کند استفاده می‌کنید؛ یک نشست SSH، همه چیز خصوصی، و هیچ چیز اضافی روی رابط عمومی گوش نمی‌دهد.

جایگزینی گواهی خودامضا با یک گواهی معتبر

اگر Webmin را طبق «گزینه A» در معرض اینترنت قرار می‌دهید، برای حذف هشدار مرورگر از یک گواهی معتبر Let's Encrypt استفاده کنید. شما به یک نام برای گواهی و روشی برای دسترسی Let's Encrypt به پورت 80 جهت اعتبارسنجی نیاز دارید. این نام معمولاً یک نام DNS است، مثلاً panel.example.com، که رکورد A آن به سرور اشاره می‌کند. از نسخه Webmin 2.650 (منتشرشده در 25 ژوئن 2026)، این نام می‌تواند آدرس IP عمومی سرور نیز باشد، به شرطی که Certbot نسخه 5.3 یا بالاتر نصب شده باشد. Let's Encrypt گواهی‌های IP را فقط در پروفایل کوتاه‌مدت خود صادر می‌کند که حدود شش روز اعتبار دارند، بنابراین بازه تمدید خودکار Webmin را بر اساس روز تنظیم کنید؛ Webmin بازه طولانی‌تر را برای گواهی IP نمی‌پذیرد.

Webmin این قابلیت را به‌صورت داخلی دارد: به مسیر Webmin, then Webmin Configuration, then SSL Encryption, then the Let's Encrypt tab بروید. نام میزبان یا آدرس IP را وارد کنید، روش اعتبارسنجی را انتخاب کرده و درخواست دهید. Webmin گواهی را دریافت کرده، خطوط certfile= و keyfile= را در miniserv.conf برای شما به‌روزرسانی می‌کند و پیش از انقضا، آن را به‌طور خودکار تمدید می‌نماید. صفحه را رفرش کنید تا آیکون قفل بدون خطا نمایش داده شود.

تنها چالش واقعی این است که سرور داخلی Webmin روی پورت 10000 اجرا می‌شود، نه 80، بنابراین باید سرویسی به چالش http-01 در پورت 80 پاسخ دهد. برای این کار سه روش دارید. اگر Apache یا nginx قبلاً نام دامنه را روی پورت 80 سرویس‌دهی می‌کنند، مسیر اعتبارسنجی را به دایرکتوری document آن سایت هدایت کنید (برای آدرس IP، این کار به Certbot 5.4 یا بالاتر نیاز دارد). اگر پورت 80 خالی است، از وب‌سرور داخلی Certbot استفاده کنید؛ حالت standalone که Webmin در نسخه 2.110 اضافه کرد: Certbot به‌طور موقت وب‌سرور خود را روی پورت 80 اجرا می‌کند، بنابراین Certbot باید نصب باشد و پورت 80 در فایروال شما باز و آزاد باشد. یا از اعتبارسنجی DNS استفاده کنید که برای نام‌های میزبان کار می‌کند اما برای آدرس‌های IP خیر. بسته certbot در Ubuntu 24.04 نسخه 2.9 است که برای اعتبارسنجی standalone نام میزبان مناسب است اما برای گواهی‌های IP قدیمی است؛ برای این موارد، یک نسخه به‌روز Certbot مانند snap را نصب کنید که تا اکتبر 2026 به نسخه 5.8 رسیده بود. بدون رعایت این موارد، درخواست با خطای اعتبارسنجی شکست می‌خورد. مکانیسم‌ها، رکوردهای DNS، چالش پورت 80 و تمدید، مشابه صدور گواهی برای هر وب‌سایت دیگری است. اگر به اطلاعات زمینه‌ای نیاز دارید، راهنمای گواهی‌های TLS Let's Encrypt با Certbot و nginx جریان اعتبارسنجی و تنظیمات DNS را به‌طور دقیق توضیح می‌دهد. اگر از روش SSH-tunnel استفاده کرده‌اید، می‌توانید از این بخش صرف‌نظر کنید: گواهی خودامضا در پشت SSH مشکلی ندارد و یک گواهی معتبر صادرشده برای panel.example.com هنگام بازدید از https://localhost:10000 فقط باعث بروز هشدار عدم تطابق نام (name-mismatch) خواهد شد.

فعال‌سازی احراز هویت دو‌مرحله‌ای

رمز عبور به‌تنهایی محافظت ضعیفی برای پنل 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 برای مسدودسازی تلاش‌های ورود brute-force

حتی یک نقطهٔ ورود محدودشده نیز باید تلاش‌های ناموفق مکرر را جریمه کند. Webmin تلاش‌های ناموفق ورود را با فرمت webmin[12345]: Invalid login as root from 10.0.0.9 یا در صورت نامعتبر بودن نام کاربری (که حتی یک حساب Unix نیست) با فرمت Non-existent login as ... به syslog گزارش می‌دهد. در 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 تنظیمات را بازخوانی کنید و سپس فعال بودن jail را تأیید نمایید:

sudo fail2ban-client status webmin-auth

شما باید jail را در لیست ببینید که در ابتدا شمارندهٔ مسدودسازی آن صفر است (در backend ژورنال، خط File list: وجود ندارد). برای اثبات صحت عملکرد از ابتدا تا انتها، عمداً چند بار از یک شبکهٔ دیگر با اطلاعات نادرست وارد شوید، سپس دستور وضعیت را دوباره اجرا کنید و افزایش Currently banned را مشاهده کنید. اگر مقدار آن تغییر نکرد، مطمئن شوید که از آدرسی در لیست ignoreip مربوط به Fail2ban تست نمی‌کنید و دستور journalctl SYSLOG_IDENTIFIER=webmin را روی سرور اجرا کنید تا تأیید شود که خطوط Invalid login واقعاً در حال ثبت هستند. اگر Fail2ban هنوز روی این سیستم نصب نشده است، راهنمای نصب Fail2ban روی Ubuntu 24.04 برای SSH مراحل نصب و jail مربوط به SSH را که باید در کنار این مورد اجرا کنید، پوشش می‌دهد.

محدود کردن دسترسی کاربران Webmin

ضرورتی ندارد که هر کاربری که به پنل نیاز دارد، دسترسی root کامل داشته باشد. در مسیر Webmin, then Webmin Users، می‌توانید حساب‌های کاربری اضافی برای Webmin ایجاد کنید و به هر کدام فقط ماژول‌های مورد نیازشان را اختصاص دهید؛ برای مثال، یک اپراتور پشتیبان‌گیری که فقط به ماژول‌های cron و filesystem دسترسی دارد. با ویرایش یک کاربر، فهرستی از تمام ماژول‌ها نمایش داده می‌شود؛ با برداشتن تیک هر ماژول، آن گزینه از منوی کاربر حذف شده و دسترسی به URLهای مربوط به آن نیز مسدود می‌شود. این یک لایه دفاعی عمیق است: حتی اگر یک نشست Webmin با سطح دسترسی پایین سرقت شود، مهاجم نمی‌تواند /etc/shadow را تغییر دهد، چرا که ماژول Users در فهرست دسترسی‌های آن کاربر وجود ندارد.

به‌روز نگه داشتن Webmin

از آنجایی که شما Webmin را از مخزن apt نصب کرده‌اید، sudo apt update && sudo apt upgrade نسخه‌های جدید Webmin را همزمان با سایر بخش‌های سیستم دریافت می‌کند. وصله‌های امنیتی را سریعاً اعمال کنید؛ پنل‌های مدیریتی از اهداف محبوب مهاجمان هستند. Webmin همچنین می‌تواند از طریق مسیر Webmin, then Webmin Configuration, then Upgrade Webmin خود را به‌روزرسانی کند، اما روش apt در Ubuntu تمیزتر است، زیرا نسخه‌ها را با سایر بسته‌های مدیریت‌شدهٔ شما هماهنگ نگه می‌دارد. این موضوع را اختیاری ندانید: چندین مورد از CVEهای گذشتهٔ Webmin شامل باگ‌های اجرای کد از راه دور (RCE) بوده‌اند و تنها تفاوت بین یک سیستم «وصله‌شده» و «breached» (نفوذشده)، سرعتی بود که مدیر سیستم عملیات ارتقا را انجام می‌داد.

حالت‌های شکست و پیام‌های مرتبط

"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. این پیام در اولین بارگذاری نمایش داده می‌شود. علت: گواهی خودامضا (self-signed) که Webmin هنگام نصب تولید کرده، صادرکننده معتبری ندارد. این یک حمله نیست؛ کانال رمزنگاری شده است، اما تأیید نشده است. راه‌حل: فعلاً از هشدار عبور کنید و سپس یک گواهی معتبر Let’s Encrypt صادر کنید، یا اگر از طریق SSH tunnel به Webmin متصل می‌شوید، آن را برای همیشه بپذیرید.

"This web server is running in SSL mode. Try the URL https://..." شما http://server:10000 را تایپ کرده‌اید. miniserv روی آن پورت فقط با پروتکل TLS صحبت می‌کند و این موضوع را در قالب متن ساده به شما اطلاع می‌دهد. راه‌حل: در نوار آدرس، http را به https تغییر دهید.

وقفه در بارگذاری صفحه (Timeout)، ERR_CONNECTION_TIMED_OUT یا "This site can't be reached". درخواست هرگز به Webmin نمی‌رسد. در Ubuntu این مشکل اغلب به دلیل مسدود شدن پورت 10000 توسط ufw است، اما پیش از نتیجه‌گیری، آن را بررسی کنید. دستور sudo ufw status را اجرا کنید. اگر خروجی Status: inactive باشد، ufw چیزی را مسدود نمی‌کند (Ubuntu آن را به‌صورت غیرفعال عرضه می‌کند و افزودن یک قانون allow به معنای فعال‌سازی آن نیست)، بنابراین در لایه‌های بالاتر شبکه، مانند فایروال موجود در پنل مدیریت ارائه‌دهنده سرور، جستجو کنید. اگر خروجی Status: active باشد، دستور sudo ufw status verbose را اجرا کنید تا سیاست پیش‌فرض ورودی و قوانین کلی را ببینید؛ اگر ترافیک ورودی مسدود است و پورت 10000 در لیست نیست، یا آن را با sudo ufw allow 10000/tcp باز کنید یا بهتر است آن را بسته نگه دارید و از SSH tunnel در گزینه B استفاده کنید. به این تفاوت دقت کنید: timeout به این معناست که فایروال بسته‌ها را بی‌سروصدا دور می‌اندازد، در حالی که ERR_CONNECTION_REFUSED به این معناست که پورت در دسترس است اما Webmin در حال اجرا نیست؛ sudo systemctl status webmin را بررسی کنید.

"Access denied for <your IP>." شما در گزینه A قابلیت IP Access Control را تنظیم کرده‌اید و آدرس فعلی شما در لیست مجاز نیست، یا IP شما پویا بوده و تغییر کرده، یا در تایپ آن اشتباهی رخ داده است. راه بازگشتی از طریق مرورگر وجود ندارد. راه‌حل از طریق کنسول: خط allow= را در فایل /etc/webmin/miniserv.conf ویرایش کنید، آن را اصلاح یا حذف کنید و سپس sudo systemctl restart webmin را اجرا کنید.

"Login failed. Please try again." با وجود اطمینان از صحت اطلاعات کاربری. حساب کاربری رمز عبور Unix ندارد، که در ایمیج‌های ابری با احراز هویت صرفاً کلیدی (key-only) استاندارد است. Webmin از طریق PAM با رمز عبور Unix احراز هویت می‌کند و چنین رمز عبوری برای کاربر وجود ندارد. راه‌حل: دستور sudo passwd youruser را روی سرور اجرا کنید و سپس وارد شوید. اگر /var/webmin/miniserv.log مقدار Non-existent login as ... را نشان می‌دهد، نام کاربری‌ای را وارد می‌کنید که اصلاً یک حساب Unix نیست.

برای مدیریت بیش از چند سرور، اتوماسیون مقیاس‌پذیری بهتری نسبت به نصب پنل مدیریت روی تک‌تک سرورها دارد: اولین Ansible playbook خود نقطه شروع این مسیر است.

FAQ

آیا قرار دادن Webmin روی اینترنت عمومی امن است؟

با Webmin که در معرض اینترنت قرار دارد، مانند یک root shell با صفحه ورود رفتار کنید، زیرا دقیقاً همین است. این کار تنها در صورت لایه‌بندی امن است: استفاده از گواهی معتبر، احراز هویت دو مرحله‌ای، Fail2ban و یا یک لیست مجاز IP محدود، و یا بهتر از همه، عدم قرارگیری در معرض اینترنت. کم‌خطرترین پیکربندی، اتصال Webmin به 127.0.0.1 و دسترسی به آن از طریق یک SSH tunnel است، به‌طوری که پورت 10000 به هیچ درخواستی از اینترنت آزاد پاسخ ندهد.

چگونه هشدار گواهی Webmin را حذف کنم؟

این هشدار (NET::ERR_CERT_AUTHORITY_INVALID) به این دلیل ظاهر می‌شود که Webmin با یک گواهی خود-امضا (self-signed) عرضه می‌شود. یک گواهی معتبر از طریق Webmin، بخش Webmin Configuration، قسمت SSL Encryption و سپس Let's Encrypt دریافت کنید. از یک نام دامنه که به سرور اشاره دارد استفاده کنید، یا اگر Certbot نسخه 5.3 یا بالاتر نصب است، از IP عمومی سرور استفاده کنید. پورت 80 باید برای انجام چالش در دسترس باشد؛ این درخواست توسط یک وب‌سرور موجود یا سرور مستقل خودِ Certbot پاسخ داده می‌شود. اگر همیشه از طریق SSH tunnel به localhost به Webmin دسترسی دارید، این هشدار بی‌خطر است؛ SSH پیش‌تر اتصال را رمزنگاری و احراز هویت کرده است و می‌توانید با خیال راحت گواهی خود-امضا را بپذیرید.

چگونه دسترسی به Webmin را فقط به IP خودم محدود کنم؟

به Webmin بروید، بخش Webmin Configuration، قسمت IP Access Control را انتخاب کنید، گزینه "Only allow from listed addresses" را برگزینید و IP عمومی خود را از curl ifconfig.me وارد کنید. Webmin این تنظیم را در خط allow= از فایل /etc/webmin/miniserv.conf ذخیره می‌کند. مراقب IPهای خانگی پویا (dynamic) باشید: اگر IP تغییر کند، دسترسی شما قطع می‌شود و باید خط allow= را از طریق کنسول سرور اصلاح کنید؛ بنابراین در عمل، استفاده از یک آدرس ثابت یا روش SSH-tunnel مطمئن‌تر است.

چرا با وجود رمز عبور صحیح، ورود من با شکست مواجه می‌شود؟

Webmin از طریق PAM با رمز عبور یونیکس شما احراز هویت می‌کند. ایمیج‌های ابری معمولاً فقط با کلید هستند و رمز عبوری برای حساب پیش‌فرض تنظیم نشده است، بنابراین چیزی برای تطبیق در PAM وجود ندارد و ورود رد می‌شود. دستور sudo passwd youruser را روی سرور اجرا کنید تا رمز عبور تنظیم شود، سپس وارد شوید. وجود خط Non-existent login as ... در /var/webmin/miniserv.log به این معنی است که نام کاربری، یک حساب یونیکس واقعی نیست.

Webmin در مقایسه با SSH ساده چه کاربردی دارد؟

Webmin یک لایه برای سهولت و کشف قابلیت‌هاست. این ابزار برای مرور فایل‌های لاگ، مدیریت کاربران و cron، ویرایش قوانین فایروال و مشاهده وضعیت دیسک و سرویس‌ها بدون نیاز به حفظ کردن تک‌تک دستورات، بسیار مفید است و برای مدیران سیستمِ گاه‌به‌گاه یا تیم‌هایی با مهارت‌های ترکیبی کارایی دارد. SSH ساده سریع‌تر است، قابلیت اسکریپت‌نویسی دارد و سطح حمله بسیار کمتری برای کارهای روزمره ایجاد می‌کند. بسیاری از مدیران از هر دو استفاده می‌کنند: SSH برای کارهای روزانه و Webmin که روی localhost پشت یک tunnel قرار دارد برای کارهای موردی که نیاز به رابط گرافیکی دارند. اگر سوال اصلی شما انتخاب بین پنل‌های مختلف است تا پنل در برابر shell، ارزش دارد که ابتدا مقایسه Cockpit با Webmin را بررسی کنید، زیرا این دو از نظر میزان تغییراتی که می‌توانند در سیستم ایجاد کنند و نحوه احراز هویت، با یکدیگر متفاوت هستند.