Установка и настройка личного XMPP сервера
| Уровень сложности | Средний |
| Права root | Требуются |
| Требования | Терминал Linux |
| Категория | Установка ПО |
| Совместимость с ОС | Debian |
| Примерное время чтения | 2 часа |
Введение
В этой инструкции мы развернём полноценный XMPP-сервер для личного или корпоративного использования.
После завершения у вас будет:
- собственный Jabber-сервер
- поддержка федерации (другие сервера смогут писать вам)
- шифрование TLS
- поддержка OMEMO (сквозное шифрование в клиентах)
- веб-админка
- закрытая регистрация (без спама)
- возможность голосовых и видео-звонков
В этой инструкции используется официальный .deb пакет проекта ejabberd с GitHub, а не версия из стандартного репозитория Debian.
У него отличается расположение файлов: конфигурация находится в /opt/ejabberd/conf/, а не в /etc/ejabberd/, как в Debian-пакете.
Если вы установили ejabberd через apt install ejabberd, пути и структура каталогов будут другими, и команды из этой инструкции могут не совпадать.
Подготовка VPS
XMPP сервер обязан знать своё правильное доменное имя. Если hostname не совпадает, то TLS и федерация будут работать с ошибками.
В примерах в инструкции будет использоваться домен ms.tex-lab.ru и IP сервера 62.173.138.27. Обязательно замените их на свои реальные домен и IP при настройке.
1) Устанавливаем FQDN
hostnamectl set-hostname ms.tex-lab.ru
Проверяем:
hostnamectl
Должно быть:
Static hostname: ms.tex-lab.ru
2) Правим /etc/hosts
Открываем
nano /etc/hosts
Добавляем:
127.0.0.1 localhost
IP_ВАШЕГО_VPS ms.tex-lab.ru
Это нужно, чтобы сервер корректно сопоставлял своё имя и IP.
Настройка DNS
В панели домена создаём:
A-запись
ms.tex-lab.ru → IP_VPS
Это указывает домен на ваш сервер.
SRV-записи
_xmpp-client._tcp.ms.tex-lab.ru. 0 5 5222 ms.tex-lab.ru
_xmpp-server._tcp.ms.tex-lab.ru. 0 5 5269 ms.tex-lab.ru
SRV записи нужны для федерации и правильного подключения клиентов.
Проверка:
dig SRV _xmpp-client._tcp.ms.tex-lab.ru
dig SRV _xmpp-server._tcp.ms.tex-lab.ru
Если видите свой сервер, то DNS настроен правильно.
Установка ejabberd
Скачиваем официальный релиз:
wget https://github.com/processone/ejabberd/releases/download/26.02/ejabberd_26.02-1_amd64.deb
Если сервер ARM, то нужен arm64 пакет.
Устанавливаем:
apt install ./ejabberd_26.02-1_amd64.deb
Проверяем запуск:
ejabberdctl status
Если запущен — установка прошла успешно.
Получение SSL сертификата
Без TLS XMPP сервер считается небезопасным, а федерация может не работать.
1) Останавливаем ejabberd:
systemctl stop ejabberd
2) Устанавливаем certbot:
apt install certbot
3) Получаем сертификат:
certbot certonly --standalone -d ms.tex-lab.ru
4) Создаём группу (если её нет)
groupadd ssl-cert
Обычно она уже существует, но команда не повредит.
5) Добавляем пользователя ejabberd в эту группу
usermod -aG ssl-cert ejabberd
Важно: после этого может потребоваться перезапуск сервиса.
6) Назначаем группу для сертификатов
chgrp -R ssl-cert /etc/letsencrypt
7) Настраиваем права доступа
chmod -R 750 /etc/letsencrypt
8) Запускаем сервер:
systemctl start ejabberd
Настройка ejabberd
Открываем файл конфигурации:
nano /opt/ejabberd/conf/ejabberd.yml
Меняем hosts
Было:
hosts:
- "localhost"
Станет:
hosts:
- "ms.tex-lab.ru"
Это основной XMPP-домен.
Указываем сертификаты
Найдите блок:
certfiles:
- "/etc/ejabberd/ejabberd.pem"
И замените на:
certfiles:
# - /opt/ejabberd/conf/server.pem
## If you already have certificates, list them here
# certfiles:
- /etc/letsencrypt/live/ms.tex-lab.ru/fullchain.pem
- /etc/letsencrypt/live/ms.tex-lab.ru/privkey.pem
В access_rules добавьте:
register:
deny: all
Это защита от спам-ботов.
Включаем обязательный TLS
В блоке порта 5222 включить:
starttls_required: true
Теперь клиенты будут обязаны подключаться через шифрование.
Проверяем модули для OMEMO
В блоке modules должны быть:
mod_mam:
assume_mam_usage: true
default: always
mod_pubsub:
access_createnode: local
OMEMO работает в клиентах, сервер лишь поддерживает нужные функции.
Включаем Web-админку
В блоке listen:
-
port: 5280
module: ejabberd_http
request_handlers:
"/admin": ejabberd_web_admin
Для HTTPS:
-
port: 5443
module: ejabberd_http
tls: true
request_handlers:
"/admin": ejabberd_web_admin
Задаем явно администратора
Найдем:
acl:
local:
user_regexp: ""
И укажем админа:
acl:
local:
user_regexp: "admin@ms.tex-lab.ru"
Перезагрузите сервис:
systemctl restart ejabberd
Если ошибка, то просмотрите логи:
journalctl -u ejabberd -n 50 --no-pager
Создание администратора
1) Введем команду:
ejabberdctl register admin ms.tex-lab.ru СЛОЖНЫЙ_ПАРОЛЬ
2) Открываем:
https://ms.tex-lab.ru:5443/admin
3) Авторизуемся под созданным аккаунтам администратора.