Мануал Гайд Полный гайд по созданию собственного XMPP‑мессенджера (Jabber)

Nas

Участник
6 Май 2026
1
0
0 ₽

1. Выбор сервера (software)​


Программное обеспечениеЛицензияЯзыкМасштабируемостьПростота настройкиПоддержка шифрования
ejabberdGPL‑3ErlangВысокая (кластер)СредняяTLS, STARTTLS, OMEMO, OTR
ProsodyMITLuaСредняя‑высокаяВысокаяTLS/STARTTLS, OMEMO, OTR
OpenfireApache 2JavaСредняяСредняяTLS/STARTTLS, плагины OMEMO, OTR

Рекомендация: для небольших‑средних проектов проще начать с Prosody – лёгковесный, быстро разворачивается и гибко настраивается. Для крупного кластера лучше выбрать ejabberd.

2. Подготовка сервера​


  • Обновление ОС[BR]sudo apt update && sudo apt upgrade -y
  • Установка зависимостей[BR]sudo apt install -y libssl-dev python3-pip
  • Создание отдельного пользователя (опционально)[BR]sudo adduser --system --home /var/lib/prosody --group prosody
  • Открытие портов[BR]sudo ufw allow 5222/tcp # клиентский[BR]sudo ufw allow 5269/tcp # сервер‑сервера[BR]sudo ufw allow 5280/tcp # веб‑консоль (по желанию)

3. Установка Prosody (пример)​


Bash:
# Добавляем репозиторий
sudo apt install -y wget gnupg2
wget -qO - https://prosody.im/files/prosody-debian-packages.key | sudo apt-key add -
sudo bash -c 'cat <<EOF > /etc/apt/sources.list.d/prosody.list
deb http://prosody.im/debian focal main
EOF'

# Устанавливаем
sudo apt update
sudo apt install -y prosody

Файл конфигурации – [B]/etc/prosody/prosody.cfg.lua[/B].

3.1 Базовая конфигурация​


Код:
VirtualHost "chat.example.com"

modules_enabled = {
    "roster";
    "saslauth";
    "tls";           -- TLS‑шифрование
    "dialback";
    "disco";
    "private";
    "vcard";
    "version";
    "uptime";
    "time";
    "ping";
    "register";      -- регистрация (при необходимости отключить)
    "admin_adhoc";
    "posix";
    "pep";
    "mam";           -- архив сообщений
}

Код:
sudo systemctl restart prosody

4. Настройка DNS​


  • SRV‑запись для клиентов[BR]
    Код:
    _xmpp-client._tcp.chat.example.com. 3600 IN SRV 0 5 5222 chat.example.com.
  • SRV‑запись для федерации[BR]
    Код:
    _xmpp-server._tcp.chat.example.com. 3600 IN SRV 0 5 5269 chat.example.com.
  • A/AAAA запись – IP вашего сервера.
  • TXT (опционально) – SPF для MUC[BR]v=spf1 mx -all

Проверка: [CODE]dig SRV _xmpp-client._tcp.chat.example.com[/CODE]

5. TLS‑шифрование (STARTTLS)​


5.1 Самоподписной сертификат​


Bash:
sudo openssl req -new -x509 -days 3650 -nodes \
    -out /etc/prosody/certs/chat.example.com.crt \
    -keyout /etc/prosody/certs/chat.example.com.key \
    -subj "/C=RU/ST=Moscow/L=Moscow/O=MyCompany/OU=IT/CN=chat.example.com"
sudo chmod 640 /etc/prosody/certs/chat.example.com.*
sudo chown prosody:prosody /etc/prosody/certs/chat.example.com.*

5.2 Подключение сертификата в конфиге​


Код:
VirtualHost "chat.example.com"
c2s_require_encryption = true
s2s_require_encryption = true
ssl = {
    key = "/etc/prosody/certs/chat.example.com.key";
    certificate = "/etc/prosody/certs/chat.example.com.crt";
}

5.3 Let’s Encrypt (рекомендовано)​


