В репозиториях Debian Jessie присутствует приемлемая версия 0.9.7. Её мы и устанавливаем вместе с дополнением для работы с mysql:
# aptitude install prosody
Далее нужно решить, какую базу данных использовать: mysql или sqlite.
SQLite более компактна и нетребовательна к ресурсам. Она представляет собой файл на сервере, где и хранятся таблицы с информацией. Её легко скопировать, не требуется ничего, кроме библиотеки sqlite3. Такая база данных будет лучшем решением, если вы настраиваете jabber для себя (и десятка пользователей в придачу :).
# aptitude install lua-dbi-sqlite3
MySQL лучше подходит, когда на сервере планируется размещать много-много учётных записей пользователей и их постоянное добавление, удаление, редактирование и т.д. Для такой базы тоже нужен соответствующий компонент.
# aptitude install lua-dbi-mysql
Содержание статьи:
- 1 Подготовка SSL сертификатов
- 2 Создание базы данных MySQL
- 3 Настройка Prosody
- 4 Создание и удаление пользователей
- 5 Сообщения об ошибках
- 6 DNS записи для Jabber
- 7 Правила для iptables
- 8 Включение сжатия в Prosody
- 9 Тестирование
Подготовка SSL сертификатов
Пользоваться самоподписанными сертификатами совсем не кошерно. :) К ним нет никакого доверия. Поэтому нужно получить бесплатный сертификат от StartSSL.com. По этому вопросу есть хорошая инструкция.
Допустим, сертификат вы получили. Теперь у вас есть файл сертификата ssl.crt и ключ ssl.key. Ключ нужно предварительно дешифровать. Конечно, можно воспользоваться и не дешифрованным, но придётся указать пароль в конфиге Prosody, выставить соответствующие права доступа и так далее…
# openssl rsa -in ssl.key -out ssl.key
Во время дешифровки нужно будет указать пароль ключа.
Кроме вашего сертификата и ключа, понадобится сертификат «Class 1 Intermediate Server CA». Скачиваем его:
# wget https://startssl.com/certs/sca.server1.crt
Объединяем в один файл (example.com записан в качестве примера, замените его на имя вашего домена):
# cat ssl.crt ssl.key sca.server1.crt > /etc/prosody/certs/example.com.pem
Сертификат будет сохранён в папке /etc/prosody/certs/.
Кроме этого, нужно создать ключ для протокола Диффи — Хеллмана. Он тоже будет использоваться в параметрах виртуального хоста, предоставляя возможность использования Forward Secrecy.
openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048
Установите права доступа, разрешающие только чтение сертификатов от имени пользователя prosody.
# chown prosody:prosody /etc/prosody/certs/*.pem # chmod 0400 /etc/prosody/certs/*.pem
На этом подготовка сертификатов закончена.
Создание базы данных MySQL
Вы можете как создать базу данных и пользователя через консоль, так и через панель управления phpmyadmin или аналогичные.
Настройка Prosody
Процесс настраивания несложен. Всё достаточно хорошо документировано (хоть и на английском), а структура конфигурационных файлов проста.
Можно с лёгкостью создавать виртуальные хосты, прописывать им особые параметры и так далее. Почти аналогия с Apache и nginx. :)
Основные параметры конфигурационного файла /etc/prosody/prosody.cfg.lua, значения которых нам будет нужно отредактировать.
allow_registration = true;
Разрешает регистрацию пользователей при помощи клиентских программ. Pidgin, например. По-умолчанию — false. Не включайте, если вам не нужно разрешать регистрацию.
authentication = "internal_hashed"
Включает хеширование паролей пользователей. Значение по-умолчанию: internal_plain, что не совсем надёжно — хранить пароли в базе в открытом виде.
Указываем тип хранилища — база данных sql:
storage = "sql"
Если вы выбрали в качестве хранилища sqlite, то раскомментируем строку:
sql = { driver = "SQLite3", database = "prosody.sqlite" }
Если же mysql:
sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
Не забудьте указать ниже параметр sql_manage_tables = true
, чтобы Prosody автоматически заполнил базу данных таблицами.
Значения prosody в параметрах database и username нужно заменить на имя базы данных и имя пользователя соответственно. Также нужно указать пароль для опции password, заменив фразу secret. Host оставляем без изменений, если сервер MySQL установлен на той же машине, что и Prosody.
Виртуальные хосты в Prosody
Следующим пунктом настройки Prosody является создание конфигурации для виртуальных хостов. Допустим, домен у нас один. Находим следующую строчку и заменяем пример example.com на имя вашего домена.
VirtualHost "example.com"
Закомментируйте строку:
enabled = false
Далее следуют настройки ssl для конкретного виртуального хоста. Нужно указать путь к сертификату и другие дополнительные опции.
Поскольку ранее мы экспортировали сертификат и ключ в один файл, то и путь нужно указать только к одному файлу.
Первые три строки — это пути к ключам/сертификатам. соответственно.
ssl = { key = "/etc/prosody/certs/example.com.pem"; certificate = "/etc/prosody/certs/example.com.pem"; dhparam = "/etc/prosody/certs/dh-2048.pem"; options = { "no_sslv3", "no_sslv2", "no_ticket", "no_compression", "single_dh_use", "single_ecdh_use" }; ciphers = "ECDH:DH:!ADH:!AECDH:!SEED:!DES:!3DES:!RC4:!NULL"; }
Четвёртая строка отвечает за опции ssl и отключает ssl версии 2 и 3. Пятая указывает, какие шифры разрешаются к использованию.
Последние два параметра для виртуального хоста, требующие шифрование при подключении клиентов и серверов. Их нужно указывать после пункта ssl = {…}.
c2s_require_encryption = true s2s_require_encryption = true
На этом настройка Prosody закончена.
Создание и удаление пользователей
Если вы не включили возможность самостоятельной регистрации пользователей при помощи клиента, то добавить новых пользователей можно через консоль простой командой: prosodyctl adduser name@example.com. При добавлении нужно будет дважды указать пароль.
Права администрирования также можно дать любому пользователю. Укажите логин нужного пользователя в параметре admins = { } конфигурационного файла. Например, так:
admins = { "user1@example.com", "user2@example.net" }
Удаление пользовательского аккаунта производится командой: prosodyctl deluser name@example.com, где name@example.com нужно заменить на jabber ID существующего пользователя.
Сообщения об ошибках
Проверьте, есть ли в логе ошибок Prosody (/var/log/prosody/prosody.err) следующее сообщение:
certmanager error SSL/TLS: Failed to load '/etc/prosody/certs/example.com.pem': Reason: bad end line (for example.com)
В этом случае нужно проверить файл сертификатов на наличие вот таких строк:
-----END CERTIFICATE----------BEGIN RSA PRIVATE KEY-----
Это неправильно и нужно их разделить, чтобы они выглядели так:
-----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY-----
DNS записи для Jabber
Для каждого домена нужно прописывать в днс соответствующие записи (хотя и не обязательно, если не требуется общение с пользователями другого домена).
_xmpp-client._tcp IN SRV 5 0 5222 xmpp.example.com. _xmpp-server._tcp IN SRV 5 0 5269 xmpp.example.com.
Где 5 — это приоритет, 0 — вес, а 5222 и 5269 — порты для client-to-server и server-to-server типов связи соответственно.
Далее следует доменное имя, указывающее на сервер с установленным jabber-ом. Это может быть как тот же самый сервер, на котором запущен сайт, так и любой другой.
Правила для iptables
Если на вашем сервере по-умолчанию блокируются входящие подключения, следует создать правила iptables, разрешающие подключение к jabber-серверу по протоколу tcp для необходимых портов:
# iptables -A INPUT -p tcp --dport 5222 -j ACCEPT # iptables -A INPUT -p tcp --dport 5269 -j ACCEPT
Включение сжатия в Prosody
Иногда может понадобиться включить сжатие для экономии трафика клиента или сервера. Для этого установите пакет lua-zlib:
# aptitude install lua-zlib
Найдите в самом начале конфигурационного файла группу параметров modules_enabled и раскомментируйте строчку:
"compression"; -- Stream compression (Debian: requires lua-zlib module to work)
И установите уровень сжатия от 1 до 9 параметром, который нужно прописать после группы modules_enabled.
compression_level = 5
Тестирование
Правильность настройки шифрования можно проверить на сайте https://xmpp.net. В наличии тест как для соединений client-to-server, так и server-to-server.