SSD Nodes Learn
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-07-24

Як встановити Webmin на Ubuntu 24.04

Покрокова інструкція встановлення Webmin на Ubuntu 24.04. Налаштування захисту порту 10000 через SSH tunnel, Let's Encrypt, 2FA та Fail2ban для безпеки сервера.

Що ви створюєте

Webmin — це веб-панель керування, яка надає графічний інтерфейс через браузер для всієї Linux-системи. Вона дозволяє керувати користувачами, пакетами, завданнями cron, firewall, Apache, BIND, дисками та сотнею інших модулів через HTTPS на порту 10000. Процес встановлення складається з трьох команд і триває близько однієї хвилини. Більша частина цього посібника присвячена другій половині тексту, оскільки Webmin виконується від імені root і має ті ж права, що й root. Webmin з відкритим доступом або без автентифікації — це не просто «ризик, яким треба керувати»; це повний компрометрація сервера, перед яким просто стоїть сторінка входу. Тому встановіть його за десять хвилин, а потім витратьте решту години на налаштування доступу лише для вас.

Prerequisites and one honest warning

Чиста Ubuntu 24.04 KVM VPS з правами root або користувачем sudo. Webmin написаний на Perl і споживає мало ресурсів — 1 GB RAM цілком достатньо, а в стані спокою він використовує менше 0.25 GB. Він прослуховує TCP 10000 через власний вбудований web server (miniserv.pl), а не через Apache або nginx, тому попередньо встановлювати нічого не потрібно.

Перед початком роботи необхідно визначити дві речі. По-перше, обліковий запис для входу: Webmin використовує PAM для автентифікації через Unix-акаунти, тому ви входите як root або як користувач у групі sudo, використовуючи Unix password цього акаунта. Хмарні образи зазвичай використовують лише SSH-ключі, і для стандартного користувача пароль не встановлено; Webmin не може увійти в акаунт без пароля. Спочатку встановіть пароль за допомогою sudo passwd youruser, інакше вхід не вдасться, незалежно від введених даних.

По-друге, це попередження: не відкривайте порт 10000 для всього інтернету. Одразу вирішіть, чи будете ви підключатися до Webmin через SSH tunnel (рекомендовано, жодних відкритих портів), чи обмежите доступ лише вашою 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. Це запобігає помилкам відсутності бібліотек для окремих модулів у майбутньому.

sudo apt-get install --install-recommends webmin

Webmin раніше змінював назву цього скрипта — у старих посібниках згадується setup-repos.sh. Якщо за прямим посиланням виникає помилка 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 увімкнено — у стандартному образі Ubuntu він вимкнено, але багато провайдерів умисно вмикають його — сторінка взагалі не завантажиться (це описано в розділі про помилки нижче). Якщо порт відкритий, браузер покаже повносторінкове блокування: "Your connection is not private" з кодом NET::ERR_CERT_AUTHORITY_INVALID у Chrome, або SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" у Firefox. Це очікувана поведінка, а не злам. Під час встановлення Webmin створив самопідписаний сертифікат (/etc/webmin/miniserv.pem), і оскільки жоден центр сертифікації не підтверджує його справжність, браузер відмовляється йому довіряти. З'єднання все одно зашифроване; воно просто не підтверджене. Наразі натисніть "Advanced", а потім "Proceed" — ми правильно замінимо цей сертифікат далі.

Увійдіть за допомогою root або під обліковим записом sudo та його Unix-паролем, і ви потрапите на панель System Information. Поширена помилка — введення http:// замість https://. На цьому порту miniserv відповідає через звичайний HTTP текстом "This web server is running in SSL mode. Try the URL https://..." — рішення полягає в тому, щоб змінити http на https в адресному рядку.

Рішення щодо безпеки: як ви будете підключатися до Webmin?

