Установка и настройка 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 без аутентификации — это не просто «риск, требующий управления»; это полный компромисс сервера, защищенный только страницей входа. Поэтому установите его за десять минут, а затем потратьте оставшееся время на настройку доступа только для вас.
Предварительные требования и важное предупреждение
Чистая Ubuntu 24.04 KVM VPS с правами root или пользователя sudo. Webmin написан на Perl и потребляет мало ресурсов — 1 GB RAM будет достаточно, а в состоянии ожидания потребление составляет менее четверти гигабайта. Сервис прослушивает TCP 10000 через собственный встроенный веб-сервер (miniserv.pl), а не через Apache или nginx, поэтому предварительная установка других веб-серверов не требуется.
Перед началом работы необходимо принять два решения. Во-первых, выберите учетную запись для входа: Webmin использует PAM для аутентификации через Unix-аккаунты. Вы должны входить под root или пользователем из группы sudo, используя Unix-пароль этой учетной записи. В облачных образах у стандартного пользователя часто настроен только вход по ключам, а пароль не задан; Webmin не может войти в систему под учетной записью без пароля. Сначала установите пароль с помощью sudo passwd youruser, иначе вход не удастся при любом вводе.
Во-вторых, это предупреждение: не открывайте порт 10000 для всего интернета. Сразу решите, будете ли вы подключаться к Webmin через SSH-туннель (рекомендуется, так как данные не будут открыты) или ограничите доступ только вашим 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 webminWebmin ранее менял название этого скрипта — в старых руководствах указан 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 он отключен, но многие провайдеры включают его по умолчанию — страница не загрузится. Ошибки загрузки описаны ниже. Если порт открыт, браузер заблокирует страницу: в Chrome появится сообщение "Your connection is not private" с кодом NET::ERR_CERT_AUTHORITY_INVALID, в Firefox — SEC_ERROR_UNKNOWN_ISSUER или "Warning: Potential Security Risk Ahead". Это ожидаемое поведение, а не взлом. При установке 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 allowlist допустим, если у вас статический 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= полностью открывает доступ. Используйте этот метод только для восстановления доступа, после чего немедленно установите корректное значение.
Вариант 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 и забудете про туннель, удаленный доступ прекратится — это штатная работа функции, а не ошибка. Восстановите доступ так же, как в Варианте A: через консоль удалите строку bind или установите bind=0.0.0.0, затем перезапустите сервис. Это тот же метод туннелирования, который используется для доступа к удаленной машине разработки с Claude Code в tmux — одна SSH-сессия обеспечивает полную конфиденциальность, и на публичном интерфейсе не остается лишних слушающих сервисов.
Замените самоподписанный сертификат на настоящий
Если вы используете Webmin на хостном имени согласно Варианту 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 требуется настоящий веб-сервер (Apache или nginx), отвечающий по адресу panel.example.com на порту 80, либо использование проверки через DNS. На сервере, где установлен только Webmin и порт 80 не занят, запрос завершится ошибкой валидации, пока Вы не предоставите Let's Encrypt доступ к файлу проверки. Механизм работы — DNS-записи, проверка через порт 80 и продление — такой же, как при выпуске сертификата для любого веб-сайта. Если Вам нужны подробности, ознакомьтесь с руководством Let's Encrypt TLS certificates with Certbot and nginx guide, где детально описаны процесс валидации и настройка 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 для блокировки перебора паролей
Даже ограниченные эндпоинты входа должны реагировать на повторяющиеся ошибки авторизации. 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 с нулевым счетчиком блокировок (при использовании journal backend строки 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 shell с веб-интерфейсом авторизации, так как это именно так. Безопасность возможна только при использовании нескольких уровней защиты: действующего сертификата, двухфакторной аутентификации, 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 на сервере, чтобы установить пароль, затем войдите в систему. Если в /var/webmin/miniserv.log обнаружена строка Non-existent login as ..., это означает, что указанное имя пользователя не является реальной учетной записью Unix.
Чем Webmin лучше обычного SSH?
Webmin — это уровень удобства и наглядности. Он полезен для просмотра лог-файлов, управления пользователями и cron, редактирования правил firewall, а также для мониторинга состояния дисков и служб без необходимости запоминать все команды. Это удобно для администраторов, выполняющих редкие задачи, или для команд с разным уровнем навыков. Обычный SSH работает быстрее, лучше подходит для скриптов и имеет гораздо меньшую поверхность атаки при выполнении рутинных работ. Многие администраторы используют оба варианта: SSH для повседневной работы и Webmin, привязанный к localhost за туннелем, для разовых задач через графический интерфейс.