В этой статье будет рассказано как настроить сервер мгновенных сообщений. Грубо говоря делаем внутрекорпоративную аську.
Предпосылки
Не секрет что почти на каждом компе стоит аська. Иногда что бы общаться с друзьями, но иногда и для работы нужна. Так же практически в каждой организации есть какая нить программка локального обмена сообщениями, как правило что бы бухгалтера могли общаться меж собой. Там, где такой программки нет, активно используется телефон, электронная почта и так далее.
Ну сказать про последнее что это верное решение нельзя - по телефону человека может не оказаться на рабочим месте, а использовать почту... ну это было раньше, скажем так. А вот программы для обмена сообщениями, лантолки вские вообще вредные, ибо они ищут себя, рассылая широковещательные пакеты по сети, что красит нашу сеть, особенно если много последовательных свитчиков, или вдруг где затерялся хабик
Условия
Итог:
1) нам нужна программа обмена короткими сообщениями.
2) она должна быть по возможности свободной
3) не мешать работе сети
Настройка
Ну и вот. Сегодня мы с вами будем поднимать jabber, а что бы пользователям было удобнее - авторизация будет происходить через доменные аккаунты. Итак - у меня есть сервер на котором поднят контролер домена. на нем я и начинаю поднимать сервер jabber'а
Ставил ejabberd (это программа так называется)
Код: Выделить всё
arhiv# cd /usr/ports/net-im/ejabberd
arhiv# make install clean
Код: Выделить всё
┌────────────────────────────────────────────────────────────────────┐
│ Options for ejabberd 2.0.5_2 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [X] ODBC Enable ODBC support │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Options for diablo-jdk 1.6.0.07.02_7 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [ ] POLICY Install the Unlimited Strength Policy Files │ │
│ │ [ ] TZUPDATE Update the time zone data │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
Код: Выделить всё
===> Vulnerability check disabled, database not found
===> Found saved configuration for diablo-jdk-1.6.0.07.02_7
Because of licensing restrictions, you must fetch the distribution
manually.
Please access
http://www.FreeBSDFoundation.org/cgi-bin/download?download=diablo-caffe-freebsd7-amd64-1.6.0_07-b02.tar.bz2
with a web browser and "Accept" the End User License Agreement for
"Caffe Diablo 1.6.0".
Please place the downloaded file(s) in /usr/ports/distfiles.
*** Error code 1
Stop in /usr/ports/java/diablo-jdk16.
*** Error code 1
Приступим к настройкам
Код: Выделить всё
cd /usr/local/etc/ejabberd
cp ejabberd.cfg.example ejabberd.cfg
cp inetrc.example inetrc
Вторая проблема появилась значительно позже и называлась она сертификаты. При поднятии очередного сервера jabber столкнулся с тем, что долго не мог настроить линк меж серверами - после чтения инструкция оказалось что пока я не заведу сертификат ничего у меня не получится, даже если в конфиге я явно указал что ничего шифровать не хочу. Не будем испытывать судьбу - сертификат сделаем сразу - он нам будет нужен всеравно.
Код: Выделить всё
openssl req -newkey rsa:1024 -keyout server.pem -nodes -x509 -days 3650 -out server.cer
cat server.cer >> server.pem
rm server.cer
Код: Выделить всё
{watchdog_admins, ["roma@apk.stniva.ru"]}
{hosts, ["apk.stniva.ru"]}
{certfile, "/usr/local/etc/ejabberd/server.pem"}, starttls,
%%{auth_method, internal} %% - это я закоментировал
{auth_method, ldap}
{ldap_servers, ["localhost"]}
{ldap_base, "ou=users,dc=apk,dc=stniva,dc=ru"}
{ldap_rootdn, "cn=admin,dc=apk,dc=stniva,dc=ru"}
{ldap_password, "000000"}
{acl, admin, {user, "roma", "apk.stniva.ru"}}
{access, register, [{deny, all}]}.
{language, "ru"}
У меня все запустилось с первого раза. Попробовал авторизоваться - не получилось. Посидел, подумал, почитал логи - жабка писала что не может прочесть мой пароль - понял что у меня пользователь совмещен с админом сервера, блин. Вспомнил пароль обычного пользователя - ура, прокатило!
Это была минимальная конфигурация с которой мы запустились. Теперь будем делать навороты. Первое что захотелось - это что бы выводилась информация о пользователе - кто он такой - для этого были проделаны следующие изменения конфига
Код: Выделить всё
%%{mod_vcard, []},
{mod_vcard_ldap,
[
{ldap_rootdn, "cn=admin,dc=apk,dc=stniva,dc=ru"},
{ldap_password, "000000"},
{ldap_base, "ou=users,dc=apk,dc=stniva,dc=ru"},
{ldap_vcard_map,
[{"NICKNAME", "%u", []},
{"GIVEN", "%s", ["givenName"]},
{"FAMILY", "%s", ["sn"]},
{"FN", "%s %s", ["givenName", "sn"]}]},
{ldap_search_fields,
[{"User", "%u"},
{"Name", "givenName"},
{"Family Name", "sn"}]},
{ldap_search_reported,
[{"Full Name", "FN"},
{"Nickname", "NICKNAME"}]}
]},
Хочется обратить внимание:
1) Жаба не любит всякие комменты, тем более что раньше они были % а теперь стали %% - хотя прокатывает и % но сталкивался что только после удаления такой строки запускалась
2) Поиск происходит не по * а по минимум 3м символам ника - это можно отключить... я обычно отключаю, но когда ставишь первый раз надо иметь в виду
3) У пользователя, под которым ejabber идет в LDAP должны быть права на чтение пароля пользователя, пароль пользователя в лдапе не должен быть "приватным" и так далее - говоря другим словами я могу входить в домен через, но в жабе я могу и не авторизоваться - стоит это помнить
4) Жаба может очень долго запускаться. вот тут уже был случай что жаба запускалась час. На первый взгляд это выглядит как будто она не пускается и только вникнув понимаешь что она пытается пуститься и просто не надо её трогать - запустится