Тепер перейдемо до важливого. Панель з правами root не повинна бути доступна через відкритий інтернет для всіх сканерів у світі. Є два прийнятних варіанти, у порядку їх пріоритетності.

Варіант B з SSH-тунелем є кращим, оскільки він взагалі не відкриває доступ зовні. Варіант A зі списком дозволених IP-адрес є прийнятним, якщо ваша адреса статична. Невикористання жодного з цих методів — це саме та помилка, якої має допомагати уникнути цей посібник. Якщо ви хочете підключатися до Webmin через приватну мережу, розмістіть сервер за self-hosted WireGuard VPN і прив'яжіть Webmin до адреси тунелю замість публічної.

Варіант A: обмеження доступу Webmin вашою IP-адресою

У панелі перейдіть у Webmin, потім Webmin Configuration, потім IP Access Control. Виберіть "Only allow from listed addresses" та введіть вашу публічну IP-адресу. Її можна дізнатися, виконавши команду curl ifconfig.me на вашому ноутбуці. Натисніть Save. Webmin запише ці дані у рядок allow= у файлі /etc/webmin/miniserv.conf та перезапуститься.

Ризик: якщо ваша домашня 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= повністю відкриває доступ. Використовуйте цей метод лише для відновлення доступу, після чого негайно встановіть правильне значення.

Option B: прив'язка до localhost та тунелювання через SSH (рекомендовано)

Найкращий спосіб — взагалі не відкривати прослуховування на публічному інтерфейсі. Налаштуйте 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

Залиште цю сесію відкритою та перейдіть за адресою https://localhost:10000. Трафік передається всередині SSH, який уже автентифіковано вашим ключем і зашифровано, тому ви можете безпечно прийняти самопідписаний сертифікат — захист забезпечує рівень SSH. Закрийте SSH-сесію, і Webmin стане недоступним. Не потрібно створювати списки дозволених (allowlist) або відкривати порти — нічого зайвого не прослуховується.

Якщо ви налаштуєте bind=127.0.0.1 і забудете про тунель, віддалений доступ просто перестане працювати — це штатна робота функції, а не помилка. Відновіть доступ так само, як у Option A: через консоль видаліть рядок bind або встановіть bind=0.0.0.0, а потім перезапустіть сервіс. Це такий самий метод тунелювання, який використовується для доступу до віддаленої машини розробки з Claude Code у tmux — одна SSH-сесія, усе приховано, жодних зайвих сервісів на публічному інтерфейсі.

Замініть самопідписаний сертифікат на справжній

Якщо ви використовуєте Webmin на хостнеймі згідно з Option A, приберіть попередження браузера за допомогою справжнього сертифіката Let's Encrypt. Вам потрібне DNS-ім'я — наприклад, panel.example.com — з A-записом, що вказує на сервер, а також сервіс, який відповідатиме на HTTP-виклик (challenge) через порт 80 під час перевірки.

Webmin має вбудовану функцію: Webmin, потім Webmin Configuration, потім SSL Encryption, потім вкладка Let's Encrypt. Введіть хостнейм, вкажіть шлях до "website root directory", який обслуговується на порту 80 для цього домену, і запустіть запит. Webmin отримає сертифікат, оновить рядки certfile= та keyfile= у файлі miniserv.conf та автоматично оновлюватиме його до закінчення терміну дії. Перезавантажте сторінку, і значок замка стане чистим.

Єдина проблема: власний сервер Webmin працює на порту 10000, а не 80, тому для проходження http-01 challenge потрібен справжній вебсервер — Apache або nginx, — який відповідатиме за panel.example.com на порту 80, або ж використання DNS-валідації. На системі, де встановлено лише Webmin і на порту 80 нічого не працює, запит завершиться помилкою валідації, доки ви не надасте Let's Encrypt можливість отримати доступ до файлу перевірки. Механізм — DNS-записи, перевірка через порт 80 та оновлення — такий самий, як і при випуску сертифіката для будь-якого вебсайту. Якщо вам потрібні деталі, посібник Let's Encrypt TLS certificates with Certbot and nginx детально описує процес валідації та налаштування DNS. Якщо ви використовуєте SSH-тунель, цей розділ можна повністю пропустити: самопідписаний сертифікат є прийнятним через SSH, а справжній сертифікат, виданий для panel.example.com, все одно викликатиме попередження про невідповідність імені при переході на https://localhost:10000.

