Главная » Панели управления » Webmin и Virtualmin: установка на Debian, Ubuntu и AlmaLinux

Webmin и Virtualmin: установка на Debian, Ubuntu и AlmaLinux

Webmin — веб-интерфейс для администрирования Linux-сервера: пользователи, службы, пакеты, cron, файрвол, конфиги Apache, BIND, Postfix и десятков других программ. Virtualmin — модуль поверх Webmin, который превращает его в панель хостинга: домены, сайты, почтовые ящики, базы данных и DNS-зоны создаются одной формой.

Коротко: Webmin ставится из официального репозитория скриптом webmin-setup-repo.sh (старое имя setup-repos.sh до сих пор работает и просто вызывает новый скрипт), после чего пакет обновляется вместе с системой через apt или dnf. Virtualmin ставится только на чистый сервер скриптом virtualmin-install.sh — он сам подключит репозитории, поставит Webmin и весь стек LAMP или LEMP с почтой и DNS.

Главное правило безопасности: порт 10000 не должен быть открыт всему интернету. Доступ — по SSH-туннелю, через VPN или с фиксированных IP, плюс двухфакторная аутентификация и fail2ban. Ниже — установка на Debian 12/13, Ubuntu 24.04 и AlmaLinux / Rocky Linux 9/10, защита и типичные проблемы.

Webmin или Virtualmin: что ставить

Это разные задачи, и путать их не стоит.

  • Только Webmin — если сервер уже настроен руками или служит не для хостинга (файловый сервер, шлюз, сервер БД), а веб-интерфейс нужен для рутины: посмотреть логи, перезапустить службу, поправить cron, добавить пользователя. Webmin ничего не меняет в системе при установке, кроме собственной службы.
  • Virtualmin — если на сервере будут сайты с почтой и DNS и вы хотите заводить их как «виртуальные серверы»: домен, пользователь, каталог, vhost, база, ящики, зона — одним действием. Скрипт установки перенастраивает систему целиком: веб-сервер, MariaDB, Postfix, Dovecot, BIND, файрвол, fail2ban. Поэтому только на чистую ОС.

Если вы выбираете между Virtualmin и другими бесплатными панелями (HestiaCP, ISPConfig, CloudPanel), посмотрите сравнение бесплатных панелей управления сервером.

Почему из репозитория, а не из .deb или .rpm

В старой версии этой статьи (2017 год, CentOS 6) главный довод был тот же, что и сейчас. Если поставить Webmin из скачанного пакета командой dpkg -i или rpm -U, обновлять его придётся вручную: следить за выпусками, скачивать, переустанавливать. Из репозитория Webmin обновляется обычным apt upgrade или dnf upgrade, вместе с остальной системой и автоматическими обновлениями безопасности.

Для Webmin это особенно важно. Это программа, которая работает от root и слушает сетевой порт. В истории проекта были серьёзные уязвимости, включая случай 2019 года, когда в архивы Webmin на SourceForge был подложен бэкдор (CVE-2019-15107). Старая версия Webmin на сервере — прямой путь к взлому.

Старый способ из интернета с ручным созданием /etc/yum.repos.d/webmin.repo, адресом download.webmin.com/download/yum и ключом jcameron-key.asc использовать не нужно. Репозиторий и ключ с тех пор сменились, а на AlmaLinux 9 старый ключ может не пройти проверку системной криптополитики.

Установка Webmin на Debian 12/13 и Ubuntu 24.04

Перед установкой обновите систему и убедитесь, что есть curl:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl

Скачайте и запустите скрипт подключения репозитория:

curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.sh

Команды совпадают с официальной страницей загрузки на webmin.com. Скрипт спросит подтверждение, скачает ключ разработчиков и создаст файл репозитория. Без вопросов он работает с ключом -f. Скрипт можно открыть и прочитать перед запуском — это обычный shell.

Установите Webmin:

sudo apt-get install --install-recommends webmin

Ключ --install-recommends подтягивает рекомендуемые Perl-модули. Без них часть модулей Webmin будет ругаться на отсутствующие зависимости.

