Установка Ejabberd под FreeBSD+AD+SSL
Задача и решение
Необходимо было построить на базе ejabberd корпоративный jabber-сервер. База пользователей хранится в M$ Active Directory, оттуда же производится авторизация. Так же необходимо что бы все пользователи видели всех пользователей домена в своём ростере. В качестве дополнительного ограничения на пользовательские ростеры выдвигается требование разбиения контактов на группы по отделам.
Что где взять
Патч для v1.0.0:
http://realloc.spb.ru/files/ejabberd/ejabber_ad_001.patch.gz
Патч для v1.1.1:
http://realloc.spb.ru/files/ejabberd/ejabber_ad_002.patch.gz
Как пропатчить
Копируем патч в порт с ejabberd (/usr/ports/net-im/ejabberd)
make patch
zcat ejabber_ad_002.patch.gz | patch -p1
make install clean
Как настроить AD
Для начала надо сделать некоторые вещи в AD. Создать пользователя в домене ejabberd. Необходимо создать группу, члены которой будут иметь доступ к jabber серверу и показываться в ростере. В нашем примере используется домен chloe.ku3 и группа Jabber Users. После внесения всех нужных пользователей в эту группу надо прописать им в поле департамента группу в общем ростере, которой они будут принадлежать. Например пользователь
vasya@domen.ru должен быть включен в группу Jabber Users и в поле департамента у него будет прописано Support. Это заставит его контакт появиться в группе Support в ростере.
Настройка ejabberd
Тут просто опишу какие изменения необходимы в конфигурационном файле.
{auth_method, ad}.
В качестве метода аутентификации указываем AD. Из-за своеобразного видения стандартов одной маленькой и мягкой фирмой обычная ldap-авторизация с AD не работает.
{ad_servers, ["192.168.0.1"]}.
{ad_uidattr, "sAMAccountName"}.
{ad_group, "CN=Jabber Users,CN=Users,DC=avto,DC=yar,DC=ru"}.
{ad_base, "dc=avto,dc=yar,dc=ru"}.
{ad_rootdn, "CN=ejabberd,CN=Users, DC=avto,DC=yar,DC=ru "}.
{ad_password, "qwerty" }.
Тут всё просто.
ad_servers - IP или имя нашего домен-контроллера.
ad_uidattr - Атрибут, в котором хранится логин пользователя
ad_group - Группа, в которую входят правильные пользователи
ad_base - Собственно по какому домену ищем
ad_rootdn - Кем биндиться будем (ejabberd)
ad_password - Пароль того, кем биндиться будем. Анонимное с AD не работает. (qwerty)
В списке модулей надо вместо mod_vcard использовать mod_vcard_ad, и вместо mod_shared_roster надо mod_shared_roster_ad соответственно. Это позволит использовать AD ещё и для поиска и для вытягивания юзеринфо. Так же надо отключить in-band регистрацию пользователей. Во-первых она всё-равно не будет работать, а во-вторых она на корпоративном сервере ни к чему. Cделать это можно убрав mod_register из списка модулей.
Полный рабочий конфиг:
% $Id: ejabberd.cfg.example 538 2006-04-22 04:02:42Z alexey $
%override_acls.
% Users that have admin access. Add line like one of the following after you
% will be successfully registered on server to get admin access:
{acl, admin, {user, "nev"}}.
%{acl, admin, {user, "ermine"}}.
% Blocked users:
%{acl, blocked, {user, "test"}}.
% Local users:
{acl, local, {user_regexp, ""}}.
% Another examples of ACLs:
%{acl, jabberorg, {server, "jabber.org"}}.
%{acl, aleksey, {user, "aleksey", "jabber.ru"}}.
%{acl, test, {user_regexp, "^test"}}.
%{acl, test, {user_glob, "test*"}}.
% Only admins can use configuration interface:
{access, configure, [{allow, admin}]}.
% Every username can be registered via in-band registration:
% You could replace {allow, all} with {deny, all} to prevent user from using
% in-band registration
{access, register, [{allow, all}]}.
% After successful registration user will get message with following subject
% and body:
{welcome_message,
{"Welcome!",
"Welcome to Jabber Service. "
"For information about Jabber visit http://jabber.org"}}.
% Replace them with 'none' if you don't want to send such message:
%{welcome_message, none}.
% List of people who will get notifications about registered users
%{registration_watchers, ["admin1@localhost",
% "admin2@localhost"]}.
% Only admins can send announcement messages:
{access, announce, [{allow, admin}]}.
% Only non-blocked users can use c2s connections:
{access, c2s, [{deny, blocked},
{allow, all}]}.
% Set shaper with name "normal" to limit traffic speed to 1000B/s
{shaper, normal, {maxrate, 1000}}.
% Set shaper with name "fast" to limit traffic speed to 50000B/s
{shaper, fast, {maxrate, 50000}}.
% For all users except admins used "normal" shaper
{access, c2s_shaper, [{none, admin},
{normal, all}]}.
% For all S2S connections used "fast" shaper
{access, s2s_shaper, [{fast, all}]}.
% Admins of this server are also admins of MUC service:
{access, muc_admin, [{allow, admin}]}.
% All users are allowed to use MUC service:
{access, muc, [{allow, all}]}.
% This rule allows access only for local users:
{access, local, [{allow,
Читать далее...