Увімкніть двофакторну автентифікацію

Пароля недостатньо для захисту панелі 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 передає повідомлення про невдалі входи в syslog у форматі webmin[12345]: Invalid login as root from 10.0.0.9 або Non-existent login as ... для користувачів, яких не існує в Unix. На 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 має бути лічильник блокувань (ban counter), що дорівнює нулю (у backend journal рядки File list: відсутні). Щоб перевірити роботу системи, навмисно зробіть кілька невдалих спроб входу з іншої мережі, потім знову запустіть команду status і спостерігайте за зростанням Currently banned. Якщо лічильник не змінюється, переконайтеся, що ваша IP-адреса не входить до списку ignoreip, і запустіть journalctl SYSLOG_IDENTIFIER=webmin на сервері, щоб перевірити наявність рядків Invalid login у логах. Якщо Fail2ban ще не встановлено, посібник Fail2ban на Ubuntu 24.04 для SSH містить інструкції з встановлення та налаштування SSH jail, який слід використовувати разом із цим.

Обмеження прав доступу для користувачів Webmin

Не всім користувачам панелі потрібні права root. У розділі Webmin, потім Webmin Users можна створити окремі облікові записи та надати кожному лише необхідні модулі. Наприклад, оператору резервного копіювання можна дозволити доступ лише до модулів cron та filesystem. При редагуванні користувача відображається список усіх модулів; зняття позначки з модуля видаляє його з меню користувача та блокує відповідні URL. Це забезпечує етапний захист: навіть якщо сесія користувача з низькими привілеями буде викрадена, зловмисник не зможе змінити /etc/shadow, якщо модуль Users відсутній у його списку.

Оновлення Webmin

Оскільки ви встановили пакет із репозиторію apt, sudo apt update && sudo apt upgrade завантажує нові версії Webmin разом із рештою системи. Встановлюйте патчі негайно — панелі керування є пріоритетною ціллю для атак. Webmin також можна оновити самостійно через Webmin, потім Webmin Configuration, потім Upgrade Webmin, але шлях через apt є кращим для Ubuntu, оскільки він забезпечує узгодженість версій із іншою системою керування пакетами. Це не є необов'язковим: кілька попередніх CVE у Webmin були помилками, що дозволяли виконувати віддалений код. Різниця між «встановлено патч» та «система зламана» полягала лише у швидкості виконання оновлення адміністратором.

Режими помилок та відповідні повідомлення

"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. Відображається під час першого завантаження. Причина: самопідписаний сертифікат, створений Webmin під час встановлення, не має довіреного видавця. Це не атака; канал зашифровано, але автентичність не підтверджено. Виправлення: тимчасово ігноруйте попередження, потім отримайте справжній сертифікат Let's Encrypt або прийміть його назавжди, якщо ви підключаєтеся до Webmin через SSH-тунель.

"This web server is running in SSL mode. Try the URL https://..." Ви ввели http://server:10000. Порт miniserv підтримує лише TLS і повідомляє про це у відкритому вигляді. Виправлення: змініть http на https в адресному рядку.

Page times out — ERR_CONNECTION_TIMED_OUT / "This site can't be reached". Запит не доходить до Webmin. В Ubuntu це майже завжди означає, що ufw блокує порт 10000. Перевірте за допомогою sudo ufw status; якщо порт 10000 відсутній у списку, відкрийте його за допомогою sudo ufw allow 10000/tcp або, що краще, залиште закритим і використовуйте SSH-тунель з Варіанту B. Зверніть увагу на різницю: timeout означає, що брандмауер беззвучно відкидає пакети, тоді як ERR_CONNECTION_REFUSED означає, що порт доступний, але Webmin не запущено — перевірте sudo systemctl status webmin.

