- Сервер для обмена мгновенными сообщениями на Ubuntu 22.04LTS + Ejabberd 22.10
- Возможности сервера
- Системные требования
- Подготовка сервера
- Установка ejabberd
- Настройка конфигурации сервера
- Получение и обновление сертификатов Let’s Encrypt
- Настройка брандмауэра и Fail2ban
- Установка клиентских приложений
- Запускаем Spark:
Сервер для обмена мгновенными сообщениями на Ubuntu 22.04LTS + Ejabberd 22.10
Ejabberd — это один из самых популярных серверов XMPP с открытым исходным кодом, разработан для обеспечения высокой скорости работы и отказоустойчивостью, а также простотой настройки и масштабируемостью.
Масштабирование достигается за счет добавления дополнительных виртуальных машин в кластер.
Ejabberd использует Mnesia — распределенную внутреннюю базу данных, но поддерживаются и другие системы баз данных:
- Базы данных SQL , такие как MySQL или PostgreSQL
- Базы данных NoSQL , такие как Riak (также написанные на Erlang)
Возможности сервера
- Управление потоками для обеспечения надежности сообщений на мобильных устройствах
- Хранение и пересылка
- Список контактов и присутствие
- Обмен сообщениями один на один
- Расширение присутствия пользователя: протокол персональных событий (PEP) и индикатор ввода
- Профиль пользователя с vCards
- Групповой чат
- Архивация сообщений
- Квитанции о доставке сообщений
- Настройки конфиденциальности
- Последнее действие
- Метрики и полное администрирование из командной строки
- Полнофункциональная веб-поддержка с BOSH и веб-сокетами
Системные требования
Минимальные системные требования:
Системные требования для организации на 100 пользователей:
Подготовка сервера
Повысим наши права в системе:
apt update && apt upgrade -y
Устанавливаем дополнительные пакеты:
apt install mc nano wget net-tools -y
hostnamectl set-hostname ejabberd.tuning-admina.ru
Установка ejabberd
В репозиториях Ubuntu есть ejabberd, проверим версию:
Видим, что версия старая и нам не подходит.
Скачиваем и добавляем репозиторий разработчика:
curl -o /etc/apt/sources.list.d/ejabberd.list https://repo.process-one.net/ejabberd.list
curl -o /etc/apt/trusted.gpg.d/ejabberd.gpg https://repo.process-one.net/ejabberd.gpg
Обновляем информацию о пакетах в репозитории:
Вот совсем другое дело, переходим к установке:
systemctl status ejabberd
Active: active (running) since Tue 2023-01-10 23:56:26 MSK
Добавим в автозагрузку службу ejabberd:
systemctl enable ejabberd
Настройка конфигурации сервера
Добавление учётной записи пользователя, которому в дальнейшем добавим права администратора в Ejabberd:
ejabberdctl register admin ejabberd.tuning-admina.ru SuperP@ssw0rd
User admin@ejabberd.tuning-admina.ru successfully registered
Идем по адресу: http://ejabberd.tuning-admina.ru:5280/admin или https://ejabberd.tuning-admina.ru:5443/admin
Вводим имя администратора и пароль:
Если видим пустую панель администрирования, то это говорит о том, что у данного пользователя недостаточно прав для доступа:
Переходим к правке главного конфигурационного файла /opt/ejabberd/conf/ejabberd.yml и добавляем права ранее созданному пользователю:
nano /opt/ejabberd/conf/ejabberd.yml
admin@ejabberd.tuning-admina.ru
- — Жирным я выделил добавляемый фрагмент, в котором указано пользователь какой учётной записи имеет административные права.
systemctl restart ejabberd
Переходим в панель администрирования: https://ejabberd.tuning-admina.ru:5443/admin
Как видим у нас полные права на административный интерфейс.
Рассмотрим пункты интерфейса и настроек:
Выбирая виртуальный хост мы попадаем во вложенное меню по администрированию, добавлять и редактировать виртуальные хосты можно в конфигурационном файле /opt/ejabberd/conf/ejabberd.yml в параметре hosts
— Пользователи — В этом пункте создаем наших пользователей ejabberd сервера, а также видим статистику последнего подключения
Щелкнув по пользователю, мы можем сменить пароль пользователя, удалить пользователя и переписку.
— Подключенные пользователи — отображает всех подключенных пользователей, щелкнув по любому мы попадаем на страницу свойств, где также можем сменить пароль пользователя, удалить пользователя и переписку.
— Последнее подключение — Страница статистики подключения пользователей
— Группы общих контактов — Служат для создания общих контактов
При выборе Группы попадаем на страницу настройки группы.
При выборе узла мы попадаем во вложенное меню
Где можно перезапустить службу или остановить.
— База данных — Управление использованием и записью таблиц базы, очень полезная опция для оптимизации и ускорения работы
— Резервное копирование — страница на которой можно перенастроить каталог для бэкапа данных разбитых на группы
— Статистика — отображается статистика узла кластера
— Обновить — Плагин для управления сценарием обновления узла кластера
— Contrib Modules — Модуль для разработчиков
Получение и обновление сертификатов Let’s Encrypt
Для регистрации и получения сертификатов let’s Encrypt установим web сервер nginx, клиент центра сертификации Certbot и плагин на Python3 для работы всей этой связки:
apt install nginx certbot python3-certbot-nginx -y
Выполним команду для создание запроса на получение сертификатов:
certbot —nginx -d ejabberd.tuning-admina.ru
При запросе сертификата Let’s Encrypt , у вас попросят ввести почтовый ящик для регистрации:
Сертификаты получены и записаны
Перезаписываем сертификат в папке /opt/ejabberd/conf/:
cp /etc/letsencrypt/live/ejabberd.tuning-admina.ru/cert.pem /opt/ejabberd/conf/cacert.pem
cp /etc/letsencrypt/live/ejabberd.tuning-admina.ru/fullchain.pem /opt/ejabberd/conf/server.pem
systemctl restart ejabberd
Проверяем обновив страничку:
Как видим сертификат валидный
Переходим в консоль и перемещаемся в директорию:
cd /etc/letsencrypt/renewal-hooks/post
Добавляем две команды для копирования сертификатов:
cp /etc/letsencrypt/live/ejabberd.tuning-admina.ru/cert.pem /opt/ejabberd/conf/cacert.pem
cp /etc/letsencrypt/live/ejabberd.tuning-admina.ru/fullchain.pem /opt/ejabberd/conf/server.pem
systemctl restart ejabberd
Сделаем скрипт исполняемым:
Автоматизируем процесс замещения и обновления сертификатов, для этого нам понадобится планировщик заданий Cron:
Добавляем службу планировщика заданий в автозагрузку:
systemctl enable cron
Нажимаем: 1 для выбора редактора nano
Добавляем в самый низ строчки:
0 3 * * * /usr/bin/certbot renew —quiet
0 4 * * * /etc/letsencrypt/renewal-hooks/post/copykeys.sh
Итого у нас с вами получаются две строчки в планировщике заданий:
1-я запускает тихий процесс обновления сертификатов Let’s Encrypt каждую ночь в 3:00
2-я запускает скрипт копирования сертификатов и перезапуск службы Ejabberd каждую ночь в 4:00
Настройка брандмауэра и Fail2ban
Если отсутствует в системе, то устанавливаем:
Первым делом перед запуском службы необходимо добавить правило доступа к нашему серверу по SSH:
ufw allow ssh from ip_address_admina
Если не запущен, запускаем и добавляем службу в автозапуск:
Команда systemctl enable —now ufw сочетает в себе две предыдущих
Добавляем правило для доступа к панели управления ejabberd:
ufw allow 5280/tcp //Доступ к панели управления по http.
ufw allow 5443 //Доступ к панели управления по https
Добавляем правило для доступа к 80-му порту для nginx, если планируете использовать certbot и сертификаты let’s Encrypt:
Добавляем правило для доступа к порту отвечающего за регистрацию в системе и обмену данными между ejabberd сервером и клиентами по протоколу xmpp:
ufw allow 5222 xmpp-c2s //Порт для клиентских подключений Jabber/XMPP, обычный или STARTTLS
ufw allow 5223 xmpp/ssl-c2s //Порт для клиентских подключений Jabber с использованием старого метода SSL
ufw allow 5269 s2s //Используется для межсерверных подключений на порту 5269 с STARTTLS для защищенного трафика строго обязательны, и сертификаты проверяются
ufw allow 4369 порт erlang для связи с другими кластерными нодами
Наш файрволл запрещает всё, что не разрешено, но если вы настаиваете то заблокируем все остальные запросы не из списка разрешенных:
Установка клиентских приложений
В качестве клиентского приложения советую использовать:
Процесс установки клиентов описывать не буду, так как устанавливаются в два клика мышки, рассмотрим вопрос подключения к серверу:
Запускаем Spark:
Подключаемся под администратором для проверки.