Prosody — это бесплатный XMPP-сервер с открытым исходным кодом, разработанный на языке Lua. Он характеризуется высокой скоростью и низкими требованиями к ресурсам. XMPP — это надежный протокол для обмена мгновенными сообщениями. В данном руководстве описан процесс установки и настройки сервера Prosody XMPP на Ubuntu 22.04. По завершении установки вы получите собственный сервер для общения.
Содержание статьи
- 1 Установка Prosody на Ubuntu 22.04
- 2 Разрешение портов в брандмауэре
- 3 Конфигурация XMPP-сервера Prosody
- 4 Получение надежного TLS-сертификата от Let’s Encrypt.
- 5 Настройка TLS сертификата в Prosody
- 6 Регистрация пользователей
- 7 Перезапуск Prosody
- 8 Конфигурация XMPP-клиента
- 9 Конфигурация BOSH
- 10 Многофункциональный чат для нескольких пользователей (MUC)
- 11 Диагностика неисправностей
- 12 Автоматическое обновление сертификата TLS.
- 13 Заключение
Установка Prosody на Ubuntu 22.04
Prosody доступен в стандартном репозитории Ubuntu, однако версия там сильно устаревшая. Разработчики Prosody предоставляют собственный репозиторий пакетов. Чтобы установить последнюю версию, необходимо добавить репозиторий Prosody, используя следующую команду.
echo "deb [signed-by=/etc/apt/keyrings/prosody-debian-packages.key] https://packages.prosody. im/debian $(lsb_release - cs) main" | sudo tee /etc/apt/sources. list. d/prosody. list
После этого введите следующую команду для загрузки и импорта открытого ключа Prosody, который обеспечивает менеджеру пакетов APT возможность проверять целостность пакетов, получаемых из данного репозитория.
wget --quiet - O - https://prosody. im/files/prosody-debian-packages.key | sudo tee /etc/apt/keyrings/prosody-debian-packages.key
Затем обновите локальный пакетный индекс и установите свежую версию Prosody.
sudo apt update sudo apt install prosody
После установки Prosody он запустится автоматически. Для проверки его состояния воспользуйтесь командой:
systemctl status prosody
● prosody.service - Сервер Prosody XMPP Загружен: загружен (/lib/systemd/system/prosody.service; включен; предустановленный производителем: включен) Активен:активен (работает) since Fri 2022-07-15 17:00:43 HKT; 33s ago Docs: https://prosody. im/doc Main PID: 210690 (lua) Tasks: 1 (limit: 9410) Memory: 8.9M CPU: 714ms CGroup: /system. slice/prosody.service └─210690 lua /usr/bin/prosody - F
Если сервер не активен, вы можете его запустить с помощью
sudo systemctl start prosody
Чтобы активировать автозапуск при старте системы, выполните следующие шаги.
sudo systemctl enable prosody
Разрешение портов в брандмауэре
По умолчанию Prosody отслеживает TCP-порты 5269 и 5222 на общедоступном IP-адресе, что можно проверить с помощью следующей команды.
sudo ss - lnptu | grep lua

