Установка и настройка безопасности Webmin на Ubuntu 24.04
Установите Webmin на Ubuntu 24.04 и защитите панель управления. В руководстве описана настройка SSL от Let's Encrypt, двухфакторная аутентификация, Fail2ban и IP-фильтрация.
Что вы создаете
Webmin — это веб-панель управления, предоставляющая графический интерфейс в браузере для администрирования всего сервера Linux: пользователей, пакетов, заданий cron, межсетевого экрана, Apache, BIND, дисков и сотни других модулей, доступных по HTTPS через порт 10000. Установка состоит из трех команд и занимает около минуты. Причина, по которой большая часть этого руководства посвящена второй половине, заключается в том, что Webmin входит в систему как root и может выполнять любые действия, доступные пользователю root. Webmin с открытым доступом или без аутентификации — это не просто «риск при управлении», это полная компрометация сервера с готовой страницей входа. Поэтому установите его за десять минут, а затем потратьте оставшийся час на то, чтобы гарантировать доступ к нему только для вас.
Предварительные требования и одно важное предупреждение
Свежий VPS на базе Ubuntu 24.04 KVM с доступом root или пользователя с правами sudo. Webmin написан на Perl и потребляет мало ресурсов: 1 ГБ оперативной памяти более чем достаточно, в простое он занимает менее четверти гигабайта. Он ожидает подключений на порту TCP 10000 через собственный встроенный веб-сервер (miniserv.pl), а не через Apache или nginx, поэтому предварительная установка стороннего ПО не требуется.
Перед началом необходимо принять два решения. Первое касается учетной записи: Webmin выполняет аутентификацию через PAM, поэтому вы входите в систему как root или как пользователь из группы sudo, используя Unix-пароль этой учетной записи. Облачные образы обычно настроены только на вход по ключам без пароля для пользователя по умолчанию, а Webmin не может авторизовать пользователя без пароля. Сначала установите пароль с помощью sudo passwd youruser, иначе вход в систему будет невозможен при любых введенных данных.
Второе — это предупреждение: не открывайте порт 10000 для доступа из Интернета без ограничений. Заранее решите, будете ли вы подключаться к Webmin через SSH-туннель (рекомендуемый вариант, ничего не выставляется наружу) или ограничите доступ только своим 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 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 он выключен, но многие провайдеры включают его заранее), страница не загрузится вовсе; способы устранения этой проблемы описаны ниже. Если порт открыт, браузер выдаст полноэкранную блокировку: "Ваше подключение не защищено" с кодом NET::ERR_CERT_AUTHORITY_INVALID в Chrome или SEC_ERROR_UNKNOWN_ISSUER / "Внимание: потенциальная угроза безопасности" в Firefox. Это ожидаемое поведение, а не взлом. При установке Webmin сгенерировал самоподписанный сертификат (/etc/webmin/miniserv.pem), и поскольку ни один центр сертификации его не подтверждает, браузер отказывается доверять ему автоматически. Соединение остается зашифрованным, просто оно не верифицировано. Нажмите «Дополнительно» и «Перейти на сайт» (в Firefox — «Принять риск и продолжить»), позже мы заменим этот сертификат на корректный.
Войдите в систему под учетной записью 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 не должна быть доступна из открытого интернета, принимая попытки входа от всех сканеров в сети. У вас есть два приемлемых варианта, расположенных в порядке предпочтения. С этим вопросом сталкивается любой администратор при размещении сервисов, поэтому безопасность Vaultwarden зависит скорее от его административного интерфейса и файлов резервных копий, чем от алгоритмов шифрования.
SSH-туннель в варианте B — лучший выбор, так как он не открывает порты наружу. Список разрешенных IP-адресов в варианте A допустим, если у вас статический адрес. Отказ от обоих методов — именно та ошибка, которую призвано предотвратить это руководство. Если вы предпочитаете подключаться к Webmin через частную сеть, разместите сервер за собственным VPN-шлюзом WireGuard и привяжите Webmin к адресу внутри туннеля, а не к публичному IP.
Вариант A: ограничение доступа к Webmin по IP
В панели управления откройте Webmin, затем Webmin Configuration, затем IP Access Control. Выберите "Only allow from listed addresses" и введите ваш публичный IP-адрес, который можно узнать, выполнив curl ifconfig.me на вашем ноутбуке. Сохраните изменения. 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 исчезнет. Не нужно настраивать списки разрешенных IP, ничего не выставлено наружу, нет дополнительных сервисов для защиты.
Если вы установили 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, затем Webmin Configuration, затем SSL Encryption, затем вкладка Let's Encrypt. Введите имя хоста или IP-адрес, выберите метод проверки и отправьте запрос. Webmin получит сертификат, обновит строки certfile= и keyfile= в файле miniserv.conf и будет автоматически продлевать его до истечения срока действия. Перезагрузите страницу, и значок замка станет корректным.
Единственная реальная сложность: собственный сервер Webmin работает на порту 10000, а не 80, поэтому кто-то должен отвечать на http-01 challenge на 80 порту. Есть три способа сделать это. Если Apache или nginx уже обслуживают это имя на 80 порту, укажите путь к директории документов этого сайта для проверки (для IP-адреса потребуется Certbot 5.4 или новее). Если на 80 порту ничего нет, выберите встроенный веб-сервер Certbot — автономный режим (standalone mode), который Webmin добавил в версии 2.110: Certbot на короткое время запускает собственный веб-сервер на 80 порту, поэтому Certbot должен быть установлен, а 80 порт должен быть свободен и открыт в вашем файрволе. Либо используйте DNS-проверку, которая работает для имен хостов, но не для IP-адресов. Пакет certbot в Ubuntu 24.04 имеет версию 2.9, что подходит для автономной проверки имени хоста, но слишком устарело для IP-сертификатов; для них установите актуальную версию Certbot, например через snap, который по состоянию на октябрь 2026 года имел версию 5.8. Без выполнения этих условий запрос завершится ошибкой проверки. Механика работы, DNS-записи, проверка через 80 порт и продление аналогичны выпуску сертификата для любого веб-сайта. Если вам нужны подробности, руководство по TLS-сертификатам Let's Encrypt с использованием Certbot и 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 для блокировки попыток подбора пароля
Даже ограниченная точка входа для авторизации должна наказывать за повторяющиеся ошибки. 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, поэтому создание регулярных выражений или указание пути к логам не требуется.
Создайте /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 строка File list: отсутствует). Чтобы проверить работоспособность всей цепочки, намеренно введите неверные данные для входа несколько раз из другой сети, затем повторно выполните команду статуса и проследите, как растет Currently banned. Если значение не увеличивается, убедитесь, что вы не тестируете вход с адреса, входящего в ignoreip Fail2ban, и выполните journalctl SYSLOG_IDENTIFIER=webmin на сервере, чтобы подтвердить, что строки Invalid login действительно записываются. Если Fail2ban еще не установлен на этом сервере, в руководстве по установке Fail2ban в Ubuntu 24.04 для SSH описан процесс установки и настройки SSH-jail, которую следует использовать параллельно с этой.
Ограничение прав доступа пользователей Webmin
Не каждому пользователю панели управления требуются права root для всех операций. В разделе Webmin, then 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 в адресной строке браузера.
Тайм-аут страницы, ERR_CONNECTION_TIMED_OUT / "This site can't be reached". Запрос не доходит до Webmin. В Ubuntu это часто происходит из-за того, что ufw блокирует порт 10000, но проверьте это, прежде чем делать выводы. Выполните sudo ufw status. Если команда возвращает Status: inactive, значит ufw не блокирует трафик (в Ubuntu он по умолчанию отключен, а добавление правила разрешения не активирует его автоматически), поэтому ищите причину выше по сети, например, в настройках межсетевого экрана в панели управления вашего провайдера. Если команда возвращает Status: active, выполните sudo ufw status verbose, чтобы увидеть политику входящих соединений по умолчанию и общие правила; если входящий трафик запрещен, а порт 10000 отсутствует в списке, откройте его с помощью sudo ufw allow 10000/tcp или, что лучше, оставьте закрытым и используйте SSH-туннель из варианта B. Обратите внимание на разницу: тайм-аут означает, что межсетевой экран молча отбрасывает пакеты, тогда как 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-пароля, что является стандартом для облачных образов, использующих только SSH-ключи. Webmin выполняет аутентификацию через PAM по Unix-паролю, а для этого пользователя он не задан. Решение: выполните sudo passwd youruser на сервере, затем войдите в систему. Если /var/webmin/miniserv.log показывает Non-existent login as ..., значит, вы вводите имя пользователя, которого не существует в системе.
Для управления более чем двумя серверами автоматизация эффективнее, чем установка панели управления на каждый узел: ваш первый 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-имя, указывающее на сервер, или публичный IP-адрес сервера, если установлена версия Certbot 5.3 или новее. Для прохождения проверки порт 80 должен быть доступен; на запрос ответит либо уже работающий веб-сервер, либо встроенный сервер Certbot. Если вы подключаетесь к 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, редактирования правил межсетевого экрана, а также для мониторинга состояния дисков и служб без необходимости запоминать каждую команду. Это удобно для администраторов, работающих с системой нерегулярно, или для команд с разным уровнем подготовки. Обычный SSH быстрее, поддерживает скрипты и имеет гораздо меньшую поверхность атаки для повседневных задач. Многие администраторы используют оба инструмента: SSH для ежедневной работы и Webmin, привязанный к localhost за туннелем, для задач, требующих графического интерфейса. Если ваш вопрос заключается в выборе между панелями управления, а не между панелью и оболочкой, стоит сначала сравнить Cockpit и Webmin, так как они различаются по глубине управления системой и методам аутентификации.