Pull to refresh

Ejabberd: полезные советы

Reading time3 min
Views7.1K
Поскольку про настройку самого сервера, включая создание общих ростеров и подключение транспортов, написано видимо-невидимо, я затрону вопросы, менее освещенные в отечественной прессе — безопасность, удобство, скорость.


1. Безопасность.



Начнём с самого простого и самого важного — обезопасим себя!
Сперва включим на клиенте шифрование соединения через ssl, чтобы враги, которые непременно пытаются выкрасть секретный пароль, потерпели своё первое поражение.
С включением шифрования соединения можно разрешить передавать пароль в открытом виде.

<Отступление>
Я исхожу их того, что на серверной стороне сертификат уже есть.
Если же случилось досадное упущение, и сертификат сгенерирован не был, это можно сделать вот так:
cd /var/lib/ssl/; openssl req -newkey rsa:1024 -keyout server.pem -nodes -x509 -days 3650 -out server.cer
echo "" >> server.pem; cat server.cer >> server.pem

Как видите, это проще, чем установка Gentoo (как известно, требуется выполнить всего три команды, чтобы поставить Gentoo).

Не забудем про права на сертификат: chown ejabberd:ejabberd server.pem; chmod 0400 server.pem

Включается же поддержка этого счастья в секции listen:

%% порт 5222 слушает соединения клиент-сервер для клиентов, умеющих starttls, а также принимает нешифрованные соедениния для старых клиентов.
{5222, ejabberd_c2s, [
{certfile, "/var/lib/ssl/ejabberd.pem"} ,starttls,
{access, c2s},{shaper,c2s_shaper},
{max_stanza_size, 65536}
]},
%% порт 5223 слушает c2s соединения для старого ssl.
{5223, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{certfile, "/var/lib/ssl/ejabberd.pem"}, tls,
{max_stanza_size, 65536}
]},

Чтобы межсерверные соединения также шифровались, после секции listen надо раскоментировать
{s2s_use_starttls, true}.
{s2s_certfile, "/var/lib/ssl/ejabberd.pem"}.

</Отступление>

Итак, у нас остаётся последний участок, где пароли передаются в достаточно открытом виде — админка! Это совсем негоже, поэтому будем включать шифрование и здесь.
Возвращаемся в секцию listen и ищем запись для порта 5280.
Исправляем примерно так:

{5280, ejabberd_http, [http_poll, web_admin, tls, {certfile, "/var/lib/ssl/ejabberd.pem"}]},

Здесь можно возрадоваться и наслаждаться уютной админкой, вход в которую будет теперь тут — jabber.tld:5280/admin/

2. Удобство пользования.



Чтобы сделать общение с сервером по-настоящему удобным, щедрой рукой добавим ему сторонних мордулей.
В зависимости от дистрибутива, для этого придётся делать разные приседания. К слову, в Альте всё уже сделано за вас ^_^

Итак, на своих инсталляциях я добавляю
mod_statsdx: расширенная статистика, показывающая разблюдовку по клиентам, ОС, типу соединения подключенных пользователей, количество оффлайновых сообщений и многое-многое другое. (+ mod_stats2file, который сохраняет всю статистику в файл в указанное место). Родной mod_stats можно отключить.
mod_ctlextra: множество дополнительных команд для ejabberdctl. Операции с ростером, операции с группами для shared роостера и т.д. Более чем полезное полезное расширение.
— mod_http_bind и mod_http _fileserver, чтобы можно использовать web-клиенты.
— mod_rest / mod_xmlrpc — по вкусу и по надобности. Здесь надо помнить о необходимости отдельно защитить точки входа для указанных модулей.

Собирать модули достаточно просто — либо вручную с помощью erlc, либо запуская build.sh (предварительно проверив пути).
Готовый модуль надо поместить к остальным модулям (обычно, /usr/lib{,64}/ejabberd/ebin/) и внести необходимые изменения в конфиг.
Пример таких изменений можно посмотреть тут.

3. Скорость



Во-первых, надо пересмотреть необходимость таких тяжелых модулей, как mod_shared_roster_ldap — при 5ти сотнях пользователей в AD ростер будет забираться с сервера перу-тройку минут для каждого подключающегося клиента.
Возможно, будет лучше заполнять ростер новых пользователей вручную — «Поиск->Найти всех->Добавить всех». У такого варианта, впрочем, есть свой большой минус — т.к. уволенные или по иным причинам отключенные записи по-прежнему будут висеть в ростерах, столько любимые секретаршами рассылки «всем», не через MOTD, будут неуклонно забивать базу с оффлайновыми сообщениями и её придётся чистить по крону.
Можно отключить pubsub, если вы не используете подписки.

Та-да-м! И наконец можно на самой машине пересобрать xml.erl с опцией +native, что даст очень хороший скачок скорости, поскольку вседанные сериализованы в xml, на парсинг которого и уходит больше всего тактов процессора.
cd ejabberd/src; erlc +native xml.erl
Tags:
Hubs:
Total votes 12: ↑10 and ↓2+8
Comments2

Articles