SSD Nodes Learn Hosting plans →
راهنماها Matt Connorتوسط Matt Connor · به‌روزرسانی شده 2026-08-13

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

نصب Webmin روی Ubuntu 24.04 در کمتر از یک دقیقه. با این راهنما پورت 10000 را با استفاده از IP allowlist، گواهی 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 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 استفاده کنید. شما به یک نام DNS، مثلاً panel.example.com، نیاز دارید که رکورد A آن به سرور اشاره کند و در زمان اعتبارسنجی، سرویسی به چالش HTTP روی پورت 80 پاسخ دهد.

Webmin این قابلیت را به‌صورت داخلی دارد: به مسیر Webmin, then Webmin Configuration, then SSL Encryption, then the Let's Encrypt tab بروید. نام دامنه را وارد کنید، «دایرکتوری ریشه وب‌سایت» (website root directory) را به مسیری که برای آن دامنه روی پورت 80 سرو می‌شود اشاره دهید و درخواست را ثبت کنید. Webmin گواهی را دریافت کرده، خطوط certfile= و keyfile= را در فایل miniserv.conf برای شما به‌روزرسانی می‌کند و پیش از انقضا، آن را به‌طور خودکار تمدید می‌نماید. صفحه را رفرش کنید تا آیکون قفل بدون خطا نمایش داده شود.

تنها چالش واقعی این است که سرور داخلی Webmin روی پورت 10000 اجرا می‌شود، نه پورت 80؛ بنابراین چالش http-01 نیازمند یک وب‌سرور واقعی مانند Apache یا nginx است که برای دامنه panel.example.com روی پورت 80 پاسخگو باشد، یا اینکه باید از اعتبارسنجی مبتنی بر DNS استفاده کنید. در سروری که فقط Webmin دارد و هیچ سرویسی روی پورت 80 فعال نیست، درخواست تا زمانی که راهی برای دسترسی Let's Encrypt به فایل چالش فراهم نکنید، با خطای اعتبارسنجی مواجه می‌شود. مکانیزم کار، رکوردهای DNS، چالش پورت 80 و تمدید گواهی، مشابه صدور گواهی برای هر وب‌سایت دیگری است. اگر به جزئیات فنی این فرآیند نیاز دارید، راهنمای دریافت گواهی TLS از Let's Encrypt با Certbot و nginx، جریان اعتبارسنجی و تنظیمات DNS را به‌طور کامل توضیح داده است. اگر از روش تونل SSH استفاده کرده‌اید، می‌توانید از این بخش صرف‌نظر کنید: گواهی خودامضا در پشت 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 وضعیت را بررسی کنید؛ اگر پورت 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 را تنظیم کرده‌اید و آدرس فعلی شما در لیست مجاز نیست، یا IP شما پویا بوده و تغییر کرده، یا در وارد کردن آن اشتباه تایپی رخ داده است. راهی برای بازگشت از طریق مرورگر وجود ندارد. راه‌حل از طریق کنسول: خط allow= را در فایل /etc/webmin/miniserv.conf ویرایش یا حذف کنید و سپس دستور sudo systemctl restart webmin را اجرا کنید.

"Login failed. Please try again." با وجود اطمینان از صحت اطلاعات کاربری. حساب کاربری رمز عبور Unix ندارد، که در imageهای ابری با احراز هویت صرفاً مبتنی بر کلید (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 دریافت کنید. برای این کار از یک نام دامنه استفاده کنید که به سرور اشاره دارد و سرویسی برای پاسخ به چالش پورت 80 جهت اعتبارسنجی در دسترس است. اگر همیشه از طریق SSH tunnel به localhost به Webmin دسترسی دارید، این هشدار بی‌خطر است؛ SSH قبلاً اتصال را رمزنگاری و احراز هویت کرده است و می‌توانید با خیال راحت گواهی self-signed را بپذیرید.

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

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

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

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

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

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