Найти тему
Тюнинг Админа

Корпоративный чат на Ubuntu 22.04LTS + Openfire

Оглавление

Openfire - это популярный, кроссплатформенный сервер обмена мгновенными сообщениями в режиме реального времени, использующий протокол XMPP/Jabber, продукт написан на Java и имеющий web панель администрирования доступную на портах 9090 и 9091, где администраторам предоставлена возможность редактирования настроек сервера, добавление и удаление пользователей, конференц комнат и много других полезных настроек. 

В этой статье я опишу процесс установки и настройки этого замечательного продукта на Ubuntu 22.04LTS

Содержание статьи

  • Возможности решения
  • Системные требования
  • Подготовка сервера
  • Установка JAVA JDK и MariaDB
  • Установка и настройка Openfire
  • Получение сертификатов Let's Encrypt и варианты импорта
  • Настройка брандмауэра
  • Установка и настройка клиентского приложения
  • Вывод

Возможности решения

  • Поддержка MySQL, Oracle, PostgreSQL и встроенной базы данных для хранения сведений о пользователе и сообщений.
  • Поддержка интеграции с LDAP
  • Интеграция клиента обмена мгновенными сообщениями Spark
  • Множество плагинов для расширения его функциональности.
  • Интеграция с другими внешними IM-серверами
  • Веб-панель администрирования, где администраторы могут подключаться откуда угодно и редактировать параметры конфигурации.
  • Поддержка SSL/TLS.
  • Поддерживает несколько экземпляров сервера для совместной работы в одной кластерной среде.
  • Независимая от платформы, чистая Java.
  • Поддерживает более 50 000 одновременных пользователей.

Системные требования

Минимальные системные требования:

  • Процессор: одно ядерный от 1,8Ггц
  • Оперативная память: минимум 512МБ
  • Жесткий диск: от 5 ГБ

Системные требования для 100 пользователей:

  • Процессор: 2-х ядерный от 1,8Ггц
  • Оперативная память: 2 ГБ
  • Дисковая подсистема: от 50 ГБ

Подготовка сервера

Начнём с того, что у нас с вами eже есть виртуальная машина с установленной Ubuntu 22.04LTS.

Повысим наши права в системе:

sudo -s

Обновим систему:

apt update && apt upgrade -y

Переименуем наш хост если требуется:

hostnamectl set-hostname chat.tuning-admina.ru

Установим необходимые пакеты:

apt install nano mc net-tools wget -y

Устанавливаем сервис синхронизации времени:

apt install chrony -y

Добавляем в автозапуск службу:

systemctl enable chrony

Запускаем службу:

systemctl start chrony

Перезагрузим сервер:

reboot

Установка JAVA JDK и MariaDB

Пакет openjdk-11-jdk доступен в официальных репозиториях Ubuntu:

apt install default-jdk

Проверка версии Java:

java -version

openjdk version "11.0.17" 2022-10-18

OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)

OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

Вы можете установить базу данных на свой вкус из числа поддерживаемых продуктом, я же устанавливаю MariaDB:

apt install mariadb-server

  • Создаем базу данных и пользователя для openfire:

mysql -u root

CREATE DATABASE openfire;

GRANT ALL PRIVILEGES ON openfire.* TO openfire@localhost IDENTIFIED BY 'Super_Password';

FLUSH PRIVILEGES;

QUIT

Позже мы импортируем данные из дампа базы данных Openfire.

Установка и настройка Openfire

Загрузить последнюю версию пакета можно по ссылке с сайта Openfire. Актуальная версия на текущий момент 4.7.4, скачиваем пакет:

wget https://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_4.7.4_all.deb -O openfire_4.7.4_all.deb

Устанавливаем его:

apt install -f ./openfire_4.7.4_all.deb

Проверим статус службы:

systemctl status openfire

  • Active: active (running)

Импортируем дамп базы данных Openfire:

mysql -u root -p

use openfire;

Database changed

source /usr/share/openfire/resources/database/openfire_mysql.sql;

show tables;

-2

quit

Переходим к настройке Openfire через web интерфейс:

http://chat.tuning-admina:9090

Выбираем русский язык и нажимаем продолжить

-3

В качестве доменного имени XMPP и имя узла можно указать ip адрес или полное доменное имя, ключ шифрования не трогаем:

-4
-5

Выбираем встроенную базу данных:

-6

Настройки профиля оставляем по умолчанию:

-7

Указываем свою почту и пароль в качестве создаваемой административной:

-8

Все настройка завершена, можно перейти в консоль администратора.

-9

Переходим в консоль администратора, вводим admin без @ и пароль указанный при настройке:

-10

Административная панель сервера Openfire:

-11

Порты используемые по умолчанию:

-12

Интерфейс достаточно простой и интуитивно понятный. Первым делом добавим пользователей в разделе Пользователи/Группы:

-13

Указываем данные пользователя и нажимаем создать пользователя:

-14

Получение сертификатов Let's Encrypt

Для регистрации и получения сертификатов let's Encrypt установим web сервер nginx, клиент центра сертификации Certbot и плагин на Python3 для работы всей этой связки:

