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

Установка и настройка личного 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-запись
  • Тип: A
  • Имя: ms
  • Значение: 62.173.138.27

Это указывает домен на ваш сервер.

SRV-записи
  • Тип: SRV
  • Имя: _xmpp-client._tcp.ms.tex-lab.ru
  • Приоритет: 0
  • Вес: 5
  • Порт: 5222
  • Целевой хост: ms.tex-lab.ru

  • Тип: SRV
  • Имя: _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

Установка ejabberd

Скачиваем официальный релиз:

wget https://github.com/processone/ejabberd/releases/download/26.02/ejabberd_26.02-1_amd64.deb

Если сервер ARM, то нужен arm64 пакет.

В уроке мы устанавливаем версию 26.2.0, но уже может выйти новая версия, когда Вы читаете этот текст.  Проверяйте актуальную версию на странице GitHub проекта!

Обновляем список пакетов:

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