"Access denied for <your IP>." Ви налаштували IP Access Control у Варіанті A, і ваша поточна адреса відсутня у списку дозволених — це може бути динамічна IP-адреса, що змінилася, або помилка в написанні. Через браузер доступ неможливо відновити. Виправлення через консоль: відредагуйте рядок allow= у файлі /etc/webmin/miniserv.conf, виправте або видаліть його, а потім виконайте sudo systemctl restart webmin.

"Login failed. Please try again." при використанні правильних облікових даних. У облікового запису немає пароля Unix, що є стандартним для хмарних образів лише з ключами. Webmin використовує PAM для автентифікації за паролем Unix, а цей пароль для користувача відсутній. Виправлення: виконайте sudo passwd youruser на сервері, потім увійдіть. Якщо /var/webmin/miniserv.log показує Non-existent login as ..., ви вводите ім'я користувача, яке взагалі не є обліковим записом Unix.

Для керування великою кількістю серверів автоматизація ефективніша за встановлення панелі керування на кожній машині: ваш перший Ansible playbook — це початок роботи з автоматизацією.

FAQ

Чи безпечно відкривати Webmin для публічного інтернету?

Вважайте Webmin, доступний через інтернет, оболонкою root з паролем, оскільки це саме так і працює. Доступ є достатньо безпечним лише за умови використання кількох рівнів захисту: справжнього сертифіката, двофакторної автентифікації, Fail2ban та або жорсткого списку дозволених IP-адрес, або, що краще, повної відсутності публічного доступу. Найменш ризикована конфігурація — це прив'язка Webmin до 127.0.0.1 та доступ через SSH-тунель, тоді порт 10000 не відповідатиме нікому в відкритому інтернеті.

Як прибрати попередження про сертифікат Webmin?

Попередження (NET::ERR_CERT_AUTHORITY_INVALID) з'являється, тому що Webmin постачається з самопідписаним сертифікатом. Випустіть справжній сертифікат у Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt, використовуючи DNS-ім'я, яке вказує на сервер із сервісом, що проходить перевірку port-80. Якщо ви використовуєте Webmin лише через SSH-тунель до localhost, попередження не є небезпечним — 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-адресами: якщо вона зміниться, ви втратите доступ і будете змушені виправити рядок allow= через консоль сервера, тому статична адреса або метод SSH-тунелю є надійнішими на практиці.

Чому вхід не вдається навіть з правильним паролем?

Webmin виконує автентифікацію через PAM за допомогою вашого пароля Unix. Хмарні образи зазвичай використовують лише ключі, а пароль для облікового запису за замовчуванням не встановлено — тому PAM немає з чим порівнювати дані, і вхід відхиляється. Виконайте sudo passwd youruser на сервері, щоб встановити пароль, після чого увійдіть у систему. Рядок Non-existent login as ... у /var/webmin/miniserv.log означає, що саме ім'я користувача не є справжнім обліковим записом Unix.

Чим Webmin кращий за звичайний SSH?

Webmin — це шар для зручності та візуалізації налаштувань. Він дійсно корисний для перегляду лог-файлів, керування користувачами та cron, редагування правил firewall, а також для перевірки стану дисків та сервісів без необхідності запам'ятовувати кожну команду — це зручно для адміністраторів, які працюють не постійно, або для команд з різним рівнем кваліфікації. Звичайний SSH працює швидше, підтримує скрипти та має значно меншу поверхню атаки для повсякденних завдань. Багато адміністраторів використовують обидва методи: SSH для щоденної роботи та Webmin, прив'язаний до localhost за тунелем, для разових завдань через графічний інтерфейс.