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;
quit
Переходим к настройке Openfire через web интерфейс:
http://chat.tuning-admina:9090
Выбираем русский язык и нажимаем продолжить
В качестве доменного имени XMPP и имя узла можно указать ip адрес или полное доменное имя, ключ шифрования не трогаем:
Выбираем встроенную базу данных:
Настройки профиля оставляем по умолчанию:
Указываем свою почту и пароль в качестве создаваемой административной:
Все настройка завершена, можно перейти в консоль администратора.
Переходим в консоль администратора, вводим admin без @ и пароль указанный при настройке:
Административная панель сервера Openfire:
Порты используемые по умолчанию:
Интерфейс достаточно простой и интуитивно понятный. Первым делом добавим пользователей в разделе Пользователи/Группы:
Указываем данные пользователя и нажимаем создать пользователя:
Получение сертификатов 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
Пути к сертификатам, которые нам потребуются:
/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
Первым делом нас интересует хранилище удостоверений.
В хранилище сертификатов удостоверений нажимаем импортированы здесь
В терминале читаем с помощью nano сертификаты в каталоге /etc/letsencrypt/live/chat.tuning-admina.ru/ и копируем их содержимое в форму как указано на скриншоте и нажимаем сохранить.
Далее идем в управление содержимым хранилища в доверенные хранилища для серверов
Переходим по ссылке форма импорта
Создаем таким образом 3 сертификата и заполняем их содержимым из ключа fullchain.pem, там три сертификата.
Перезапускаем 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:
Переходим в консоль и перемещаемся в директорию:
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
Если Status: inactive
Запускаем сервис:
ufw enable
Если у вас в системе не установлен UFW, это можно сделать выполнив:
apt install ufw -y
Установка и настройка клиентского приложения
В качестве клиентского приложения советую использовать Spark, Gajim или Pidgin:
- Gajim: https://gajim.org/download/
- Pidgin: https://www.pidgin.im/install/
Процесс установки клиентов описывать не буду, так как устанавливаются в два клика мышки, рассмотрим вопрос подключения к серверу:
Запускаем Spark:
Подключаемся под администратором для проверки.
Добавляем сертификат
Как видим успешно.
Запускаем Gajim:
Входим под администратором
Нажимаем вход:
Указываем полное имя хоста и порт:
Подключение прошло успешно, учетная запись добавлена в клиентском приложении, здесь можно выбрать цвет подсветки учетной записи и Имя аккаунта, например Павел Иванов:
Запускаем Pidgin:
При запуске клиент предложит первым делом добавить учетную запись, нажимаем Добавить:
Выбираем протокол XMPP, указываем нашу учетную запись
Принимаем сертификат:
Как видим успешно.
Вывод
Нагрузка в режиме простоя в работе:
Отличное решение, прекрасно работает без лишнего шлифования напильником и минимальными системными требованиями. Подойдет в инсталляциях любого масштаба. В плане клиентских приложений, тут вы сами выбирайте, на вкус и цвет товарищей нет, у каждого свои достоинства и недостатки.