Перейти к основному контенту

Установка и настройка личного XMPP сервера

intro-xmpp-install-debian-planetahost.png

Подробности урока

Уровень сложности Средний
Права 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

image.png

2) Правим /etc/hosts

Открываем

nano /etc/hosts

Добавляем:

127.0.0.1       localhost
IP_ВАШЕГО_VPS   ms.tex-lab.ru

image.png

Это нужно, чтобы сервер корректно сопоставлял своё имя и 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

Установка прошла успешно, если сервис запустился и работает.

image.png

Открытие портов

Основные 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

image.png

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

  1. Conversations - современный, стабильный, поддерживает OMEMO и звонки
  2. Xabber - простой и понятный интерфейс

iOS

  1. Monal - стабильный и лёгкий клиент
  2. Siskin IM - поддержка современных расширений XMPP

Windows

  1. Gajim - функциональный и удобный
  2. Psi+ - лёгкий и минималистичный

Linux

  1. Gajim - один из лучших вариантов
  2. Dino - современный интерфейс

2) Проверка подключения

  1. Установите любой XMPP-клиент.

  2. Выберите «Добавить аккаунт».

  3. Укажите:

    • JID (логин): пользователь@ms.tex-lab.ru

    • Пароль: тот, который вы задали

    • Сервер: ms.tex-lab.ru (если требуется вручную)

  4. Подключитесь.

Если всё настроено правильно, то статус станет «В сети».

3) Проверка отправки сообщений

Для тестирования:

  1. Создайте второго пользователя через админ-панель.
  2. Авторизуйтесь под разными аккаунтами на двух устройствах.
  3. Добавьте собеседника в контакты (введите его JID).
  4. Отправьте сообщение.

Если сообщение дошло до собеседника, то сервер работает.


Подключение звонков и видео

Сервер сообщений уже работает, 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.

В конфиге ejabberd добавляем:

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