Что появилось в системе:

  • /etc/apt/sources.list.d/webmin-stable.list — описание репозитория;
  • /usr/share/keyrings/ — ключ подписи репозитория (файл с webmin-developers в имени);
  • /usr/share/webmin/ — сама программа;
  • /etc/webmin/ — конфигурация, главное — /etc/webmin/miniserv.conf (встроенный веб-сервер Webmin);
  • /var/webmin/ — логи: miniserv.log и miniserv.error.

Установка Webmin на AlmaLinux и Rocky Linux 9/10

Тот же скрипт работает и на RHEL-ветке:

sudo dnf install -y curl
curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.sh
sudo dnf install webmin

Отличия от Debian:

  • репозиторий — /etc/yum.repos.d/webmin-stable.repo, ключ — в /etc/pki/rpm-gpg/;
  • программа лежит в /usr/libexec/webmin/, а не в /usr/share/webmin/;
  • конфиги и логи — там же: /etc/webmin/ и /var/webmin/;
  • файрвол по умолчанию — firewalld, а не ufw, и порт 10000 в нём закрыт. Это правильно, не открывайте его для всех.

SELinux отключать не нужно. Webmin работает в режиме enforcing. Если какой-то модуль не может прочитать файл, смотрите ausearch -m avc -ts recent и исправляйте контекст, а не выключайте защиту целиком.

Проверка и первый вход

Служба называется webmin:

sudo systemctl status webmin
sudo ss -tlnp | grep 10000

Примерно так выглядит нормальный результат:

LISTEN 0  4096  0.0.0.0:10000  0.0.0.0:*  users:(("miniserv.pl",pid=1234,fd=5))

Адрес панели — https://IP-сервера:10000. Сертификат самоподписанный, браузер покажет предупреждение. Войти можно как root с системным паролем или пользователем с правами sudo. На Ubuntu у root обычно нет пароля, поэтому входите своим sudo-пользователем.

Но сначала прочитайте следующий раздел: по умолчанию Webmin слушает все интерфейсы, и открывать его из интернета без защиты нельзя.

Безопасность: как не открыть сервер всему миру

Webmin даёт полный root-доступ через браузер. Утечка пароля или незакрытая уязвимость означают потерю сервера. Поэтому защита в несколько слоёв.

1. Не открывайте порт 10000 наружу

Самый надёжный вариант — Webmin слушает только localhost, а вы подключаетесь по SSH-туннелю. В /etc/webmin/miniserv.conf добавьте или исправьте строку:

bind=127.0.0.1

Перезапустите службу:

sudo systemctl restart webmin

На своём компьютере откройте туннель:

ssh -L 10000:127.0.0.1:10000 user@server.example.com

И зайдите в браузере на https://127.0.0.1:10000. Пока открыта SSH-сессия, Webmin доступен только вам, а снаружи порта не видно вообще.

Если туннель неудобен, разрешите порт только со своих IP. На Debian и Ubuntu с ufw:

sudo ufw allow from 203.0.113.10 to any port 10000 proto tcp
sudo ufw status numbered

На AlmaLinux и Rocky с firewalld:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port port="10000" protocol="tcp" accept'
sudo firewall-cmd --reload

Дополнительно ограничьте доступ на уровне самого Webmin: Webmin → Webmin Configuration → IP Access Control. Это то же самое, что параметр allow= в miniserv.conf. Сделайте это до того, как закроете последнюю открытую сессию, иначе отрежете себя.

Совет «откройте порт 10000 в файрволе и заходите» встречается во многих инструкциях, включая официальную. Для теста в локальной сети это допустимо. Для сервера с белым IP — нет: порт найдут сканеры в течение часов и начнут перебирать пароли.

2. Двухфакторная аутентификация

Webmin поддерживает TOTP-коды (Google Authenticator, Aegis и другие приложения). Включается в два шага:

  1. Webmin → Webmin Configuration → Two-Factor Authentication — выберите провайдера Google Authenticator и сохраните. Webmin может попросить установить недостающий Perl-модуль — соглашайтесь.
  2. Для каждого пользователя: Webmin → Webmin Users → пользователь → Two-Factor Authentication → включить и отсканировать QR-код.

