Установка легковесного Jabber сервера Prosody с LDAP аутентификацией через SASL

Это простой рецепт для настройки IM сервера для общения внутри компании. В нашей компании для общения внутри сети используется Jabber и некоторое время назад мы стали замечать что jabberd14 нещадно протекает и грузит сервер. Поиски легковесной замены привели к северу Prosody написаному на языке Lua. По заверению разработчиков это современный гибкий сервер для общения, ориентированый на простоту настройки и нетребовательный к ресурсам. Работа последние пару месяцев это в принципе подтверждает.

Сервер на котором крутится Jabber у нас с Ubuntu 10.04 LTS, и установка, как и для любого основанного на Debian дистрибутива, довольно проста — добавить репозиторий в /etc/apt/sources.list:

deb packages.prosody.im/debian lucid main

добавить ключ:

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

и установить:

apt-get update && apt-get install prosody-0.9 liblua5.1-cyrussasl0 libsasl2-modules-ldap sasl2-bin

Как вы выше заметили, параллельно мы устаовили SASL, который используем для аутентификации в LDAP компании (настройка самого LDAP не рассматривается — считаем что он уже есть).

Настроим параметры демона saslauthd для работы с механизмом LDAP — добавим в /etc/default/saslauthd следующее:

START=yes
MECHANISMS="ldap"


Созданим настройку для XMPP сервиса /etc/sasl/xmpp.conf, будем проверять через механизмы PLAIN и LOGIN:

pwcheck_method: saslauthd
mech_list: plain login


В конфигурационном файле /etc/saslauthd.conf укажем адрес LDAP сервера и базовый DN, по которому будем искать пользователей:

ldap_servers: ldap://127.0.0.1
ldap_search_base: ou=users,dc=example,dc=com


Теперь можно перезапустить демона аутентификации saslauthd:

/etc/init.d/saslauthd restart

Настройка Prosody довольно проста — файлы конфигурации пердставляют собой Lua скрипты. Добавим в /etc/prosody/prosody.cfg.lua:

-- Enable the cyrus backend
c2s_require_encryption = true
anonymous_login = false
allow_unencrypted_plain_auth = false
authentication = "cyrus"
cyrus_service_name = "xmpp" -- Optional, defaults to "xmpp"
cyrus_application_name = "xmpp"


Перезапускаем Prosody:

/etc/init.d/prosody restart

Теперь пользователи могут пользоваться Jabber сервером и поедание ресурсов jabberd14 в прошлом. Мы не разбирались почему именно jabberd14 поедает ресуры, возможно был виноват один из установленых плагинов, но Prosody выполняет все необходимые нам функции потребляя минимум ресурсов.

Дополнительные плагины, которые мы используем с Prosody:
  • roster_command — для управления ростерами через prosodyctl (у нас крон подписывает всех на всех)
  • muc_log — запись разговоров в конференциях
  • muc_log_http — встроеный web-интерфейс для просмотра разговров в конференциях записаных mod_muc_log
  • webpresence — публикует Jabber статус пользователей

Дополнительное чтение:
  • +12
  • 9,1k
  • 9
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 9
  • –1
    Эх. Где же вы были неделю назад?
    • 0
      было бы интересно услышать все-таки какие ресурсы кушает?
      • +1
        А чего не Ejabberd? Или искали именно что-то легкое?
        Сколько оно памяти ест сейчас?
        • 0
          Для вендового сервера сборка есть?
          • 0
            У меня стоит jabberd2. Он функционалом не устроил? У меня задачи только между пользователями сообщения передавать. На внешние сети доступа нет. Чаты так и не запустил, да и всё равно на ejabberd в своё время никто не пользовался. Перешёл на jabberd2 после того, как начались нехватки оперативки на сервере с ejabberd. Не только он был виноват. Да и памяти было очень мало.
            • 0
              У ejabberd есть BOSH, с его помощью я, например, сделал чатик на сайт. Ну то есть посетитель приходит и может сразу написать определенному юзеру. Без всяких сторонних плагинов или сервисов.
              За это я ему (ejabberd`у) благодарен и не променяю ни на что :)
            • 0
              А есть ли у него готовый модуль для записи логов сообщений?
              И планируется ли поддержка кластеризации?
              • 0
                А как заполняете vcard у пользователей? Было бы логично тянуть все данные из ldap. Какой-то модуль используете?

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.