Мой блог
Установка ISPConfig 3 в многосерверной конфигурации на Debian 12 и Ubuntu 24.04

Качественное проведение ispconfig multiserver setup позволяет распределить нагрузку между специализированными серверами для панели управления, веб-служб, DNS, почты и веб-почты. При этом DNS-сервер можно дополнить зеркальным сервером для обеспечения отказоустойчивости, а в дальнейшем при необходимости легко подключать новые узлы. Развертывание выполняется с помощью официального автоматического установщика ISPConfig. В качестве базовой операционной системы используется Debian 12, однако руководство успешно прошло тестирование и на Ubuntu 24.04. Установщик поддерживает различные параметры командной строки для тонкой настройки конфигурации, полный список которых можно посмотреть с помощью команды wget -O - https://get.ispconfig.org | sh -s -- --help, а подробную документацию — на официальном сайте проекта.
1. Preliminary Note
Для реализации проекта используются следующие тестовые хосты и параметры сетевой инфраструктуры:
- panel — panel.example.com — 10.0.64.12
- web01 — web01.example.com — 10.0.64.13
- mx1 — mx1.example.com — 10.0.64.14
- ns1 — ns1.example.com — 10.0.64.15
- ns2 — ns2.example.com — 10.0.64.16
- webmail — webmail.example.com — 10.0.64.17
Приведенные имена хостов, IP-адреса и диапазоны носят демонстрационный характер, поэтому их необходимо заменить на собственные в процессе настройки. Все серверы объединены в общую частную сеть, но при этом обладают собственными публичными IP-адресами. Если у ваших серверов отсутствует общая локальная сеть, следует задействовать их публичные IPv4-адреса. Перед началом установки каждого узла необходимо настроить A- и при необходимости AAAA-записи, которые должны указывать на публичный IP-адрес конкретного сервера. Например, если хост называется panel.example.com, а его публичный IP равен 11.22.33.44, требуется прописать A-запись для домена panel.example.com, ссылающуюся на этот адрес. Каждый отдельный сервер должен иметь собственные уникальные публичный IP и hostname.
2. Installing the master server
Перед началом работы обязательно войдите в систему под учетной записью суперпользователя или выполните команду su - для получения прав root. Важно: следует использовать именно su -, а не просто su, так как в противном случае переменная окружения PATH в Debian будет настроена некорректно.
2.1 Configure the hostname and hosts
Сетевое имя вашего сервера должно представлять собой поддомен вроде panel.example.com. Не используйте доменные имена без указания поддомена (например, example.com), поскольку в дальнейшем это неизбежно приведет к проблемам при настройке почтовой службы. Сначала проверьте текущий хостнейм в файле /etc/hosts и при необходимости скорректируйте его. Строка должна содержать IP-адрес, пробел, полное доменное имя хоста, пробел и короткую часть поддомена. Для нашего главного узла файл должен выглядеть следующим образом (в зависимости от хостинг-провайдера некоторые строки могут отличаться):
nano /etc/hosts
127.0.0.1 localhost.localdomain localhost# Эту строку нужно изменить на каждом узле под соответствующее имя сервера:127.0.1.1 panel.example.com panel# Эти строки должны быть одинаковыми на каждом узле:10.0.64.12 panel.example.com panel10.0.64.13 web01.example.com web0110.0.64.14 mx1.example.com mx110.0.64.15 ns1.example.com ns110.0.64.16 ns2.example.com ns210.0.64.17 webmail.example.com webmail# Следующие строки желательны для хостов с поддержкой IPv6:::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Как видно из примера, в файл добавлены хостнеймы остальных серверов, чтобы в дальнейшем они могли беспрепятственно взаимодействовать через внутреннюю сеть. Затем отредактируйте конфигурационный файл /etc/hostname:
nano /etc/hostname
Он должен содержать исключительно часть поддомена, в нашем случае — panel. После этого перезагрузите сервер для применения изменений:
systemctl reboot
Выполните повторный вход в систему и проверьте корректность имени хоста с помощью следующих команд:
hostnamehostname -f
Результат выполнения должен выглядеть следующим образом:
root@panel:~$ hostnamepanelroot@panel:~$ hostname -fpanel.example.com
Теперь можно запустить автоматический установщик для развертывания всех необходимых программных пакетов и панели ISPConfig:
wget -O - https://get.ispconfig.org | sh -s -- --no-mail --no-dns --use-php=system
Спустя некоторое время в терминале появится предупреждение: WARNING! This script will reconfigure your complete server!
Установка должна выполняться на предварительно очищенный и свежеустановленный сервер, так как любые уже имеющиеся настройки, скорее всего, будут полностью стерты. Система выдаст предупреждение: It should be run on a freshly installed server and all current configuration that you have done will most likely be lost! Type ‘yes’ if you really want to continue. Введите yes и нажмите клавишу ввода, после чего начнется процесс установки.
По завершении работы установщика на экране отображатся сгенерированные учетные данные для доступа: пароль администратора панели управления ISPConfig и корневой пароль СУБД MySQL. Вывод будет выглядеть следующим образом:
[INFO] Your ISPConfig admin password is: 5GvfSSSYsdfdYC
[INFO] Your MySQL root password is: kkAkft82d!kafMwqxdtYs
Обязательно запишите эти конфиденциальные данные и укажите, к какому именно серверу они относятся, так как они понадобятся вам на следующих этапах работы.
2.2 Setting up the remote MySQL users for our slave servers
На следующем этапе необходимо настроить удаленный доступ к базе данных для вспомогательных узлов. Выполните вход в консоль MySQL, чтобы разрешить другим серверам подключаться к центральной базе данных ISPConfig на этом главном узле в процессе развертывания. Для этого в записях мастер-базы создаются учетные записи корневого пользователя MySQL, привязанные к IP-адресам и именам хостов каждого подчиненного сервера.
Откройте терминал и выполните команду для подключения:
mysql -u root -p
После ввода текущего пароля администратора MySQL выполните следующие SQL-команды для настройки доступов:
CREATE USER 'root'@'10.0.64.13' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.13' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.14' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.14' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.15' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.15' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.16' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.16' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'web01.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'web01.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'mx1.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'mx1.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'ns1.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'ns1.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'ns2.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'ns2.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'webmail.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'webmail.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
В приведенных выше SQL-командах обязательно замените демонстрационные IP-адреса в диапазоне от 10.0.64.12 до 10.0.64.16 на реальные сетевые адреса ваших серверов. Примеры доменных имен web01.example.com, mx1.example.com, ns1.example.com, ns2.example.com и webmail.example.com также должны быть заменены на актуальные хостинговые имена вашей инфраструктуры. Значение myrootpassword следует изменить на надежный пароль учетной записи root; в целях безопасности рекомендуется использовать уникальные пароли для каждого отдельного хоста.
Обязательно запишите эти учетные данные, так как они понадобятся при дальнейшей установке или обновлении подчиненных серверов. После завершения этой процедуры можно выйти из базы данных с помощью команды EXIT;. Теперь вы можете войти в панель управления ISPConfig по адресу https://panel.example.com:8080, используя логин admin и пароль, который был сгенерирован и показан установщиком во время инсталляции.
2.3 Настройка межсетевого экрана
Завершающим этапом подготовки главного сервера является конфигурация файрвола. Авторизуйтесь в графическом интерфейсе ISPConfig и перейдите в раздел System -> Firewall, после чего нажмите кнопку добавления новой записи межсетевого экрана. Для панели управления требуется открыть следующие сетевые порты: протокол TCP использует порты 22, 80, 443, 8080 и 8081. Никакие UDP-порты через интерфейс панели открывать не требуется.
Кроме того, необходимо открыть порт 3306 для работы СУБД MySQL, но в целях безопасности доступ разрешается исключительно из вашей локальной сети. Данную операцию следует выполнять из командной строки только после того, как изменения из панели управления ISPConfig успешно применятся (красный индикатор состояния пропадет). Для этого используется команда ufw allow from 10.0.64.0/24 to any port 3306 proto tcp. На этом этапе ваш управляющий сервер полностью настроен и готов к дальнейшему использованию. В следующем шаге мы приступим к установке и настройке веб-сервера.
Источник: howtoforge.com