Проверьте вход с кодом в другом окне браузера, прежде чем выходить из текущей сессии.

3. fail2ban

В fail2ban есть готовый фильтр webmin-auth. В Debian 12 и новее системного лога в файле по умолчанию нет, всё пишется в journald, поэтому используйте бэкенд systemd. Создайте /etc/fail2ban/jail.d/webmin.local:

[webmin-auth]
enabled = true
port = 10000
backend = systemd
journalmatch = _SYSTEMD_UNIT=webmin.service
maxretry = 5
bantime = 1h

Примените и проверьте:

sudo systemctl restart fail2ban
sudo fail2ban-client status webmin-auth

Если после нескольких неверных паролей счётчик Total failed не растёт — фильтр не видит записи. Проверьте, что неудачные входы попадают в журнал: journalctl -u webmin -n 50.

Если панель доступна только по SSH-туннелю, важнее защитить сам SSH: вход по ключам, запрет пароля, fail2ban на sshd.

4. Обновления и лишние пользователи

  • Включите автоматические обновления безопасности: unattended-upgrades в Debian/Ubuntu, dnf-automatic в AlmaLinux. Репозиторий Webmin подключён как обычный, его пакеты обновятся вместе с системой.
  • Не давайте доступ к Webmin всем системным пользователям. В Webmin Users оставьте только тех, кому он действительно нужен.
  • Замените самоподписанный сертификат: Webmin Configuration → SSL Encryption → Let’s Encrypt. Для этого нужен домен, указывающий на сервер, и доступный порт 80.

Virtualmin: установка на чистый сервер

Virtualmin GPL ставится одним скриптом, который делает всё: подключает репозитории Virtualmin и Webmin, ставит веб-сервер, MariaDB, PHP-FPM, Postfix, Dovecot, BIND, средства защиты от спама и вирусов, настраивает их и сам Virtualmin. В 2017 году скрипт лежал по адресу software.virtualmin.com/gpl/scripts/install.sh. Сейчас адрес другой.

Поддерживаемые системы

Текущий установщик (Virtualmin 8, проверено осенью 2026 года) официально поддерживает:

  • Debian 12 и 13;
  • Ubuntu 24.04 LTS и 26.04 LTS;
  • AlmaLinux, Rocky Linux и RHEL 8, 9 и 10.

Ubuntu 22.04 из основного списка уже выпала. Другие системы (Oracle Linux, CentOS Stream, Fedora) идут как «Grade B» — ставятся, но без гарантий.

Подготовка

Требования простые, но их часто пропускают:

  • Чистая ОС. Никаких заранее установленных веб-серверов, баз данных, других панелей. Скрипт перезапишет их конфиги.
  • Полное имя хоста (FQDN), например host.example.com, и A-запись в DNS на IP сервера. От имени зависит почта и сертификат для панели.
  • Память. Полной установке нужно около 1,5 ГБ RAM, минимальной — около 1 ГБ. Если памяти мало, скрипт предложит создать swap. Для реальной работы с почтой и ClamAV закладывайте от 2–4 ГБ. Как подобрать железо под сайты, разобрано в статье о выборе сервера для хостинга.

Задайте имя хоста:

sudo hostnamectl set-hostname host.example.com
hostname -f

Если hostname -f выдаёт короткое имя, добавьте строку в /etc/hosts:

203.0.113.20   host.example.com   host

Запуск установщика

curl -fsSL -o virtualmin-install.sh https://download.virtualmin.com/virtualmin-install.sh
sudo sh virtualmin-install.sh --bundle LAMP

Основные параметры:

  • --bundle LAMP — Apache (по умолчанию). Подходит для сайтов, которые рассчитывают на .htaccess: WordPress, Joomla, большинство CMS.
  • --bundle LEMP — Nginx вместо Apache. Правила из .htaccess придётся переносить в конфиг Nginx.
  • --minimal (или --type mini) — без ClamAV, SpamAssassin и части сервисов. Для слабого VPS или сервера только под сайты.
  • --hostname host.example.com — задать имя хоста прямо при установке.
  • --help — полный список. Описание параметров — в документации Virtualmin.

