Инструкция по установке сервера Prosody XMPP на Ubuntu 20.04

Prosody — это бесплатный XMPP-сервер с открытым исходным кодом, разработанный на языке Lua. Он отличается высокой скоростью и легкостью. XMPP является отличным протоколом для обмена мгновенными сообщениями. В этом руководстве вы узнаете, как установить и настроить Prosody XMPP на Ubuntu 20.04. По завершении инструкции у вас будет собственный сервер для чатов.

Установка Prosody на Ubuntu 20.04

Prosody доступен в стандартном репозитории Ubuntu. Команда Prosody также предоставляет поддержку для своего пакета. Чтобы установить самую последнюю версию, необходимо добавить репозиторий Prosody, используя следующую команду.

echo 'deb https://packages.prosody.im/debian focal main' | sudo tee /etc/apt/sources.list.d/prosody.list

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

wget https://prosody.im/files/prosody-debian-packages.key - O - | sudo apt-key add -

Затем обновите локальный пакетный индекс и установите самую свежую версию Prosody.

sudo apt update sudo apt install prosody

После установки Prosody он запустится автоматически. Вы можете проверить его статус с помощью:

systemctl status prosody

prosody.service - Сервер Prosody XMPP Загружено: успешно загружен (/lib/systemd/system/prosody.service; активирован; предустановка: активна) Статус:активен (в действии) с Вс 2020-04-19 13:58:40 UTC; 16s назад Документы: https://prosody. im/doc Основной PID: 1894 (lua5.2) Задачи: 1 (лимит: 1108) CGroup: /system. slice/prosody.service └─1894 lua5.2 /usr/bin/prosody - F Apr 19 13:58:40 localhost systemd[1]: Запущен сервер Prosody XMPP.

Если он не активирован, вы можете активировать его с помощью

sudo systemctl start prosody

Для активации автоматического запуска при загрузке системы, выполните следующие шаги.

sudo systemctl enable prosody

Разрешение портов в межсетевом экране

По умолчанию он принимает соединения на TCP-портах 5269 и 5222 публичного IP-адреса, что можно проверить с помощью следующей команды. (Если в вашей системе Ubuntu отсутствует команда netstat, её можно установить с помощью команды sudo apt install net-tools.)

sudo netstat - lnptu | grep lua

порты prosody xmpp на ubuntu 20.04

  • Порт 5222 предназначен для установления соединения между клиентом и сервером.
  • Порт 5269 предназначен для серверных подключений между собой.

Если вы активировали брандмауэр UFW на Ubuntu, необходимо открыть указанные порты с помощью следующей команды.

sudo ufw allow 5222,5269/tcp

Конфигурация XMPP-сервера Prosody

Используя текстовый редактор командной строки, такой как Nano, отредактируйте основной конфигурационный файл системы.

Читайте также:  Топ лучших Markdown редакторов для работы в Linux

sudo nano /etc/prosody/prosody.cfg.lua

Вы можете настроить работу модулей в разделе module_enabled: раскомментируйте строку для активации конкретного модуля или закомментируйте для его отключения. Каждый модуль сопровождается описанием функционала. Рекомендуется активировать модуль BOSH (Bidirectional-streams Over Synchronous HTTP), который обеспечивает XMPP-связь через HTTP.

Продолжите прокрутку вниз в конфигурационном файле. Если вы хотите разрешить регистрацию учетных записей через XMPP-клиенты, установите параметр allow_registration в true. Важно осознавать потенциальные риски злоупотреблений перед активацией этой опции. Если вы только начинаете работать с XMPP, возможно, стоит отложить разрешение самостоятельной регистрации учетных записей клиентами 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 вам необходимо настроить виртуальный хост Apache для chat. example.com. Сначала создайте файл конфигурации виртуального хоста:

sudo nano /etc/apache2/sites-available/prosody.conf

Вставьте указанный текст в файл, подменив chat. example.com на ваше действительное доменное имя. Не забудьте создать DNS A запись для него.

ServerName chat. example.com: /var/www/prosody

Сохраните файл и закройте его. После этого создайте папку 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.

