Ejabberd - это один из самых популярных серверов XMPP с открытым исходным кодом, разработан для обеспечения высокой скорости работы и отказоустойчивостью, а также простотой настройки и масштабируемостью.
Масштабирование достигается за счет добавления дополнительных виртуальных машин в кластер.
Ejabberd использует Mnesia - распределенную внутреннюю базу данных, но поддерживаются и другие системы баз данных:
- Базы данных SQL , такие как MySQL или PostgreSQL
- Базы данных NoSQL , такие как Riak (также написанные на Erlang)
Содержание статьи
- Возможности сервера
- Системные требования
- Подготовка сервера
- Установка ejabberd
- Настройка конфигурации сервера
- Получение и привязка сертификатов Let's Encrypt
- Настройка брандмауэра и Fail2ban
- Установка и настройка клиентских приложений
- Вывод
Возможности сервера
- Управление потоками для обеспечения надежности сообщений на мобильных устройствах
- Хранение и пересылка
- Список контактов и присутствие
- Обмен сообщениями один на один
- Расширение присутствия пользователя: протокол персональных событий (PEP) и индикатор ввода
- Профиль пользователя с vCards
- Групповой чат
- Архивация сообщений
- Квитанции о доставке сообщений
- Настройки конфиденциальности
- Последнее действие
- Метрики и полное администрирование из командной строки
- Полнофункциональная веб-поддержка с BOSH и веб-сокетами
Системные требования
Минимальные системные требования:
- Процессор: 1 ядро от 1Ггц
- Оперативная память: 512МБ
- Жёсткий диск: от 5ГБ
Системные требования для организации на 100 пользователей:
- Процессор: от 2 ядер по 1,5Ггц
- Оперативная память: от 2ГБ
- Диск от 100ГБ
Подготовка сервера
Повысим наши права в системе:
sudo -s
Обновление системы:
apt update && apt upgrade -y
Перезагружаем сервер:
reboot
Устанавливаем дополнительные пакеты:
apt install mc nano wget net-tools -y
Переименуем наш сервер:
hostnamectl set-hostname ejabberd.tuning-admina.ru
Установка ejabberd
В репозиториях Ubuntu есть ejabberd, проверим версию:
apt show ejabberd
Package: ejabberd
Version: 21.12-1
Видим, что версия старая и нам не подходит.
Скачиваем и добавляем репозиторий разработчика:
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
Обновляем информацию о пакетах в репозитории:
apt update
проверяем версию:
apt show ejabberd
Package: ejabberd
Version: 22.10-1
Вот совсем другое дело, переходим к установке:
apt install ejabberd
Проверяем статус службы:
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
acl:
admin:
- user:
admin@ejabberd.tuning-admina.ru
local:
user_regexp: ""
loopback:
ip:
- 127.0.0.0/8
- ::1/128
- ::FFFF:127.0.0.1/128
- - Жирным я выделил добавляемый фрагмент, в котором указано пользователь какой учётной записи имеет административные права.
CTRL+O, CTRL+X
Перезапускаем ejabberd:
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
Перезапускаем ejabberd:
systemctl restart ejabberd
Проверяем обновив страничку:
Как видим сертификат валидный
Переходим в консоль и перемещаемся в директорию:
cd /etc/letsencrypt/renewal-hooks/post
Создаем скрипт:
nano copykeys.sh
Добавляем две команды для копирования сертификатов:
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
CTRL+O, CTRL+X
Сделаем скрипт исполняемым:
chmod +x copykeys.sh
Автоматизируем процесс замещения и обновления сертификатов, для этого нам понадобится планировщик заданий Cron:
apt install cron -y
Добавляем службу планировщика заданий в автозагрузку:
systemctl enable cron
Отредактируем crontab:
crontab -e
Нажимаем: 1 для выбора редактора nano
Добавляем в самый низ строчки:
0 3 * * * /usr/bin/certbot renew --quiet
0 4 * * * /etc/letsencrypt/renewal-hooks/post/copykeys.sh
CTRL+O, CTRL+X
Итого у нас с вами получаются две строчки в планировщике заданий:
1-я запускает тихий процесс обновления сертификатов Let's Encrypt каждую ночь в 3:00
2-я запускает скрипт копирования сертификатов и перезапуск службы Ejabberd каждую ночь в 4:00
Настройка брандмауэра и Fail2ban
Проверяем статус запуска:
systemctl status ufw
Если отсутствует в системе, то устанавливаем:
apt install ufw
Первым делом перед запуском службы необходимо добавить правило доступа к нашему серверу по SSH:
ufw allow ssh from ip_address_admina
Если не запущен, запускаем и добавляем службу в автозапуск:
systemctl start ufw
systemctl enable ufw
Команда systemctl enable --now ufw сочетает в себе две предыдущих
Добавляем правило для доступа к панели управления ejabberd:
ufw allow 5280/tcp //Доступ к панели управления по http.
ufw allow 5443 //Доступ к панели управления по https
Добавляем правило для доступа к 80-му порту для nginx, если планируете использовать certbot и сертификаты let's Encrypt:
ufw allow 80/tcp
Добавляем правило для доступа к порту отвечающего за регистрацию в системе и обмену данными между 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 для связи с другими кластерными нодами
Наш файрволл запрещает всё, что не разрешено, но если вы настаиваете то заблокируем все остальные запросы не из списка разрешенных:
ufw deny all
Установка клиентских приложений
В качестве клиентского приложения советую использовать:
- Gajim: https://gajim.org/download/
- Pidgin: https://www.pidgin.im/install/
Процесс установки клиентов описывать не буду, так как устанавливаются в два клика мышки, рассмотрим вопрос подключения к серверу:
Запускаем Spark:
Подключаемся под администратором для проверки.
Как видим успешно.
Запускаем Gajim:
Входим под администратором
Нажимаем вход:
Указываем полное имя хоста и порт:
Подключение прошло успешно, учетная запись добавлена в клиентском приложении, здесь можно выбрать цвет подсветки учетной записи и Имя аккаунта, например Павел Иванов:
Запускаем Pidgin:
При запуске клиент предложит первым делом добавить учетную запись, нажимаем Добавить:
Выбираем протокол XMPP, указываем нашу учетную запись
Как видим успешно.
Запускаем Psi+:
Заходим в настройки
Добавляем учетную запись для подключения к серверу
Как видим подключение прошло успешно.
Вывод
Нагрузка в режиме простоя в работе:
Отличное решение, прекрасно работает без лишнего шлифования напильником и минимальными системными требованиями. Подойдет в инсталляциях любого масштаба. В плане клиентских приложений, тут вы сами выбирайте, на вкус и цвет товарищей нет, у каждого свои достоинства и недостатки.