- Порт 5222 предназначен для связи между клиентом и сервером.
- Порт 5269 предназначен для взаимодействия между серверами.
Если на Ubuntu активирован файервол UFW, следует разблокировать указанные порты с помощью следующей команды.
sudo ufw allow 5222,5269/tcp
Конфигурация XMPP-сервера Prosody
Используйте текстовый редактор командной строки, например, Nano, чтобы внести изменения в главный конфигурационный файл.
sudo nano /etc/prosody/prosody.cfg. lua
В разделе module_enabled вы можете снять комментарий со строки, чтобы активировать конкретный модуль, или добавить комментарий, чтобы его отключить. Каждый модуль сопровождается описанием, разъясняющим его функции. Возможно, вам понадобится активировать модуль BOSH, что расшифровывается как B идирекционные потоки O вер S инхронный H TTP. Этот модуль позволяет выполнять XMPP-связь через HTTP.
Прокрутите файл конфигурации вниз. Если вы хотите разрешить регистрацию аккаунтов через XMPP-клиент, измените параметр allow_registration на true. Учтите, что перед этим важно знать, как защититься от возможных злоупотреблений. Если вы только начинаете работать с XMPP, возможно, стоит запретить клиентам создавать аккаунты самостоятельно.
allow_registration = true;
Prosody поддерживает только шифрованные соединения, что подтверждается следующими двумя строками.
c2s_require_encryption = true s2s_require_encryption = true
Тем не менее, необходимо настроить виртуальный хост и установить TLS-сертификат для обеспечения шифрования соединений. В Prosody по умолчанию присутствует лишь один виртуальный хост — localhost, что указано в следующем предложении.
VirtualHost "localhost"
Теперь мы настроим новый виртуальный хост, например, chat. example.com. Вставьте следующую строку в этот файл.
VirtualHost "chat. example.com"
Сохраните файл и закройте его. Далее необходимо получить и установить доверенный TLS-сертификат от Let’s Encrypt.
Получение надежного TLS-сертификата от Let’s Encrypt.
Чтобы установить клиент Let’s Encrypt (certbot) на сервере Ubuntu, выполните следующую команду.
sudo apt install certbot
Если на вашем сервере еще не функционирует веб-сервер, я советую установить один из популярных вариантов (Apache или Nginx), поскольку получение и установка TLS-сертификата через веб-сервер гораздо проще, чем другими способами.
Если вы работаете с веб-сервером Apache, необходимо установить соответствующий плагин. (Команда ниже установит веб-сервер Apache, если он еще не присутствует на вашей системе.)
sudo apt install python3-certbot-apache
Если вы применяете веб-сервер Nginx, установите соответствующий плагин. (Команда ниже установит веб-сервер Nginx, если он еще не присутствует в вашей системе.)
sudo apt install python3-certbot-nginx
Получение TLS-сертификата для веб-сервера Apache.
Чтобы получить TLS-сертификат Let’s Encrypt для chat. example.com, необходимо настроить виртуальный хост Apache. Для этого создайте файл виртуального хоста:
sudo nano /etc/apache2/sites-available/prosody.conf
После этого поместите следующий текст в файл. Замените chat. example.com на ваше актуальное доменное имя. Не забудьте настроить DNS A-запись для него.
Сохраните файл и закройте его. После этого создайте папку webroot.
sudo mkdir /var/www/prosody
Назначьте пользователя www-data (Apache) владельцем директории webroot.
sudo chown www-data:www-data /var/www/prosody - R
Активируйте данный виртуальный хост.
sudo a2ensite prosody.conf
Перезапустите Apache, чтобы обновления начали действовать.
sudo systemctl reload apache2
После того как вы создадите и активируете виртуальный хост, выполните следующую команду для получения и установки TLS-сертификата от Let’s Encrypt.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email Похоже, вы ввели адрес электронной почты. Если у вас есть текст, который нужно перефразировать, пожалуйста, предоставьте его! - d chat. example.com
Замените текст, выделенный красным, на ваши актуальные данные. После этого вы должны увидеть сообщение, подтверждающее успешное получение сертификата. Также у вас будет доступ к каталогу, где хранится ваш сертификат.

Процесс получения TLS-сертификата с помощью веб-сервера Nginx.
Настройте виртуальный хост Nginx для chat. example.com перед тем, как получить сертификат TLS от Let’s Encrypt. Для этого создайте файл виртуального хоста:
sudo nano /etc/nginx/conf.d/prosody.conf
После этого добавьте следующий текст в файл. Замените chat. example.com на актуальное доменное имя. Не забудьте настроить A-запись DNS для данного домена.
server < listen 80; listen [::]:80; server_name chat. example.comкорень /var/www/prosody/; место расположения~ /.well-known/acme-challenge < allow all; >>
Сохраните файл и закройте его. После этого создайте основную папку для вашего веб-сайта.
sudo mkdir /var/www/prosody/
Установите пользователя www-data (пользователь Nginx) в качестве владельца корневой папки вашего веб-сайта.
sudo chown www-data:www-data /var/www/prosody - R
Чтобы изменения начали действовать, перезапустите Nginx.
sudo systemctl reload nginx
После настройки и активации виртуального хоста выполните команду для получения и установки сертификата Let’s Encrypt с использованием плагина Nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email Похоже, вы ввели адрес электронной почты. Если у вас есть текст, который нужно перефразировать, пожалуйста, предоставьте его! - d chat. example.com
Вы должны увидеть сообщение, подтверждающее успешное получение сертификата. Кроме того, будет доступен каталог, в котором находится ваш сертификат.

Настройка TLS сертификата в Prosody
Измените главный файл настройки.
sudo nano /etc/prosody/prosody.cfg. lua
Зайдите на ваш виртуальный хост Prosody и загрузите файлы с сертификатом и TLS-ключом.
ssl = < key color: #ff00ff;">chat. example.com/privkey. pem"; certificate color: #ff00ff;">chat. example.com/fullchain. pem"; >
Сохраните файл и закройте его. Поскольку сервер Prosody XMPP функционирует под учетной записью пользователя prosody, требуется предоставить этому пользователю права на чтение сертификата TLS и файла ключа с помощью следующей команды.
sudo apt install acl sudo setfacl - R - m u:prosody:rx /etc/letsencrypt/
Регистрация пользователей
Для создания учетных записей на сервере Prosody XMPP выполните следующую команду. Вам будет предложено ввести пароль.
Для смены пароля, выполните
Перезапуск Prosody
Проведите проверку синтаксиса конфигурационного файла с помощью команды:
sudo prosodyctl check config
Если синтаксис корректен, перезапустите Prosody, чтобы изменения применились.
sudo systemctl restart prosody
Конфигурация XMPP-клиента
В данном руководстве представлен Pidgin в качестве клиента для XMPP. Также вы можете воспользоваться другим клиентом — Empathy. Оба можно установить на рабочей станции Ubuntu с помощью следующей команды:
sudo apt install pidgin sudo apt install empathy
При первом запуске программы потребуется добавить учетную запись в Pidgin. Для этого нажмите кнопку «Добавить».