Bash:
sudo apt install -y certbot
sudo certbot certonly --standalone -d chat.example.com
# Ссылка на сертификаты
sudo ln -s /etc/letsencrypt/live/chat.example.com/fullchain.pem /etc/prosody/certs/chat.example.com.crt
sudo ln -s /etc/letsencrypt/live/chat.example.com/privkey.pem /etc/prosody/certs/chat.example.com.key
sudo systemctl restart prosody

6. Аутентификация и сквозное шифрование​


ТехнологияЧто защищаетКак включить
SASL (SCRAM‑SHA‑256)Передача паролямодуль saslauth уже включён
OMEMO (XEP‑0384)Сквозное шифрование, мульти‑устройствоустановить mod_omemo (см. ниже)
OTR (XEP‑0300)Одно‑разовое сквозное шифрованиеклиентский плагин, сервер только передаёт запрос
MAM (XEP‑0313)Защищённое хранение историимодуль mam уже в modules_enabled

Установка OMEMO‑модуля

Bash:
sudo apt install -y lua-socket lua-sec
git clone https://github.com/jitsi/prosody-modules.git /tmp/prosody-modules
sudo cp /tmp/prosody-modules/mod_omemo.lua /usr/lib/prosody/modules/
sudo systemctl restart prosody

Клиенты (Conversations, Gajim, Dino) включают OMEMO в настройках.

7. Управление пользователями​


7.1 Регистрация через клиент​


Если включён модуль register, пользователь может создать аккаунт в клиенте (например, в ConversationsAdd accountCreate new account).

7.2 Командная строка​


Код:
sudo prosodyctl register alice chat.example.com superSecretPassword
Код:
sudo prosodyctl register bob   chat.example.com anotherPass

7.3 Администраторы​


Код:
sudo prosodyctl setadmin alice@chat.example.com

8. Веб‑консоль (опционально)​


1. Установить модуль mod_admin_web

Код:
sudo apt install -y prosody-mod-admin-web

2. Добавить в конфиг

Код:
Component "admin.chat.example.com" "webadmin"

3. Открыть в браузере https://admin.chat.example.com:5280/ и войти под администратором.

9. Тестирование​


  • xmpp-client (CLI) – проверка TLS и аутентификации
    xmpp-client -j chat.example.com -u alice -p superSecretPassword -t
  • openssl s_client – ручной TLS‑тест
    openssl s_client -connect chat.example.com:5222 -starttls xmpp
  • XMPP‑debug (веб‑консоль) – просмотр трафика и статуса шифрования

Убедитесь, что:

  • SRV‑записи работают (dig).
  • После подключения стартует STARTTLS.
  • В клиенте появляется метка «зашифровано» (OMEMO/OTR).

10. Федерация (соединение с другими серверами)​


  • Открыть порт 5269.
  • В конфиге добавить:

Код:
s2s_secure_auth = true
s2s_whitelist = { "conference.jabber.org", "xmpp.org" } -- опционально

Сервер будет автоматически договариваться о TLS с другими XMPP‑серверами.

11. Обновления и резервные копии​


  • База данных (SQLite по умолчанию)
    sudo cp -a /var/lib/prosody /var/backups/prosody_$(date +%F).tar.gz
  • Конфиги
    sudo cp /etc/prosody/prosody.cfg.lua /var/backups/
  • Обновление пакетов
    sudo apt update && sudo apt upgrade -y
  • Обновление модулей – склонировать репо, заменить файлы, перезапустить.

Настройте cron‑задачу для ежедневного бэкапа.

12. Чек‑лист перед запуском в прод​


  • DNS SRV‑записи проверены (dig).
  • Порты 5222, 5269, 5280 (если нужен веб‑интерфейс) открыты.
  • TLS‑сертификат действителен (Let’s Encrypt → авто‑обновление).
  • c2s_require_encryption и s2s_require_encryption включены.
  • OMEMO/OTR установлен и протестирован в клиенте.
  • Администраторские аккаунты созданы.
  • Регулярные бэкапы настроены.

Готово! После выполнения всех шагов у вас будет полностью рабочий XMPP‑сервер с обязательным TLS, сквозным шифрованием сообщений и возможностью масштабирования. При росте нагрузки легко перейти на более мощный стек (ejabberd).
 
Активность
Пока здесь никого нет