Prosody — Jabber/XMPP сервер для Debian

В репозиториях 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

Подготовка 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.

Как вы оцените статью?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Пока оценок нет)
Загрузка...

Расскажите друзьям

Обсудим?

Email будет храниться в секрете.