Свой jabber сервер linux

Сервер для обмена мгновенными сообщениями на 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

Обновляем информацию о пакетах в репозитории:

Читайте также:  Linux unzip one file

Вот совсем другое дело, переходим к установке:

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 сервера, а также видим статистику последнего подключения

Щелкнув по пользователю, мы можем сменить пароль пользователя, удалить пользователя и переписку.

— Подключенные пользователи — отображает всех подключенных пользователей, щелкнув по любому мы попадаем на страницу свойств, где также можем сменить пароль пользователя, удалить пользователя и переписку.

— Последнее подключение — Страница статистики подключения пользователей

— Группы общих контактов — Служат для создания общих контактов

При выборе Группы попадаем на страницу настройки группы.

При выборе узла мы попадаем во вложенное меню

Где можно перезапустить службу или остановить.

Читайте также:  Linux what is tilda

— База данных — Управление использованием и записью таблиц базы, очень полезная опция для оптимизации и ускорения работы

— Резервное копирование — страница на которой можно перенастроить каталог для бэкапа данных разбитых на группы

— Статистика — отображается статистика узла кластера

— Обновить — Плагин для управления сценарием обновления узла кластера

— 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:

Подключаемся под администратором для проверки.

Источник

Оцените статью
Adblock
detector