Установка занимает от 5 до 20 минут. Лог пишется в virtualmin-install.log в текущем каталоге. В конце скрипт выведет адрес панели — https://host.example.com:10000.

Что скрипт делает с файрволом

Это важно знать заранее. Установщик удаляет ufw и ставит firewalld, после чего открывает в нём сервисы SSH, HTTP/HTTPS, почту, DNS, FTP и порты 10000–10100 (Webmin и Virtualmin) и 20000 (Usermin — веб-почта и кабинет пользователей). То есть после установки Virtualmin порт 10000 открыт всем.

Сразу после первого входа закройте его. Удалите порты из зоны и разрешите только свои адреса:

sudo firewall-cmd --permanent --remove-port=10000-10100/tcp
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port port="10000-10100" protocol="tcp" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Если клиенты не пользуются Usermin, закройте и порт 20000. Скрипт также создаёт /etc/fail2ban/jail.local с джейлами для SSH, Postfix, Dovecot, ProFTPD и webmin-auth — отдельно настраивать fail2ban для панели не придётся, но проверить fail2ban-client status стоит.

Мастер первоначальной настройки

При первом входе Virtualmin запускает Post-Installation Wizard. Он спрашивает:

  • оптимизировать ли под малый объём памяти (предзагрузка библиотек Virtualmin);
  • включать ли ClamAV и SpamAssassin — на сервере с 2 ГБ памяти ClamAV лучше выключить;
  • пароль root для MariaDB;
  • основной DNS-сервер для зон;
  • формат хранения паролей.

После мастера нажмите Re-check and refresh configuration — Virtualmin проверит, что все службы найдены и работают. Если есть ошибки, они будут описаны там же.

Первый сайт: Virtualmin → Create Virtual Server → домен, пароль, набор функций (веб, почта, DNS, база). Для SSL откройте сервер → Manage SSL Certificate → Let’s Encrypt. Если на этом же сервере нужна почта для доменов, прочитайте заранее, как поднять собственный почтовый сервер и не попасть в спам — Virtualmin настроит Postfix, но SPF, DKIM, DMARC и PTR остаются на вас.

Virtualmin GPL и Virtualmin Pro

В старой статье я писал, что Virtualmin GPL — это скорее панель управления сервером, чем полноценная панель хостинга. Это по-прежнему так. GPL-версии хватает, чтобы держать свои сайты и сайты нескольких знакомых. Для продажи хостинга нужна Pro или другая панель.

ВозможностьGPLPro
Виртуальные серверы: домены, vhost, PHP-FPM, базы MariaDB/MySQL и PostgreSQLдада
Почта: ящики, алиасы, DKIM, спам-фильтрдада
DNS-зоны в BINDдада
Let’s Encryptдада
Резервные копии, в том числе по расписаниюдада, плюс шифрование бэкапов
Реселлерынетда
Установщик веб-приложенийнесколько приложенийдесятки приложений, массовое обновление
Графики нагрузки и ограничения ресурсовнетда
Облачные DNS-провайдеры, Amazon SES, поиск по почтовым логамнетда
Поддержка от разработчиковфорумда

Pro лицензируется по числу доменов. Перейти с GPL на Pro можно без переустановки командой virtualmin change-license.

Обновление

Webmin и Virtualmin обновляются как обычные пакеты:

# Debian, Ubuntu
sudo apt update && sudo apt upgrade

# AlmaLinux, Rocky Linux
sudo dnf upgrade

Кнопка обновления внутри Webmin тоже вызывает пакетный менеджер. Не скачивайте .tar.gz вручную поверх пакетной установки — получите две версии в разных каталогах.

Переход между версиями ОС (Debian 12 → 13, AlmaLinux 9 → 10) Virtualmin не выполняет. Безопаснее поднять новый сервер, поставить Virtualmin и перенести виртуальные серверы через бэкап и восстановление.

Типичные проблемы