apt install nginx certbot python3-certbot-nginx -y

Выполним команду для создание запроса на получение сертификатов:

certbot --nginx -d chat.tuning-admina.ru

-15

Пути к сертификатам, которые нам потребуются:

/etc/letsencrypt/live/chat.tuning-admina.ru/cert.pem

/etc/letsencrypt/live/chat.tuning-admina.ru/fullchain.pem

/etc/letsencrypt/live/chat.tuning-admina.ru/privkey.pem

Добавляем сертификаты в ручную.

В разделе Сервер идем в Сертификаты TLS/SSL

-16

Первым делом нас интересует хранилище удостоверений.

-17

В хранилище сертификатов удостоверений нажимаем импортированы здесь

-18

В терминале читаем с помощью nano сертификаты в каталоге /etc/letsencrypt/live/chat.tuning-admina.ru/ и копируем их содержимое в форму как указано на скриншоте и нажимаем сохранить.

-19

Далее идем в управление содержимым хранилища в доверенные хранилища для серверов

-20

Переходим по ссылке форма импорта

-21

Создаем таким образом 3 сертификата и заполняем их содержимым из ключа fullchain.pem, там три сертификата.

-22

Перезапускаем Openfire:

systemctl restart openfire

Идём в браузере по адресу:

https://chat.tuning-admina.ru:9091 -- Вуаля сертификат валидный.

Автоматическое продление сертификатов Let's Encrypt с помощью добавления команды в планировщик заданий crontab.

Устанавливаем планировщик заданий Cron:

apt install cron

Добавляем службу планировщика заданий в автозагрузку:

systemctl enable cron

Отредактируем crontab:

crontab -e

Нажимаем: 1 для выбора редактора nano

Добавляем в самый низ строчку:

0 12 * * * /usr/bin/certbot renew --quiet

Чтобы в web панели администрирования Openfire не пере прописывать вручную сертификаты каждые 3 месяца, необходимо добавить плагин Certificate Manager, который обновляет информацию о сертификатах в системе, отслеживая их актуальность в папке, а также написать скрипт, который будет туда их копировать из папки lets Encrypt.

Добавляем плагин Certificate Manager:

-23

Переходим в консоль и перемещаемся в директорию:

cd /etc/letsencrypt/renewal-hooks/post

Создаем скрипт:

nano copykeys.sh

Добавляем две команды для копирования сертификатов:

cp /etc/letsencrypt/live/chat.tuning-admina.ru/privkey.pem /usr/share/openfire/resources/security/hotdeploy/chat.tuning-admina.ru-privkey.pem

cp /etc/letsencrypt/live/chat.tuning-admina.ru/fullchain.pem /usr/share/openfire/resources/security/hotdeploy/chat.tuning-admina.ru-fullchain.pem

systemctl restart openfire

CTRL+O, CTRL+X

Сделаем скрипт исполняемым:

chmod +x copykeys.sh

Добавим скрипт в планировщик заданий:

crontab -e

Нажимаем: 1 для выбора редактора nano

Добавляем в самый низ строчку:

0 4 * * * /etc/letsencrypt/renewal-hooks/post/copykeys.sh

Итого у нас с вами получаются две строчки в планировщике заданий:

1-я запускает тихий процесс обновления сертификатов Let's Encrypt каждую ночь в 3:00

2-я запускает скрипт копирования сертификатов и перезапуск службы Openfire каждую ночь в 4:00

Настройка брандмауэра

В своей системе я использую ufw, со следующими правилами:

ufw allow ssh from IP_administratora --- доступ по ssh с определенного IP адреса

ufw allow 80/tcp --- Порт nginx, необходим для обновления сертификатов let's encrypt

Порты используемые Openfire:

ufw allow 9090/tcp

ufw allow 9091/tcp

ufw allow 5222/tcp

ufw allow 7777/tcp

ufw allow 7443/tcp

ufw allow 7070/tcp

Выводим список правил:

ufw status

-24

Если Status: inactive

Запускаем сервис:

ufw enable

Если у вас в системе не установлен UFW, это можно сделать выполнив:

apt install ufw -y

Установка и настройка клиентского приложения

В качестве клиентского приложения советую использовать Spark, Gajim или Pidgin:

Процесс установки клиентов описывать не буду, так как устанавливаются в два клика мышки, рассмотрим вопрос подключения к серверу:

Запускаем Spark:

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

-25

Добавляем сертификат

-26
-27

Как видим успешно.

Запускаем Gajim:

Входим под администратором

-28

Нажимаем вход:

-29

Указываем полное имя хоста и порт:

-30

Подключение прошло успешно, учетная запись добавлена в клиентском приложении, здесь можно выбрать цвет подсветки учетной записи и Имя аккаунта, например Павел Иванов:

-31
-32

Запускаем Pidgin:

При запуске клиент предложит первым делом добавить учетную запись, нажимаем Добавить:

-33

Выбираем протокол XMPP, указываем нашу учетную запись

-34

Принимаем сертификат:

-35

-36
-37

Как видим успешно.

Вывод

Нагрузка в режиме простоя в работе:

-38

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