Установка и настройка личного 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 update
Устанавливаем:
apt install ./ejabberd_26.02-1_amd64.deb
Проверяем запуск:
ejabberdctl status
Установка прошла успешно, если сервис запустился и работает.
Открытие портов
Основные XMPP-порты
| Порт | Протокол | Назначение |
|---|---|---|
| 5222 | TCP | Подключение клиентов (STARTTLS) |
| 5269 | TCP | Связь между XMPP-серверами (S2S) |
| 5443 | TCP | Веб-админка |
| 5280 | TCP | HTTP-bind / WebSocket (если используется) |
Порты для звонков (STUN / TURN)
| Порт | Протокол | Назначение |
|---|---|---|
| 3478 | UDP | STUN / TURN |
| 3478 | TCP | TURN |
| 5349 | TCP | TURN over TLS |
Эти порты обязательны, если используется coturn
Как открыть порты в Linux
Если используется UFW:
ufw allow 5222/tcp
ufw allow 5269/tcp
ufw allow 5443/tcp
ufw allow 5280/tcp
ufw allow 3478/tcp
ufw allow 3478/udp
ufw allow 5349/tcp
Проверить статус:
ufw status
Если UFW выключен:
ufw enable
Если используется iptables
Пример открытия портов:
iptables -A INPUT -p tcp --dport 5222 -j ACCEPT
iptables -A INPUT -p tcp --dport 5269 -j ACCEPT
iptables -A INPUT -p tcp --dport 5443 -j ACCEPT
iptables -A INPUT -p tcp --dport 5280 -j ACCEPT
iptables -A INPUT -p tcp --dport 3478 -j ACCEPT
iptables -A INPUT -p udp --dport 3478 -j ACCEPT
iptables -A INPUT -p tcp --dport 5349 -j ACCEPT
Не забудьте сохранить правила.
Получение 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:
- /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:
admin:
user: admin@ms.tex-lab.ru
local:
user_regexp: ""
Перезагрузите сервис:
systemctl restart ejabberd
Если ошибка, то просмотрите логи:
journalctl -u ejabberd -n 50 --no-pager
Создание администратора
1) Введем команду:
ejabberdctl register admin ms.tex-lab.ru СЛОЖНЫЙ_ПАРОЛЬ
Откройте в браузере:
https://ms.tex-lab.ru:5443/admin
Это защищённая HTTPS-панель администрирования XMPP-сервера.
Войдите под ранее созданной учётной записью администратора
(например, admin@ms.tex-lab.ru).
Веб-интерфейс позволяет управлять сервером без ручного редактирования конфигов:
- Управление пользователями
- Мониторинг подключений
- Управление MUC (групповые чаты)
- Управление модулями сервера
- Просмотр статистики и состояния сервера
Проверка работы
После настройки сервера на базе ejabberd необходимо проверить подключение с клиентского устройства.
1) Установка клиента
XMPP поддерживается на большинстве платформ.
Android
- Conversations - современный, стабильный, поддерживает OMEMO и звонки
- Xabber - простой и понятный интерфейс
iOS
- Monal - стабильный и лёгкий клиент
- Siskin IM - поддержка современных расширений XMPP
Windows
- Gajim - функциональный и удобный
- Psi+ - лёгкий и минималистичный
Linux
- Gajim - один из лучших вариантов
- Dino - современный интерфейс
2) Проверка подключения
-
Установите любой XMPP-клиент.
-
Выберите «Добавить аккаунт».
-
Укажите:
-
JID (логин):
пользователь@ms.tex-lab.ru -
Пароль: тот, который вы задали
-
Сервер:
ms.tex-lab.ru(если требуется вручную)
-
-
Подключитесь.
Если всё настроено правильно, то статус станет «В сети».
3) Проверка отправки сообщений
Для тестирования:
- Создайте второго пользователя через админ-панель или командой, как создавали админа,
- Авторизуйтесь под разными аккаунтами на двух устройствах.
- Добавьте собеседника в контакты (введите его JID).
- Отправьте сообщение.
Если сообщение дошло до собеседника, то сервер работает.
Подключение звонков и видео
Сервер сообщений уже работает, WebSocket подключается, чаты отправляются. Теперь добавим поддержку голосовых и видеозвонков через TURN-сервер.
1. Установка TURN-сервера
Устанавливаем coturn:
apt update
apt install coturn -y
Включаем автозапуск:
systemctl enable coturn
2. Генерация секрета
TURN должен использовать тот же secret, что и ejabberd.
Сгенерировать можно так:
openssl rand -hex 32
Пример:
a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8g9h0i1j2k3l4m5n6o7p8q9r0s1t2
3. Настройка TURN (/etc/turnserver.conf)
Открываем файл:
nano /etc/turnserver.conf
Приводим конфигурацию к такому виду:
listening-port=3478
tls-listening-port=5349
fingerprint
use-auth-secret
static-auth-secret=СЕКРЕТ_ИЗ_OPENSSL
realm=ms.tex-lab.ru
cert=/etc/letsencrypt/live/ms.tex-lab.ru/fullchain.pem
pkey=/etc/letsencrypt/live/ms.tex-lab.ru/privkey.pem
Сохраняем и перезапускаем:
systemctl restart coturn
Проверяем:
systemctl status coturn
4. Настройка ejabberd
Теперь подключаем TURN к ejabberd.
Открываем файл конфигурации:
nano /opt/ejabberd/conf/ejabberd.yml
В modules добавляем:
mod_stun_disco:
secret: "СЕКРЕТ_ТОТ_ЖЕ_ЧТО_В_TURN"
services:
- host: "ms.tex-lab.ru"
port: 3478
transport: udp
- host: "ms.tex-lab.ru"
port: 5349
transport: tcp
В secret должен быть тот же static-auth-secret, что в turnserver.conf.
Перезапускаем ejabberd:
systemctl restart ejabberd
Проверка звонков:
- Откройте чат с пользователем.
- Нажмите кнопку звонка.
- Разрешите доступ к микрофону/камере.
- Проверьте соединение.
При успешной настройке звонок установится даже при работе через мобильную сеть или за NAT.
Подключение ejabberd к MariaDB
Зачем подключать базу
- Хранение пользователей, чатов, комнат (MUC), истории сообщений.
- Возможность масштабирования и резервного копирования.
- Поддержка больших нагрузок и интеграций.
Установка MariaDB
apt install mariadb-server mariadb-client -y
Настройка MariaDB для ejabberd
Создаём пользователя для ejabberd:
CREATE DATABASE ejabberd;
CREATE USER 'ejabberd'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON ejabberd.* TO 'ejabberd'@'localhost';
FLUSH PRIVILEGES;
Таблицы ejabberd создаёт сам при подключении к базе.
Настройка ejabberd
В ejabberd.yml прописываем только подключение к БД в начале файла:
sql_type: mysql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd"
sql_password: "СЛОЖНЫЙ_ПАРОЛЬ"
sql_port: 3306
В блоке modules должны быть:
Надо найти:
mod_mam:
assume_mam_usage: true
default: always
Привести к виду:
mod_mam:
db_type: sql
assume_mam_usage: true
default: always
Перезапускаем ejabberd:
systemctl restart ejabberd
Теперь ejabberd будет писать данные на внешнюю БД.
Заключение
В этой статье мы показали, как настроить XMPP-сервер ejabberd на домене ms.tex-lab.ru с поддержкой:
-
Обмена сообщениями через WebSocket
-
Голосовых и видеозвонков через STUN/TURN
-
Хранения данных пользователей, чатов и истории сообщений в MariaDB с включённым MAM
-
Шифрования сообщений и федерации серверов
При этом важно понимать, что это лишь вершина настроек - ejabberd имеет множество дополнительных возможностей и модулей, которые мы не рассматривали.
Для полного изучения всех функций и оптимальных конфигураций рекомендуется обращаться к официальной документации.