СимптомПричинаРешение
Страница на :10000 не открываетсяПорт закрыт файрволом или у хостера, либо служба не запущенаsystemctl status webmin, ss -tlnp | grep 10000; зайти по SSH-туннелю
«This web server is running in SSL mode»Открыли http:// вместо https://Заходить по https://адрес:10000
Логин и пароль верные, но вход отклоняетсяIP заблокирован встроенной защитой Webmin или fail2ban, либо пользователь не в списке Webmin Usersfail2ban-client status webmin-auth, fail2ban-client set webmin-auth unbanip IP; лог /var/webmin/miniserv.log
Забыт пароль Webmin-пользователяПользователь Webmin, а не системный/usr/share/webmin/changepass.pl /etc/webmin root НовыйПароль (на AlmaLinux — /usr/libexec/webmin/changepass.pl), затем systemctl restart webmin
apt update: ошибка подписи репозитория WebminСтарый файл репозитория со старым ключомУдалить старые webmin*.list и ключи, запустить webmin-setup-repo.sh заново
Установщик Virtualmin останавливается в началеНеподдерживаемая ОС или на сервере уже есть Apache, MariaDB, другая панельПереустановить ОС из чистого образа поддерживаемой версии
Ошибка про имя хоста при установке VirtualminИмя не FQDN или не разрешаетсяhostnamectl set-hostname, строка в /etc/hosts, проверка hostname -f
Установка падает или зависает на маленьком VPSНе хватает памятиРазрешить скрипту создать swap или ставить с --minimal
После установки Virtualmin пропали правила ufwУстановщик удаляет ufw и включает firewalldНастраивать файрвол через firewall-cmd или модуль Webmin «FirewallD»
Модуль Webmin пишет, что программа не установленаWebmin управляет только установленными службамиПоставить пакет (например, bind9) и нажать Refresh Modules

Удаление

Только Webmin:

# Debian, Ubuntu
sudo apt purge webmin

# AlmaLinux, Rocky Linux
sudo dnf remove webmin

Virtualmin имеет режим sudo sh virtualmin-install.sh --uninstall, но он удаляет пакеты панели и их зависимости, а не возвращает систему в исходное состояние. Если сервер уже работал с Virtualmin, проще и чище переустановить ОС.

Частые вопросы

Можно ли поставить Virtualmin на сервер, где уже работают сайты?

Нет, разработчики прямо пишут, что установщик рассчитан только на свежую ОС. Он перенастроит Apache или Nginx, MariaDB, Postfix и файрвол, и существующие сайты почти наверняка сломаются. Правильный путь — новый сервер с Virtualmin и перенос сайтов на него. Если на рабочем сервере нужен просто веб-интерфейс, ставьте только Webmin.

Чем setup-repos.sh отличается от webmin-setup-repo.sh?

Ничем по результату. setup-repos.sh — старое имя, сейчас это короткая обёртка, которая скачивает и запускает webmin-setup-repo.sh с теми же аргументами. В новых инструкциях используйте webmin-setup-repo.sh: так понятнее, что именно выполняется.

Есть ли Webmin на FreeBSD?

Да, Webmin ставится из портов и пакетов FreeBSD: pkg install webmin, затем настройка скриптом из /usr/local/lib/webmin/ и включение службы в /etc/rc.conf. Virtualmin на FreeBSD официально не поддерживается текущим установщиком.

Можно ли сменить порт 10000?

Можно: Webmin Configuration → Ports and Addresses или параметры port= и listen= в /etc/webmin/miniserv.conf. Но это не защита: сканеры проверяют все порты. Смена порта уменьшает шум в логах, а настоящую защиту дают закрытый порт, туннель или VPN, 2FA и fail2ban.

Нужен ли Usermin?

Usermin — облегчённый интерфейс для обычных пользователей: смена пароля, веб-почта, файлы в домашнем каталоге. Если на сервере только ваши сайты и вы не даёте клиентам доступ, Usermin не нужен, его порт 20000 можно закрыть или службу отключить.

Webmin или Cockpit?

Cockpit входит в штатные репозитории AlmaLinux, Rocky, Debian и Ubuntu, хорошо показывает состояние системы, журналы, сеть, хранилище и контейнеры Podman. Webmin умеет больше в части конфигов конкретных служб: BIND, Postfix, Apache, Samba. Правила безопасности для обоих одинаковые — не открывать в интернет без ограничений.