1. Выбор сервера (software)
| Программное обеспечение | Лицензия | Язык | Масштабируемость | Простота настройки | Поддержка шифрования |
|---|---|---|---|---|---|
| ejabberd | GPL‑3 | Erlang | Высокая (кластер) | Средняя | TLS, STARTTLS, OMEMO, OTR |
| Prosody | MIT | Lua | Средняя‑высокая | Высокая | TLS/STARTTLS, OMEMO, OTR |
| Openfire | Apache 2 | Java | Средняя | Средняя | 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, пользователь может создать аккаунт в клиенте (например, в Conversations → Add account → Create 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).