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

Установка и настройка личного 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) Авторизуемся под созданным аккаунтам администратора.