После этого выберите XMPP из перечня протоколов и введите свои учетные данные: имя пользователя, домен и пароль.

Нажмите на кнопку «Добавить», чтобы пройти авторизацию.
Конфигурация BOSH
Как уже было упомянуто, BOSH предоставляет возможность использования XMPP через HTTP, что позволяет работать с ним в веб-браузерах. Например, Jitsi Meet, платформа для видеоконференций, применяет BOSH для интеграции Prosody на своих веб-страницах, что дает возможность участникам обмениваться текстовыми сообщениями во время онлайн-встреч.
Если вы активировали модуль BOSH, вам необходимо внести изменения в конфигурационный файл Prosody (/etc/prosody/prosody.cfg. lua) и добавить указанные строки в его окончание.
consider_bosh_secure = true; cross_domain_bosh = true; https_ssl = < certificate color: #ff00ff;">chat. example.com/fullchain. pem"; key color: #ff00ff;">chat. example.com/privkey. pem"; >
- Первый ряд гарантирует защищенное соединение с использованием протокола HTTPS.
- Вторая строка включает заголовки COR в ответы BOSH, что позволяет осуществлять запросы с любого домена.
- Параметр https_ssl определяет файл с TLS-сертификатом и ключом для BOSH-службы.
Сохраните файл и закройте его. После этого перезапустите Prosody.
sudo systemctl restart prosody
Если на сервере Ubuntu активирован файрвол UFW, необходимо открыть порты 5280 и 5281, выполнив следующую команду.
sudo ufw allow 5280,5281/tcp
После завершения этого руководства, конечная точка BOSH станет доступна по указанному адресу. Для нешифрованного HTTP используется порт 5280, а для HTTPS — порт 5281.
http://chat. example.com:5280/http-bind
https://chat. example.com:5281/http-bind
Конечная точка BOSH представляет собой URL, который клиент использует для установки соединения с сервером XMPP через протокол HTTP.
Многофункциональный чат для нескольких пользователей (MUC)
Для активации MUC (Многопользовательского чата) необходимо внести следующую строку в конфигурационный файл Prosody. Убедитесь, что вы заменили conference. example.com на желаемый поддомен.
Component "conference. example.com" "muc" restrict_room_creation = "admin"
Второй пункт ограничивает возможность создания комнат только для администратора. Чтобы назначить администратора на сервере XMPP, необходимо сначала создать учетную запись с помощью команды
sudo prosodyctl adduser
, как было описано ранее. После этого в конфигурационном файле нужно внести учетную запись в раздел admin, как указано ниже.
admins = < "Похоже, вы ввели адрес электронной почты. Если у вас есть текст, который нужно перефразировать, пожалуйста, предоставьте его!", "Похоже, вы ввели адрес электронной почты. Если у вас есть текст, который нужно перефразировать, пожалуйста, предоставьте его!" >
Используйте команду для проверки синтаксиса файла конфигурации:
sudo prosodyctl check config
При корректном синтаксисе перезапустите Prosody, чтобы изменения начали действовать.
sudo systemctl restart prosody
Диагностика неисправностей
Главный журнал Prosody расположен по пути /var/log/prosody/prosody.log. Кроме того, доступен журнал ошибок по адресу /var/log/prosody/prosody. err. Если Prosody не функционирует должным образом, стоит начать с проверки журнала ошибок.
Автоматическое обновление сертификата TLS.
Можно настроить задание Cron, чтобы автоматически обновлять TLS-сертификат. Для этого откройте файл crontab от имени пользователя root.
sudo crontab - e
Если вы работаете с веб-сервером Apache, добавьте следующую строку в конец файла.
@daily certbot renew --quiet && systemctl reload prosody apache2
При использовании веб-сервера Nginx добавьте следующую команду.
@daily certbot renew --quiet && systemctl reload prosody nginx
Для того чтобы программы начали использовать новый сертификат и закрытый ключ, требуется перезапуск Prosody и веб-сервера.
Заключение
Готово! Надеюсь, это руководство оказалось полезным для установки и настройки сервера Prosody XMPP на Ubuntu 22.04. Если вам понравилась эта информация, подписывайтесь на нашу бесплатную рассылку, чтобы получать больше полезных советов и рекомендаций.