Читайте также:  Топ-10 лучших open-source инструментов для распознавания речи на Linux

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email - d chat.example.com

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

Prosody XMPP использует Let's Encrypt и Certbot для получения сертификатов.

Получение сертификата TLS с помощью веб-сервера Nginx

Необходимо создать виртуальный хост для chat. example.com перед получением TLS-сертификата от Let’s Encrypt. Для этого создайте файл виртуального хоста:

sudo nano /etc/nginx/conf.d/prosody.conf

Вставьте указанный текст в файл, подменив chat. example.com на ваше действительное доменное имя. Не забудьте создать DNS A запись для него.

server { listen 80; listen [::]:80; server_name chat. example.com root в каталоге /var/www/prosody/; location~ /.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

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

Prosody XMPP использует Let's Encrypt и Certbot для получения сертификатов.

Инсталляция TLS-сертификата в Prosody

Измените основной файл конфигурации.

sudo nano /etc/prosody/prosody.cfg.lua

Откройте ваш виртуальный хост Prosody и загрузите файл сертификата TLS и его ключ.

ssl = "chat.example.com/privkey.pem"; certificate color: #ff00ff;">chat.example.com/fullchain.pem"; >

Сохраните файл и закройте его. Так как сервер XMPP Prosody функционирует под учетной записью пользователя prosody, требуется предоставить ему доступ к чтению файла TLS сертификата и ключа с помощью указанных ниже команд.

sudo apt install acl sudo setfacl - R - m u:prosody:rx /etc/letsencrypt/

Регистрация пользователей

Для создания учетной записи пользователя на сервере XMPP Prosody используйте следующую команду. Вам потребуется ввести пароль.

Для смены пароля выполните следующие действия:

Перезапустите Prosody

Проверьте синтаксис файла конфигурации, используя команду:

sudo prosodyctl check config

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

sudo systemctl restart prosody

Конфигурация XMPP-клиента

В данном руководстве мы используем мессенджер Pidgin в качестве клиента XMPP. Также вы можете воспользоваться клиентом Empathy. Оба приложения можно установить на рабочем столе Ubuntu, выполнив следующие команды:

sudo apt install pidgin sudo apt install empathy

При первом запуске необходимо добавить учетную запись в Pidgin. Для этого нажмите на кнопку «Добавить».

Читайте также:  Вывести поток ввода программы на экран в Linux

prosody-xmpp-ubuntu

После этого выберите 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 = "chat. example.com"полныйцепь. pem"; ключ = "chat. example.com/privkey. pem";

  • Первый шаг требует использования защищённого HTTPS-соединения.
  • Во втором предложении указываются заголовки COR для ответов BOSH, что позволяет принимать запросы из любых доменов.
  • Параметр https_ssl определяет файл сертификата и ключа TLS, используемых службой BOSH.

Сохраните изменения в файле и закройте его. После этого перезапустите Prosody.

sudo systemctl restart prosody

Чтобы открыть порты 5280 и 5281 на сервере Ubuntu с активированным брандмауэром UFW, выполните следующую команду.

sudo ufw allow 5280,5281/tcp

Точка BOSH станет доступна по указанному адресу после завершения данного учебника. Порт 5280 используется для стандартного HTTP, а порт 5281 — для HTTPS.

http://chat.example.com:5280/http-bind

https://chat.example.com:5281/http-bind.

Точка BOSH представляет собой URL, который клиент использует для соединения с сервером XMPP посредством HTTP.

Комната чата для группы пользователей

Для активации MUC (чата для нескольких участников) добавьте следующую строку в конфигурационный файл Prosody. Замените conference. example.com на выбранный вами поддомен.

Component "conference.example.com" "muc" restrict_room_creation = "admin"

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

Проверьте корректность синтаксиса файла конфигурации, выполнив:

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 postfix dovecot apache2

Если вы работаете с веб-сервером Nginx, вставьте следующую строку.

@daily certbot renew --quiet && systemctl reload postfix dovecot nginx

Необходимо перезапустить Postfix, Dovecot и веб-сервер, чтобы новые сертификат и закрытый ключ были приняты этими приложениями.