|
In deus ex machine we trust.
|
Установка и настройка корпоративного Jabber-сервера
Установка и настройка корпоративного Jabber-сервера
Вступление
Вот и назрела потребность в Jabber сервере. Их представлено множество, но выбор пал на ejabberd. Почему именно eJabber?
Ну, во-первых, простота настройки: по сравнению со всеми XML-конфигурируемыми серверами, конфиги на языке "erlang" выглядят более-менее прилично. Я люблю писать XML конфиги, это, конечно, удобно, когда во всём разбираешься. Но, когда всё это видишь впервые, хочется только одного: поймать разработчиков, и как следует допросить их, почему был невозможен секционный конфиг.
Зато конфиг на erlang'е исповедует именно секционность, правда слегка непривычно организованную в виде фигурных скобочек:
Пример конфига ejabberd:
{listen,
%% Jabber ICQ Transport
{5347, ejabberd_service, [
{ip, {127, 0, 0, 1}},
{access, local},
{hosts, ["icq.demlabs.ru", "sms.icq.demlabs.ru"]},
]},
},
Если абстрагироваться от синтаксиса erlang'а, то перед нами всё тот же секционный конфиг с неограниченной вложенностью элементов и дефолтными конструкциями. Тот же XML только более понятный.
Итого: ejabberd это то, что нам подходит.
Установка
Открываем рутовую консоль и там пишем:
# aptitude install ejabberd
Теперь ejabberd установился. Так же нам понадобиться пакет openssl:
# aptitude install openssl
С помощью него генерируем самоподписанный сертификат x509:
# cd /tmp
# openssl req -new -x509 -nodes -newkey rsa:2048 \
-keyout privkey.pem -out /etc/ejabberd/ejabberd.pem
# cat privkey.pem >> /etc/ejabberd/ejabberd.pem
# rm privkey.pem
Без этой штуки не заработает TLS шифрование, что повлечёт за собой игнорирование большинства известных Джаббер-серверов, того же gmail'а. По-хорошему, конечно, самоподписанный сертификат не то, на чём стоит остановливаться. На сайте сообщества XMPP можно получить сертификат, подписанный корневым сертификатом сообщества. Тогда Jabber-клиент не будет ругаться, что сертификат "неизвестной породы".
Для того, чтобы работал шлюз в сеть ICQ, нужно установить программу-транспорт. Программисты компании Google (а так же программисты коммьюнити) в поте лица создавали PyICQt, грех не воспользоваться им.
# aptitude install pyicqt
Настройка ejabberd
Открываем /etc/ejabberd и находим конфиг ejabberd.cfg.
И начинаем его редактировать. Для начала ищем override_acls и раскоментируем его:
%% Override local options (specific for this particular ejabberd node).
override_acls
Этим мы разрешаем перезапись дефолтных политик безопасности.
Далее прописываем имя хоста, в нашем случае это, конечно, demlabs.ru:
%% Hostname
{ hosts, ["demlabs.ru"] }.
Хостнейм должен быть обязательно, если его нет, то придумайте и вставьте соответствующую запись в /etc/hosts или в локальную зону DNS.
Ищем ключевое слово route_subdomains:
{route_subdomains, s2s}.
И снимаем комментарий перед ним. Без этой директивы Джаббер будет "вещью в себе", без возможности поболтать с пользователями XMPP с других серверов.
Переходим к секции {listen,, в ней описаны сетевые сервисы, предоставляемые сервером.
Надо заметить, что модульность в джаббер-серверах делается именно с помощью сетевых сервисов. Пользовательские директории, внешние транспорты и прочие необязательные "фишки" описываются там же, где и прослушка клиентских соединений.
Маленькая ремарка: стандарт XMPP различает два типа соединений:
- s2s server-to-server, соединение между двумя серверами
- c2s client-to-server, соединение между клиентом и сервером
Для начала убедимся, что у нас всё в порядке с портом, прослушивающим c2s соединения:
%% слушаем порт 5222 и разрешаем доступ всем:
{5222. ejabberd_c2s, [ { access,c2s},
%% устанавливаем ограничение по ширине канала
{shaper,c2s_shaper},
%% максимальный размер кэша
{max_stanza_size,65536},
%% включаем возможность SSL и указываем путь к сертификату
tls,{certfile, "/etc/ejabberd/ejabberd.pem"}
]},
делаем такую же запись для порта 5223 (старый порт для SSL соединений):
%% слушаем порт 5223 и разрешаем доступ всем
{5223. ejabberd_c2s, [ { access,c2s},
%% устанавливаем ограничение по ширине канала
{shaper,c2s_shaper},
%% максимальный размер кэша
{max_stanza_size,65536},
%% включаем возможность SSL и указываем путь к сертификату
tls,{certfile, "/etc/ejabberd/ejabberd.pem"}
]},
Снимаем комментарии с сервиса входящих s2s соединений:
{5259. ejabberd_s2s_in, [
{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},
Самое главное убедиться в наличие строчки "tls-бла-бла-бла" и правильном пути к файлу с сертификатами. Остальное должно по дефолту быть в порядке.
Далее снимаем комментарии с секции ICQ Transport'а:
%% Jabber ICQ Transport
%% слушаем порт 5347:
{ 5347, ejabberd_service, [
%% на локальном IP адресе:
{ip, {127.0.0.1}},
%% и разрешаем доступ только локальный
{access, local },
{hosts, ["icq.demlabs.ru". "sms.icq.demlabs.ru"],
[{password,"verystrongpassword"}]}
%% имя хостов шлюза, если указать что-то что резолвится
%% только локально, то гейт не будет доступен снаружи
]},
И последняя, интересующая нас подсекция listen но не последняя по значению!
Секция web админки:
%% Слушаем порт 5280 и на нём висит админко:
{5280, ejabberd_http, [
http_poll,
web_admin
]}
далее снимаем комментарий с s2s_user_starttls и с s2s_certfile, убеждаемся, что путь указывает на наш файл с сертефикатом:
{s2s_use_starttls, true}.
{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
утверждаем правила по-умолчанию для всех:
{s2s_defaulkt_policy, allow}.
Проверим конфиг на предмет открытой регистрации для всех:
{access, register, [{allow, all}]}.
Выставим язык по умолчанию для сообщений сервера:
{language, "ru"}.
Идём в секцию `{modules', ищем упоминание mod_register и вбиваем туда свой текст регистрации:
{mod_register, [
{welcome_message, {"Добро пожаловать!",
"Добро пожаловать на XMPP сервер компании DEM Labs."}
{access, register}
]},
С этим вроде всё.
Теперь идём в файл /etc/ejabberd/inetrc и приводим его к следующему виду(если нет зарегистрированного домена):
{file,hosts, "/etc/hosts"}.
или, если такой есть,
{file, resolv, "/etc/resolv.conf"}
Этим мы избавляем себя от необходимости содержания мастер-зоны на своём сервере с нужными записями.
Не забудьте прописать в /etc/hosts все ваши доменные имена, если у вас нет зарегистрированного интернет домена.
Настройка PyICQt
Открываем файл /etc/pyicqt.conf.xml - XML конфиг! Но прежде, чем застрелиться от ужаса, необходимо привести его к божескому виду.
Для начала выставим Jabber Identificator (сокращённо JID):
<jid>icq.demlabs.ru</jid>
Далее установим адрес аплинк-сервера (в нашем случае это локальный адрес нашего eJabberd) и краткое его описание:
<mainServer>127.0.0.1</mainServer>
<mainServerJID>demlabs.ru</mainServerJID>
<website>http://demlabs.ru</website>
Укажем порт прослушивания и пароль. Проверьте, эти данные должны совпадать с теми, которые указаны в секции ICQ transport в конфигурационном файле ejabberd.
<port>5347</port>
<secret>strongpassword</secret>
Укажем русский языком сообщений по умолчанию.
<lang>ru</lang>
Важный момент! Кодировкой для ICQ сетей является CP1251.
<encoding>cp1251</encoding>
Так же напишем свой текст приветствия при соединении (заносим в комментарии, если такого не требуется)
<sessionGreeting> Добро пожаловать в ICQ гейт компании
DeM Labs. Если вы это видите, значит, ICQ уже работает
</sessionGreeting>
и текст для новых зарегистрированных клиентов:
<registerMessage>Вас только что с превеликим удовольствием
зарегистрировал ICQ шлюз PyICQt!</registerMessage>
Укажем администраторов шлюза:
<admins>
<jid>admin@demlabs.ru</jid>
</admins>
Важный момент! Для ОС семейства Linux следующая опция кардинально улучшает производительность сервера:
<reactor>epoll</reactor>
Заключение
Перегружаем сервисы (обычно они автоматически стартуют сразу же после установки).
# /etc/init.d/pyicqt restart
# /etc/init.d/ejabberd restart
Подключаемся своим любимым Jabber-клиентом(в моём случае это Psi), регистрируем пользователя, регистрируем номер "аси" на ICQ-шлюзе(для этого надо зайти в список сервисов и поискать в выпадающем меню пункт "Registration") и забываем навсегда про ICQ-клиенты и необходимость их обновлять из-за причуд Mirabilis.
Теперь этим будет заниматься администратор шлюза ;)

