Ejabberd настройка: Инструкция по настройке Ejabberd с транспортом J2J/ICQ(с корректной кодировкой) на Ubuntu Server / Хабр
Установка XMPP-сервера ejabberd 18.12.1 на Debian 9 Stretch
Содержание статьи:
Появилась потребность в корпоративном Jabber-сервере (XMPP). Для реализации задачи выбрал ejabberd, по заявлениям разработчика он легкий, быстрый и надежный как скала.
Собирать ejabberd версии 18.12.1, будем из исходников на Debian 9 Stretch.
Подготовка системы
Перед началом установки обновляем систему до актуального состояния:
| apt-get update && sudo apt-get upgrade -y |
Устанавливаем необходимые зависимости:
| apt-get install gcc g++ make autoconf erlang mysql-server git libssl-dev libyaml-dev zlib1g-dev libexpat1-dev imagemagick -y |
Установка ejabberd
Скачиваем исходники ejabberd релизной версии 18. 12.1, распаковываем архив и переходим в него:
| wget https://github.com/processone/ejabberd/archive/rel-18.12.1.zip
unzip rel-18.12.1.zip cd ejabberd-rel-18.12.1 |
Выполняем настройку сборки. Я указал пути размещения файлов, в стандартные директории, включил MySQL/STUN/SIP поддержку:
| ./autogen.sh ./configure —prefix= —exec-prefix=/usr —enable-mysql —enable-stun —enable-sip |
После запускаем компиляцию и выполняем установку:
По окончании установки, выполним настройки для запуска и нормальной работы ejabberd. Добавляем unit-файл в систему:
| cp ejabberd. service /etc/systemd/system/multi-user.target.wants/ejabberd.service ln -s /etc/systemd/system/multi-user.target.wants/ejabberd.service /lib/systemd/system/ejabberd.service |
Создадим пользователя ejabberd, от имени которого будет запускаться ejabberd-сервер и выставляем правильные права на каталоги:
| useradd ejabberd -d /var/lib/ejabberd -s /bin/sh -c «Ejabberd service user»
chown root:ejabberd -R /etc/ejabberd chown ejabberd:ejabberd -R /var/lib/ejabberd chmod 700 -R /var/lib/ejabberd chown root:ejabberd /var/log/ejabberd chmod 770 /var/log/ejabberd chmod 755 /usr/sbin/ejabberdctl |
Теперь можно запустить ejabberd-сервер:
Операции после установки
После установки пакета ejabberd, рекомендуется настроить на использование базы данных MySQL и не использовать встроенную Mnesia. Это связано с ограничением Mnesia на размер БД (2Gb). Так же необходимо создать административную учетную запись и назначить ей права доступа администратора.
Управление конференц-комнатами ejabberd через консоль ejabberdctl.
В качестве памятки опишу как управлять конференц-комнатами XMPP-сервера ejabberd через консоль ejabberdctl.
Рассмотрю самые основные моменты, которые у меня часто возникают в работе с конференц-комнатами (создание, задание параметров комнаты, определение членства пользователя в комнате, удаление комнаты).
Все ниже описанные действия применялись на развернутом XMPP-сервере ejabberd 18.12.1 на Debian 9 Stretch по этой статье.
В моем случае ejabberd-сервер работает от пользователя ejabberd, поэтому работать с консолью ejabberdctl необходимо через этого же пользователя.
Создадим комнату «general«, для сервиса MUC «conference. example.com» и домена «example.com»:
| sudo -u ejabberd ejabberdctl create_room «general» «conference.example.com» «example.com» |
Чтобы отобразить доступные параметры для комнаты, выполним команду:
| sudo -u ejabberd ejabberdctl get_room_options «general» «conference.example.com» |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| title description allow_change_subj false allow_query_users true allow_private_messages true allow_private_messages_from_visitors anyone allow_visitor_status true allow_visitor_nickchange false public true public_list true persistent true moderated true captcha_protected false members_by_default true members_only true allow_user_invites false allow_subscription false password_protected false password anonymous false presence_broadcast [moderator,participant,visitor] allow_voice_requests true voice_request_min_interval 1800 max_users 200 logging true vcard vcard_xupdate undefined captcha_whitelist {0,nil} mam true pubsub lang |
Для примера для комнаты «general«, укажем что комната постоянная (persistent) и вход в нее только по членству (members_only). Выполним команду:
| sudo -u ejabberd ejabberdctl change_room_option «general» «conference.example.com» «persistent» «true» sudo -u ejabberd ejabberdctl change_room_option «general» «conference.example.com» «members_only» «true» |
Так как для комнаты указали вход в нее только по членству, то добавить членство в комнате «general«, для пользователя «[email protected]», можно командой:
| sudo -u ejabberd ejabberdctl set_room_affiliation «general» «conference.example.com» «[email protected]» «member» |
Удалить комнату «general«, можно командой:
| sudo -u ejabberd ejabberdctl destroy_room «general» «conference. example.com» |
Более подробная документация по API находится на оф. сайте — https://docs.ejabberd.im/developer/ejabberd-api/admin-api/
Опубликовано в :
ejabberd
Настройка Ejabberd
Настройка XMPP сервера Ejabberd.
Файл конфигурации
Debian/Mandriva /etc/ejabberd/ejabberd.cfg
Freebsd /usr/local/etc/ejabberd/ejabberd.cfg
Полезное
Не забываем давать права на запись в папку, где хранятся логи (или она может быть не создана).
ejabberd start — Запуск ejabberd в режиме сервера
ejabberd stop — Остановка ejabberd
ejabberd restart — Рестарт ejabberd
ejabberd status — Получить статус сервера ejabberd
ejabberd live — Стартовать ejabberd в интерактивном режиме (будет видно весь процесс загрузки сервера, удобно для отслеживания ошибок)
Веб интерфейс доступен по адресу — http://localhost:5280/admin/
Более подробно о настройке Ejabberd:
http://www. process-one.net/en/ejabberd/guide_en
В пункте 3.2 руководства описывается работа Ejabberd с базами данных.
Настройка
%% доменное имя или IP адрес вашего сервера, localhost указывается в том случае, если планируется доступ к службе с локальной машины
{hosts, ["localhost", "domen.ru"]}.
%% в логи пишется все - 4, в логи пишутся только ошибки - 2
{loglevel, 4}.
%% указываем пользователя (или нескольких пользователей) которые будут иметь права администратора и смогут заходить в веб-панель администрирования jabber сервера - регистрация этих пользователей происходит обычным способом через клиент
{acl, admin, {user, "user"}}.
%% Здесь указано на каких портах будет работать сервер в режимах c2s, s2s, http
{listen, [
{5222, ejabberd_c2s, [
{certfile, "/opt/ejabberd-2. 1.0/conf/server.pem"}, starttls,
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
{5223, ejabberd_c2s, [
{certfile, "/opt/ejabberd-2.1.0/conf/server.pem"}, tls,
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
%% s2s - server to server сообщение от одного сервера при необходимости шифруется и передается на другой сервер, а на другом сервере происходит соединение c2s
{5269, ejabberd_s2s_in, [
{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},
{5280, ejabberd_http, [
captcha,
http_bind,
http_poll,
web_admin
]}
]}.
%% Использовать объединение серверов. Нужен сертификат
{s2s_use_starttls, true}.
%% Сертификат для S2S
{s2s_certfile, “/opt/ejabberd-2.1.0/conf/server.pem”}.
%% Разрешить или запретить общение с серверами.
%% {{s2s_host, “goodhost.org”}, allow}.<br /><br />
%% {{s2s_host, “badhost.org”}, deny}.<br /><br />
%% тут подключаем mod_log_chat логи будут записаны в html формате в папку web сервера /var/www/html/jabberlog, и будут доступны через http (при условии корректной настройки веб-сервера)
{mod_log_chat, [{path, "/var/www/html/jabberlog"}, {format, html}]},<br /><br />
%% Также следует учесть, что аккаунт администратора регистрируется через обычный jabber клиент. Для возможности регистрации пользователей на сервере следует определить права в соответствующей строке конфига как:
{access, register, [{allow, all}]}.
Создание сертификата
cd /usr/local/etc/ejabberd/
openssl req -new -x509 -nodes -newkey rsa:1024 -days 3650 \
-keyout privkey.pem -out server.pem -subj \
"/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=hostname.ru/[email protected]"
cat privkey.pem >> server.pem
rm privkey.pem
mv server.pem ssl.pem
DNS — SRV записи
Запись SRV RR может выглядеть так:
_sip._udp SRV 0 0 5060 domain.tld.
В этом примере _sip._udp это IETF тип сервиса и протокол. SRV это тип DNS RR,
приоритет сервера установлен в 0
значение weight 0,
5060,- порт, на котором работает SIP,
domain. tld,- адрес сервера (SIP-прокси).
SRV для Jabber:
_jabber._tcp SRV 5 0 5269 domain.tld.
_xmpp-server._tcp SRV 5 0 5269 domain.tld.
_xmpp-client._tcp SRV 5 0 5222 domain.tld.
Записи _jabber (и _xmpp-server) используются для интерконнекта с другими jabber-доменами,
_xmpp-client указывает на хост, на котором должен регистрироваться (авторизовываться) клиент.
Если протокол не указан, подразумевается ._tcp.
Если DNS расположено у хостера то скорее всего надо сделать следующее:
- Выбрать тип записи из списка — это будет SRV запись
- В графе доменного имени указать _jabber._tcp.domain.tld.
- В графе параметры указать приоритет сервера, значение weight, порт, домен: 0 0 5222 domain.tld
- И также сделать для записей _xmpp-server._tcp и _xmpp-client._tcp
- Однако от хостера к хостеру эта процедура может варьироваться, так что уточняйте.
Как установить Ejabberd на RHEL 8?
Ejabberd — это бесплатный XMPP-сервер с открытым исходным кодом, написанный на Erlang.
Ejabberd был разработан для масштабируемости и отказоустойчивости.
Он имеет небольшой ресурсный ресурс и может работать на любой Unix, такой как операционная система — Linux, FreeBSD, Solaris, macOS, OpenBSD и другие.
Ejabberd использует хранилище данных по умолчанию — Mnesia (распределенная внутренняя база данных Erlang), но вы можете использовать сервер баз данных SQL или NoSQL.
Особенности Ejabberd XMPP Server
Ejabberd имеет модульную архитектуру, которая обеспечивает высокую настраиваемость и легкий доступ к необходимым функциям, которая включает в себя:
- Store-and-forward (автономные сообщения)
- Список контактов (реестр) и наличие
- Обмен сообщениями
- Расширение присутствия пользователя: протокол личных событий (PEP) и индикатор ввода
- Профиль пользователя с vCards
- Групповой чат: MUC (многопользовательский чат)
- Архивация сообщений с помощью Message Archive Management (MAM)
- Квитанции о доставке сообщений (XEP-184)
- Настройки конфиденциальности, через список конфиденциальности и простые расширения блокировки
- Последняя активность
- Метрики и полное администрирование из командной строки
- Полнофункциональная веб-поддержка, с BOSH и веб-сокетами
- Управление потоком для обеспечения надежности сообщений на мобильных устройствах (также известный как XEP-0198)
- и многое, многое другое.
Как установить Ejabberd XMPP Server на RHEL 8
Ejabberd упакован в файл RPM, который можно легко загрузить и установить с помощью менеджера пакетов rpm.
Если у вас есть страсть к компиляции из исходного кода, сделайте это.
Шаг 1: Обновление системы
Как обычно, вам нужно работать на обновленной системе
sudo yum -y update
Шаг 2: Загрузите и установите пакет RPM Ejabberd
После обновления загрузите пакет RPM Ejabberd.
Вам нужно будет проверить наличие последней версии, прежде чем делать фактическую загрузку.
На момент написания статьи доступна версия 18.12.1
sudo yum -y install wget export VER="18.12.1" wget https://www.process-one.net/downloads/ejabberd/18.12.1/ejabberd-$VER-0.x86_64.rpm
Установите загруженный RPM-пакет, выполнив команду:
sudo yum localinstall ejabberd-$VER-0.x86_64.rpm
Это поместит скрипт инициализации ejabberd в /etc/init.d/ejabberd.
- Создан системный пользователь ‘ejabberd‘
- Каталог приложения ejabberd — /opt/ejabberd. Это home для пользователя ejabberd.
- Когда запускается ejabberd, процессы, которые запускаются в системе, это beam или beam.smp, а также epmd.
Шаг 3: Запустите сервис Ejabberd
Теперь, когда мы выполнили установку, нам нужно запустить службу и включить ее автоматический запуск при перезагрузке сервера.
Найдите ejabberd.service и скопируйте его в /etc/systemd/system
sudo yum -y install mlocate sudo updatedb sudo cp $(locate ejabberd.service) /etc/systemd/system
Затем перезагрузите systemd
sudo systemctl daemon-reload
Как только новый сервис ejabberd обнаружен, запустите его
sudo systemctl enable --now ejabberd
Вы можете подтвердить, что сервис работает.
systemctl status ejabberd
Шаг 4: Создайте учетную запись администратора ejabberd XMPP.
Вам нужна учетная запись администратора XMPP для доступа к панели администратора Web Admin.
Измените свой рабочий каталог на /opt/ejabberd-${VER}/bin
cd /opt/ejabberd-${VER}/bin
Добавьте учетную запись администратора
# . /ejabberdctl register myadmin localhost mystrongPassword User jmutai@localhost successfully registered
Возможно, вам придется заменить localhost вашим реальным именем хоста сервера.
Другие учетные записи пользователей должны быть добавлены аналогичным образом.
./ejabberdctl register testuser localhost testuserpassword
Отредактируйте файл конфигурации ejabberd, чтобы предоставить права администратора для созданной вами учетной записи XMPP /opt/ejabberd/conf/ejabberd.yml.
acl: local: user_regexp: "" loopback: ip: - "127.0.0.0/8" - "::1/128" - "::FFFF:127.0.0.1/128" admin: user: - "admin@localhost" - "myadmin@localhost"
Перезапустите сервис ejabberd.
sudo systemctl restart ejabberd
Шаг 4. Настройка брандмауэра и интерфейса доступа
Разрешите порт Ejabberd UI на брандмауэре.
sudo firewall-cmd --add-port=5280/tcp --permanent sudo firewall-cmd --reload
Веб-админка должна быть доступна по адресу http://ip-адрес:5280/admin/
Откройте URL, используя ваш любимый браузер.
Войдитк с полным именем пользователя с именем домена, например, myadmin@localhost.
Поделитесь статьей:
linux: ejabberd ( jabber server )
Ставьте ejabberd 2.1.3
Далее конфиг:
/etc/ejabberd/ejabberd.cfg:
override_global.
override_local.
override_acls.
{loglevel, 4}.
{hosts, ["jabber.example.ru","localhost"]}.
{listen,
[
{5222, ejabberd_c2s, [
{certfile, "/etc/ejabberd/ssl.pem"}, starttls,
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
{5223, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{certfile, "/etc/ejabberd/ssl.pem"}, tls,
{max_stanza_size, 65536}
]},
{5269, ejabberd_s2s_in, [
{max_stanza_size, 131072}
]},
{5280, ejabberd_http, [
http_bind,
http_poll,
web_admin,
{certfile, "/etc/ejabberd/ssl. pem"}, tls
]}
]}.
{s2s_use_starttls, true}.
{s2s_certfile, "/etc/ejabberd/ssl.pem"}.
{s2s_default_policy, allow}.
{outgoing_s2s_port, 5269}.
{auth_method, internal}.
{shaper, normal, {maxrate, 1000}}.
{shaper, fast, {maxrate, 50000}}.
{max_fsm_queue, 1000}.
{acl, admin, {user, "admin"}}.
{acl, blocked, {user, "root"}}.
{acl, blocked, {user, "r00t"}}.
{acl, blocked, {user, "administrator"}}.
{acl, blocked, {user, "kss"}}.
{acl, blocked, {user, "administrat0r"}}.
{acl, blocked, {user, "adm1n"}}.
{acl, blocked, {user, "r0ot"}}.
{acl, blocked, {user, "ro0t"}}.
{acl, blocked, {user, "adm1n1strat0r"}}.
{acl, blocked, {user, "administrator"}}.
{acl, blocked, {user, "adm1nistrat0r"}}.
{acl, blocked, {user, "adm1nistrator"}}.
{acl, blocked, {user, "admin1strat0r"}}.
{acl, blocked, {user, "admin1strator"}}.
{acl, blocked, {user, "alter"}}.
{acl, local, {user_regexp, ""}}.
%% Maximum number of simultaneous sessions allowed for a single user:
{access, max_user_sessions, [{10, all}]}.
%% Maximum number of offline messages that users can have:
{access, max_user_offline_messages, [{5000, admin}, {100, all}]}.
%% This rule allows access only for local users:
{access, local, [{allow, local}]}.
%% Only non-blocked users can use c2s connections:
{access, c2s, [{deny, blocked},
{allow, all}]}.
%% For C2S connections, all users except admins use the "normal" shaper
{access, c2s_shaper, [{none, admin},
{normal, all}]}.
%% All S2S connections use the "fast" shaper
{access, s2s_shaper, [{fast, all}]}.
%% Only admins can send announcement messages:
{access, announce, [{allow, admin}]}.
%% Only admins can use the configuration interface:
{access, configure, [{allow, admin}]}.
%% Admins of this server are also admins of the MUC service:
{access, muc_admin, [{allow, admin}]}.
%% Only accounts of the local ejabberd server can create rooms:
{access, muc_create, [{allow, local}]}.
%% All users are allowed to use the MUC service:
{access, muc, [{allow, all}]}.
%% Only accounts on the local ejabberd server can create Pubsub nodes:
{access, pubsub_createnode, [{allow, local}]}.
%% In-band registration allows registration of any possible username.
%% To disable in-band registration, replace 'allow' with 'deny'.
{access, register, [{allow, all}]}.
%% By default the frequency of account registrations from the same IP
%% is limited to 1 account every 10 minutes. To disable, specify: infinity
%%{registration_timeout, 600}.
{language, "ru"}.
{modules,
[
{mod_adhoc, []},
{mod_announce, [{access, announce}]}, % recommends mod_adhoc
{mod_caps, []},
{mod_configure,[]}, % requires mod_adhoc
{mod_disco, []},
%%{mod_echo, [{host, "echo. localhost"}]},
%%{mod_irc, []},
{mod_http_bind, []},
%%{mod_http_fileserver, [
%% {docroot, "/var/www"},
%% {accesslog, "/var/log/ejabberd/access.log"}
%% ]},
{mod_last, []},
{mod_muc, [
%%{host, "conference.@HOST@"},
{access, muc},
{access_create, muc_create},
{access_persistent, muc_create},
{access_admin, muc_admin}
]},
%%{mod_muc_log,[]},
{mod_offline, [{access_max_user_messages, max_user_offline_messages}]},
{mod_ping, []},
{mod_privacy, []},
{mod_private, []},
%%{mod_proxy65,[]},
{mod_pubsub, [
{access_createnode, pubsub_createnode},
{ignore_pep_from_offline, true}, % reduces resource comsumption, but XEP incompliant
%%{ignore_pep_from_offline, false}, % XEP compliant, but increases resource comsumption
{last_item_cache, false},
{plugins, ["flat", "hometree", "pep"]} % pep requires mod_caps
]},
{mod_register, [
%%
%% After successful registration, the user receives
%% a message with this subject and body.
%%
{welcome_message, {"Welcome!",
"Hi.\nWelcome to this XMPP server."}},
%%
%% When a user registers, send a notification to
%% these XMPP accounts.
%%
%%{registration_watchers, ["[email protected]"]},
{access, register}
]},
{mod_roster, []},
%%{mod_service_log,[]},
{mod_shared_roster,[]},
{mod_stats, []},
{mod_time, []},
{mod_vcard, []},
{mod_version, []},
{mod_statsdx, []}
]}.
%%%.
%%%'
%%% $Id$
%%% Local Variables:
%%% mode: erlang
%%% End:
%%% vim: set filetype=erlang tabstop=8 foldmarker=%%%',%%%. foldmethod=marker:
/etc/ejabberd/inetrc:
{file, hosts, "/etc/hosts"}.
{file, resolv, "/etc/resolv.conf"}.
{lookup,["file","dns"]}.
Как ясно из примера выше свой хост лучше добавить в /etc/hosts
DNS:
_xmpp-server._tcp.jabber.example.ru. 3600 IN SRV 20 0 5269 jabber.example.ru.
_xmpp-client._tcp.jabber.example.ru. 3600 IN SRV 20 0 5222 jabber.example.ru.
_jabber._tcp.jabber.example.ru. 3600 IN SRV 20 1 5222 jabber.example.ru.
Касаемо файла /etc/ejabberd/ssl.pem, заходите на startssl.com и создаете сертификат и ключ, затем cat private.key > ssl.pem && cat cert.crt >> ssl.pem
/sbin/ejabberctl:
ERL_INETRC=/etc/ejabberd/inetrc
export ERL_INETRC
iptables:
iptables -A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 5223 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 5269 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 5280 -j ACCEPT
PS: А вот тут имеется шикарная документация по ejabberd 2. 1.3
Понравилось это:
Нравится Загрузка…
Похожее
Установите и настройте ejabberd на сервере Ubuntu
Как: установить и настроить ejabberd на сервере Ubuntu
ejabberd — это серверное программное обеспечение XMPP, которое можно использовать для обмена мгновенными сообщениями на вашем собственном сервере. В этом руководстве вы сможете узнать, как правильно установить и настроить ejabberd на сервере Ubuntu.
Итак, приступим.
Шаг 1. Загрузите и установите
ejabberd доступен в репозиториях Ubuntu, поэтому его легко загрузить и установить.
Просто запустите:
sudo apt-get install ejabberd
Шаг 2. Настройка
Откройте файл конфигурации ejabberd, запустив:
Судо нано /etc/ejabberd/ejabberd.cfg
* Если вы предпочитаете редактор, отличный от nano, вы, очевидно, можете заменить его на указанный выше файл.
В файле конфигурации найдите следующее:
%% Имя хоста {хосты, ["localhost"]}.
Измените эту строку, чтобы она представляла правильное имя хоста.Пример:
%% Имя хоста {хосты, ["localhost", "example.net"]}.
Прямо над ним вы найдете:
XMPP: полное руководство: создание приложений реального времени с помощью Jabber Technologies
%% Пользователь с правами администратора {acl, admin, {user, «», «localhost»}}.
Между кавычками введите любое имя пользователя admin, а затем замените localhost на свое имя хоста.
Как только это будет сделано, сохраните файл и перезагрузите демон ejabberd:
sudo / etc / init.d / ejabberd перезапуск
Практическое руководство по командам, редакторам и оболочке Linux, A (2-е издание)
Затем создайте учетную запись администратора. Для этого запустите:
sudo ejabberdctl зарегистрировать пароль администратора localhost
Замена «admin» на имя пользователя, которое вы создали ранее, «localhost» на правильное имя хоста сервера и «пароль» на любой пароль, который вы хотите использовать.
Если все прошло хорошо, теперь вы можете получить доступ к веб-интерфейсу для ejabberd, перейдя по адресу http: // yourhostname: 5280 / admin.При появлении запроса введите свое имя пользователя и пароль. Вы должны увидеть следующее:
Шаг 3. Подключитесь к серверу ejabberd
Теперь должно быть возможно подключиться к вашему серверу ejabberd через IM-клиент, поддерживающий XMPP. Мы попробуем подключиться с помощью Empathy, текущего клиента обмена сообщениями по умолчанию в настольной версии Ubuntu.
Выберите Jabber в качестве типа учетной записи, а затем введите имя пользователя, которое вы создали ранее, вместе с именем хоста (пример: имя пользователя @ имя хоста ).Наконец, введите пароль для учетной записи.
Дополнительные учетные записи Возможно, вы захотите создать на сервере еще несколько учетных записей для своих друзей или других компьютеров в вашей сети. Лучший способ сделать это — запустить ejabberdctl для каждой отдельной учетной записи, которую вы хотите создать.
sudo ejabberdctl регистрация нового пользователя пароль localhost
Также возможно добавить дополнительных пользователей через веб-интерфейс. Дополнительные учетные записи администратора Чтобы создать дополнительную учетную запись администратора, откройте файл ejabberd.cfg и найдите:
%% Пользователь с правами администратора {acl, admin, {user, «», «localhost»}}.
Создайте новую строку под этим и добавьте:
{acl, admin, {user, «», «localhost»}}
Добавьте новое имя пользователя в кавычки и укажите имя хоста, заменив «localhost». Наконец, запустите ejabberdctl, как показано на шаге 2, для создания учетной записи администратора.
Этот учебник последний раз обновлялся 31 июля 2013 г.
Создание эджабберда 14. 12 работа с Microsoft Windows Active Directory LDAP
Почему эджабберд?
Мой офис использует Google Talk для обмена мгновенными сообщениями внутри сотрудников. В этот понедельник все пользователи получили широковещательное сообщение от Google, в котором говорилось, что настольный клиент Google Talk перестанет работать 15 февраля (хотя это может быть старое автоматическое уведомление, когда Google угрожал EOL Talk в феврале прошлого года).
Обновление (2015-03-09) : Наконец, 23 февраля 2015 года они убили Talk для Windows.
Конечно, мы не можем рискнуть, что Google фактически отключит наши мгновенные сообщения, , и мне лично не нравится новое приложение Hangouts для Chrome.
Более того, мы хотим, чтобы сотрудники могли только отправлять сообщения другим людям в нашей организации. Мы также не обязательно хотим, чтобы Google участвовал во всех наших коммуникациях. Это означает запуск собственного IM-сервера.
ejabberd — известная рабочая лошадка для IM. Да, я много слышал об Openfire и других, но, тем не менее, решил пойти на эджабберд.
Окружающая среда и цели
В нашей организации используется очень простая инфраструктура Windows 2008 AD: один лес, один домен, одно подразделение. (Всего около 15 сотрудников.)
У меня было три цели для нашего IM-решения, помимо очевидной возможности общаться в чате:
- Аутентификация в соответствии с AD
- Обмен данными о сотрудниках (настоящее имя, адрес электронной почты и т. Д.) Между IM-сервером и AD
- Контакты чата, определенные в AD
Причина всех трех из них в том, что поддерживать отдельную систему сложно и приходится создавать все учетные записи пользователей дважды (что я делал с Google).Из коробки ejabberd подходит ко всем трем со следующими характеристиками:
- Аутентификация LDAP
- mod_vcard_ldap
- mod_shared_roster_ldap
Мы в основном занимаемся производством рабочих станций Windows / серверов Linux, поэтому мы используем Active Directory, а я запускаю ejabberd в Linux.
На бумаге это звучало идеально, но на самом деле было настоящим делом — получить 95% функциональный .
Вызовы
Проблемы с установкой
По умолчанию двоичный файл установки помещает ejabberd по пути / opt / ejabberd-14.12
. В и т.д.
нет внешних зависимостей и файлов конфигурации. Все находится в этом каталоге.
Я использую CentOS, поэтому я подписал эти комментарии:
Файл инициализации не поддерживает chkconfig, поскольку в нем отсутствует обязательный заголовок:
Достаточно просто добавить следующее в начало ejabberd.init:
#! / Bin / sh # # ejabberd Сценарий запуска для XMPP-сервера ejabberd # # chkconfig: - 99 10 # описание: сервер ejabberd XMPP # Библиотека исходных функций.. /etc/init.d/functions set -o errexit
Цифры после chkconfig — это приоритеты загрузки и завершения работы, они могут нуждаться в настройке, но кажутся безопасными. Я не думаю, что chkconfig зависит от дистрибутива, я попрошу разработчиков ejabberd добавить его в дистрибутив.
Итак, после добавления этого в ejabberd.init все, что осталось сделать, это:
cp ejabberd.init /etc/init.d/ejabberd chmod + x /etc/init.d/ejabberd / usr / sbin / groupadd -r ejabberd / usr / sbin / useradd -g ejabberd -p ejabberd -r ejabberd / sbin / chkconfig - добавить ejabberd / sbin / chkconfig ejabberd на
Другая проблема, с которой я столкнулся, заключалась в том, что я установил ejabberd как root
, но я пытался запустить его как пользователь ejabberd
и поэтому получил ошибку:
sed: не удается прочитать / opt / ejabberd-14.12 / conf / ejabberd.yml: в доступе отказано
sed: не удается прочитать /opt/ejabberd-14.12/conf/ejabberd.yml: в доступе отказано
sed: не удается прочитать /opt/ejabberd-14.12/conf/ejabberd.yml: в доступе отказано
sed: невозможно прочитать /opt/ejabberd-14. 12/conf/ejabberd.yml: в доступе отказано
mkdir: невозможно создать каталог `/opt/ejabberd-14.12/database ': в доступе отказано
./ejabberdctl: строка 125: cd: /opt/ejabberd-14.12/database/ejabberd@localhost: В доступе отказано
sh: /opt/ejabberd-14.12/bin/erl: В доступе отказано
Решение здесь довольно простое: chown -R ejabberd: ejabberd / opt / ejabberd-14.12
Если сервер ejabberd не запускается или происходит сбой , процессы ejabberd все еще могут выполняться в фоновом режиме. Это может помешать его повторному запуску.
# ps -ef | grep ejabberd
эджабберд 1429 1 0 17:04? 00:00:00 /opt/ejabberd-14.12/bin/epmd -daemon
эджабберд 1431 1 3 17:04? 00:00:04 /opt/ejabberd-14.12/bin/beam.smp -K true -P 250000 - -root /opt/ejabberd-14.12 -progname /opt/ejabberd-14.12/bin/erl - -home / opt / ejabberd-14.12 - -sname ejabberd @ localhost -noshell -noinput -noshell -noinput -pa /opt/ejabberd-14.12/lib/ejabberd-14.12/ebin -mnesia dir "/opt/ejabberd-14. 12/database/ejabberd@localhost" - ejabberd log_rate_limit 100 log_rotate_size 10485760 log_rotate_count 1 log_rotate_date "" -s ejabberd -sasl sasl_error_logger {file, "/ opt / ejabberd-14.12 / logs / erlang.log"} -smp автозапуск
# kill 1429
# kill 1431
Наконец, у меня возникла еще одна проблема, когда остановил службу:
остановка обслуживания ejabberd
Остановка эджабберда...
/opt/ejabberd-14.12/bin/ejabberdctl: строка 364: epmd: команда не найдена
Еще один простой, потому что сообщение об ошибке довольно четкое. В файле /opt/ejabberd-14.12/bin/ejabberdctl
есть несколько строк, которые предполагают, что epmd
находится в том же каталоге… что это такое! Тем не менее, ejabberdctl
вызывается сценарием инициализации без изменения каталога на этот путь.
С этим можно справиться тремя способами:
- Измените ejabberdctl, чтобы он содержал полный путь к epmd
- Измените сценарий инициализации на
cd
на/ opt / ejabberd-14. 12 / бин
- Добавьте
/opt/ejabberd-14.12/bin
к пути
SSL-сертификат по умолчанию
Первое, что я сделал, — это запустил простую конфигурацию ejabberd и попытался подключиться к ней. Я тестировал его как с Pidgin , так и с Spark (от Ignite Realtime).
Я не помню, какой это был из двух клиентов, но один из них отказался подключиться к серверу из-за ошибки SSL. Сообщение об ошибке не было явным, но из того, что я читал в Интернете, казалось, что сертификат с истекшим сроком действия заблокирует работу клиента.Поэтому кажется, что файл PEM по умолчанию, включенный в двоичные файлы ejabberd, недействителен.
Самоподписанный сертификат — не проблема, поэтому я создал его с помощью OpenSSL и дал срок его действия через 10 лет. Это не настоящая проблема, но вы должны сделать это сразу же.
Аутентификация LDAP
Получить работающую аутентификацию LDAP не составило большого труда. Документация — это почти все, что вам нужно.
Вот очищенный фрагмент моей конфигурации LDAP.Обратите внимание, что я создал пользователя с общим именем Ejabberd LDAP
в качестве читателя LDAP.
auth_method: ldap
ldap_servers:
- "dcserver01.mydomain.com"
- "dcserver02.mydomain.com"
ldap_encrypt: нет
ldap_port: 389
ldap_rootdn: "CN = Ejabberd LDAP, CN = Users, dc = mydomain, dc = com"
ldap_password: "SomePassword0239"
ldap_base: "cn = Users, dc = mydomain, dc = com"
ldap_uids:
- «sAMAccountName»
ldap_filter: ""
Этого достаточно, чтобы аутентификация LDAP работала.
Кстати, если вы хотите получить ldap_rootdn
(отличительное имя пользователя Active Directory ), запустите Пользователи и компьютеры Active Directory . Откройте свойства пользователя, щелкните вкладку Attribute Editor и прокрутите вниз до тех пор, пока не найдете visibleName в списке.
mod_vcard_ldap
Этот должен был быть простым , но это было далеко не так.
Во-первых, в какой-то момент разработчики ejabberd перешли на файл конфигурации в формате YAML, поэтому большинство примеров, которые вы найдете в Интернете, находятся в формате JSON.Как только вы освоите YAML, не составит труда визуально переключаться между ними, но я не привык к YAML, поэтому пришлось немного учиться. (Кстати, «каждый файл JSON также является допустимым файлом YAML».)
Обновление (2016-03-25)
Ниже указываю, что опечатка в документации причинила мне некоторое горе . Я оставляю это в этой публикации для потомков (или в случае, если вы ссылаетесь на старую или заархивированную версию документов), однако Микаэль Ремон из ProcessOne любезно прокомментировал, что с тех пор документ был исправлен.
Спасибо, Микаэль, очень признателен!
Настоящая проблема заключалась в том, что я скопировал фрагмент конфигурации mod_vcard_ldap
прямо из документации по интеграции LDAP Active Directory. Вот что там написано:
mod_vcard_ldap:
ldap_vcard_map:
"NICKNAME": {"% u", []}
"GIVEN": {"% s", ["givenName"]}
"MIDDLE": {"% s", ["инициалы"]}
"СЕМЬЯ": {"% s", ["sn"]}
"FN": {"% s", ["displayName"]}
"EMAIL": {"% s", ["mail"]}
"ORGNAME": {"% s", ["company"]}
"ОРГУНИТ": {"% s", ["отдел"]}
"CTRY": {"% s", ["c"]}
"МЕСТО": {"% s", ["l"]}
"STREET": {"% s", ["streetAddress"]}
"РЕГИОН": {"% s", ["st"]}
"PCODE": {"% s", ["postalCode"]}
"TITLE": {"% s", ["title"]}
"URL": {"% s", ["wWWHomePage"]}
"DESC": {"% s", ["описание"]}
"TEL": {"% s", ["phoneNumber"]}]}
Вы видите проблему? Я точно не знал, и ejabberd выплюнул следующую ошибку в файле журнала:
03.02.2015 17:17:08.699 [ошибка] ОТЧЕТ ОБ АВАРИИ Процесс с 0 соседями завершился по причине: {undefined_macro, ''} в application_master: init / 4 строка 133
Вот проблема: В примере из документации используются запятые, когда следует использовать двоеточия. Вот и все. Конечно, я не замечал / не знал этого в течение нескольких часов, поэтому я пробовал каждую мелочь возможной чепухи, чтобы переформатировать этот раздел в действительный YAML.
Это правильный, рабочий раздел mod_vcard_ldap
моей конфигурации.Обратите внимание, что я немного сократил его, потому что я все равно не заполняю все поля VCard в Active Directory:
mod_vcard_ldap:
ldap_uids: {"sAMAccountName": "% u"}
ldap_filter: ""
совпадения: бесконечность
ldap_vcard_map:
"NICKNAME": {"% s": ["displayName"]}
"FN": {"% s": ["displayName"]}
"EMAIL": {"% s": ["mail"]}
"GIVEN": {"% s": ["givenName"]}
"MIDDLE": {"% s": ["инициалы"]}
"СЕМЬЯ": {"% s": ["sn"]}
"ORGNAME": {"% s": ["company"]}
"ОРГУНИТ": {"% s": ["отдел"]}
"TITLE": {"% s": ["title"]}
"TEL": {"% s": ["phoneNumber"]}
ldap_search_fields:
«Пользователь»: «% u»
«Полное имя»: «displayName»
«Электронная почта»: «почта»
ldap_search_reported:
«ФИО»: «FN»
«Псевдоним»: «НИКНЕЙМ»
«Электронная почта»: «EMAIL»
Строго говоря, нет необходимости определять ldap_uids
в этом разделе, потому что ejabberd будет использовать ранее определенные вами настройки LDAP. Однако вы должны отметить, что как документация, так и множество, подразумеваемое именем поля, являются неточными. В основной конфигурации LDAP ldap_uids
может быть списком (массивом, что угодно):
# Исправить в основном разделе LDAP
ldap_uids:
- «sAMAccountName»
В разделе mod_vcard_ldap
это объект / отображение / что угодно . Если вы укажете более одного поля uid, выдается ошибка. Также требуется второй параметр (% u
).
# Исправить в разделе mod_vcard_ldap
ldap_uids: {"sAMAccountName": "% u"}
Надеюсь, мои примеры конфигурации избавят вас от той же головной боли, с которой я столкнулся.
Ой, это когда-нибудь было болью. Есть много противоречивых примеров, много недоработанных обходных путей и много компромиссов, требующих решения.
Мне неясно, верно ли это в текущем выпуске, но очевидно, что пробелы в CN пользователя приводят к тому, что mod_shared_roster
завершает работу без уведомления .
mikekaganski писал:
Это самая большая проблема, потому что «член» хранит своих членов как DN, таким образом, если у вас есть такие пользователи, как «CN = John Doe, OU = blah, OU = blah, DC = example, DC = com », , то мы застряли . В лучшем случае, когда у вас есть CN ваших пользователей без пробелов, вы можете использовать ldap_memberattr_format_re = «CN = (\\ w *), (OU =. *,) * DC = example, DC = com» (это из руководства, я не тестировал это регулярное выражение). Источник: https://www.ejabberd.im/node/4826
Мне потребовалось время, чтобы это найти.Что это значит? Чрезмерно упрощенная версия алогритма модуля LDAP с общим списком выглядит следующим образом:
- Запустите запрос
ldap_rfilter
, чтобы получить список групп, содержащих контакты с поддержкой Jabber - Для каждой из этих групп выполните запрос
ldap_gfilter
, чтобы получить отображаемое имя группы и список участников. - Для каждого отдельного члена группы, полученного на шаге 2, получите отображаемое имя пользователя.
На шаге 2 у меня все пошло не так.Все мои пользователи имеют свое полное имя в качестве общего имени, как вы можете видеть ниже:
# ldapsearch -LLL -H ldap: //dcserver01.mydomain.com -x -D 'mydomain \ ejabberd.ldap' -w 'SomePassword2098' -E pr = 1000 / noprompt -b 'dc = mydomain, dc = com '' (& (objectCategory = group) (cn = Все сотрудники)) 'displayName member
dn: CN = Все сотрудники, CN = Пользователи, DC = mydomain, DC = com
участник: CN = Jennifer Doe, CN = Users, DC = mydomain, DC = com
участник: CN = Фамилия Эрика Фон, CN = Пользователи, DC = mydomain, DC = com
участник: CN = Киран Вандербра, CN = Пользователи, DC = mydomain, DC = com
displayName: Все сотрудники
Обратите внимание, что я усек и обработал вывод выше.
Как видите, во всех общих именах есть пробелы, и поэтому (я считаю) это невозможно разобрать. Я пробовал варианты свойств ldap_memberattr_format
и ldap_memberattr_format_re
, но безуспешно.
После много выдергивания волос , это моя рабочая конфигурация:
mod_shared_roster_ldap:
ldap_groupattr: "sAMAccountName"
ldap_groupdesc: ""
ldap_memberattr: "sAMAccountName"
ldap_memberattr_format: "% u"
ldap_useruid: "sAMAccountName"
ldap_userdesc: "displayName"
ldap_rfilter: "(& (objectCategory = группа) (cn = Все сотрудники))"
ldap_gfilter: "(& (objectCategory = user) (memberOf = CN = All Employees, CN = Users, DC = mydomain, DC = com))"
ldap_ufilter: "(& (objectClass = пользователь) (sAMAccountName =% u))"
ldap_filter: ""
ldap_group_cache_validity: 60
ldap_user_cache_validity: 60
ldap_auth_check: выкл.
Помните, что я говорил о компромиссах? Ну, мой запрос ldap_gfilter
на самом деле не дает модулю того, что ему нужно: список членов группы и отображаемое имя группы . Вот почему я оставил поле ldap_groupdesc
пустым; Мой запрос не возвращает название группы. Это означает, что имя моей группы не распространяется среди клиентов чата. Клиенты просто отображают список контактов вне какой-либо конкретной группы. У меня нет проблем с этим, потому что у меня есть только одна группа, содержащая всех сотрудников.
Вот результат моего ldap_gfilter с
по , контрастирующий с предыдущим примером , который извлекал членов группы с только их отличительных имен:
# ldapsearch -LLL -H ldap: // dcserver01.mydomain.com -x -D 'mydomain \ ejabberd.ldap' -w 'SomePassword2098' -E pr = 1000 / noprompt -b 'dc = mydomain, dc = com'
\ '(& (objectCategory = пользователь) (memberOf = CN = Все сотрудники, CN = Пользователи, DC = mydomain, DC = com))' sAMAccountName
dn: CN = Киран Вандербра, CN = Пользователи, DC = mydomain, DC = com
sAMAccountName: kwonderbra
dn: CN = Фамилия Эрика Фон, CN = Пользователи, DC = mydomain, DC = com
sAMAccountName: elastname
dn: CN = Дженнифер Доу, CN = Пользователи, DC = mydomain, DC = com
sAMAccountName: jdoe
Опять же, вышеприведенный вывод был очищен и усечен для краткости.
Теперь я получаю sAMAccountName
, на которое я ссылался в ldap_useruid
. Затем содержимое sAMAccountName
(например, jdoe ) используется в ldap_ufilter
вместо % u
.
Также обратите внимание, что я оставил общее имя моей группы (CN) «Все сотрудники» жестко запрограммированным во всех трех фильтрах. В полях ldap_gfilter
и ldap_ufilter
вы можете использовать % g
, которое будет заменено содержимым поля, определенного в ldap_groupattr
(в моем примере это sAMAccountName).Я хочу иметь только одну группу, которая представляет всех пользователей ejabberd, поэтому у меня это работает.
Инструменты отладки
ldapsearch
Установите и запустите это на своем сервере ejabberd. Во-первых, вы гарантируете, что у вас есть соединение между этим сервером и вашим сервером LDAP (например, контроллером домена).
Это также позволит вам независимо протестировать все фильтры LDAP в вашей конфигурации.
ldapsearch хорошо документирован, но вот пример его использования в моей среде:
ldapsearch -LLL -H ldap: // dcserver01.mydomain.com -x -D 'mydomain \ ejabberd.ldap' -w 'SomePassword2098' -E pr = 1000 / noprompt -b 'dc = mydomain, dc = com' '(& (objectClass = user) (sAMAccountName = scott) ) '
Этот оператор получит все атрибуты LDAP для учетной записи пользователя scott
.
tcpdump и Wireshark
Хорошо, это ни в коем случае не , а подходящие инструменты , но это то, что я использовал.
В моей среде трафик между сервером ejabberd (в сети «DMZ» общедоступного сервера) и моим контроллером домена (в сети частного офиса) проходит через маршрутизатор на базе Linux (т.е.е. настольный ПК с большим количеством сетевых карт). Я использовал tcpdump
на маршрутизаторе для захвата всех пакетов между двумя машинами на порту 389 (LDAP) в файл, а затем использовал scp
для передачи дампа пакета на мою рабочую станцию Windows для анализа с помощью Wireshark.
Между прочим, причина, по которой я захватил пакеты на маршрутизаторе, а не на сервере ejabberd, заключалась в том, чтобы я мог исключить проблемы с подключением / брандмауэром. Причина, по которой я не запустил Wireshark на своем контроллере домена, заключается в том, что я считаю плохой практикой устанавливать что-либо ненужное на моем контроллере домена.
Вот команда tcpdump
для получения файла, который Wireshark проанализирует (очевидно, замените IP-адрес на адрес вашего собственного сервера ejabberd):
tcpdump -s 0 -w ~ / tcpdump.ldap.20150205-1202.pcap -nnXSvi eth5 "порт 389 и хост 10.101.1.57"
Кроме того, я решил использовать Wireshark, а не читать необработанный вывод tcpdump
, потому что он форматирует все довольно хорошо:
Заключение
ejabberd действительно немного страдает из-за того, что на примерах много, но не хватает последовательности из-за своей старости.Он также разработан (по логике) людьми из Linux / erlang, поэтому они не так дружелюбны к Active Directory LDAP, как я надеялся. (Я, конечно, не виню их за это. Я не зря выбрал сервер ejabberd на базе Linux.)
С другой стороны, ejabberd довольно зрелый и чрезвычайно стабильный. Это была отличная замена проприетарному и не интегрированному в AD Google Talk.
Я знаю, что не дал здесь исчерпывающего руководства, но надеюсь, что хотя бы мои примеры фрагментов конфигурации укажут вам правильное направление.
Как указано в заголовке, я использую ejabberd 14.12. Я установил с помощью двоичного установщика с сайта процесса .
Установка
и установка XMPP-серверов ⋆ Kuketz IT-Security Blog
1. XMPP
Gemessen an der rasanten technischen Entwicklung ist das Extensible Messaging and Presence Protocol (XMPP) ein Urgestein, dessen Anfänge zum Jahrichen 1998. XMPP является разработчиком стандартных протоколов (Kommunikations-), основанных на XML-стандарте, базирующемся унд ден Austausch von Informationen bzw.Daten ermöglicht.
Im vorliegenden Beitrag beschreibe ich die Installation und Inbetriebnahme eines ejabberd-XMPP-Servers, der folgende Optionen unterstützt:
- Обмен сообщениями : Ubermittlung von Nachrichten zu bz einem. Kontakt, wie wir es bspw. von WhatsApp kennen
- Multi-User-Chat (MUC) : Eine Art Konferenzraum, dem mehrere Benutzer beitreten können, um untereinander Nachrichten auszutauschen
- Dateitransferien auszutauschen
- Dateitransferiens : Austausch. wir aus der Messenger-Welt kennen: Wir können mit (mehreren) Kontakten chatten und ebenfalls Dateien austauschen.Das XMPP-Protokoll ist allerdings so vielseitig, dass wir noch weitere Funktionen darüber abbilden könnten — Diese Stehen Allerdings nicht im Fokus des vorliegenden Beitrages.
2. ejabberd
Ejabberd zählt zu den weitverbreitesten XMPP-Servern. Die Software steht unter der GPL, eine Lizenz für freie Software und baut auf der Programmiersprache Erlang auf. Unter anderem ist ejabberd for Windows, macOS, BSD-Derivate and GNU / Linux verfügbar.
Aufgrund seiner Zuverlässigkeit, Skalierbarkeit und Stabilität eignet sich ejabberd sowohl für den privaten Bereich als auch für das Professionalelle Umfeld. Unter anderem setzen mailbox.org или die Piratenpartei auf ejabberd.
2.1 Документация
Для установки и установки серверного программного обеспечения Betrieb einer является расширенной и свободной документацией. Die Dokumentation von ejabberd ist in Ordnung, Allerdings könnte insbesondere die Beschreibung der Modul-Konfiguration etwas ausführlicher ausfallen. Insgesamt vermisse ich eine Art »Лучшая практика« или Beispielkonfiguration, die einen sicheren und datenschutzfreundlichen Betrieb ermöglicht.Der vorliegende Beitrag versucht diese Lücke zu schließen.
2.2 Оборудование и система
Die Hardwareanforderungen sind abhängig von unterschiedlichen Faktoren, wie die Anzahl der anvisierten Nutzer und gleichzeitigen Verbindungen, die der Server (-verbund) verarbeiten soll. Generell benötigt ejabberd eher wenig CPU-Leistung. Der Hauptspeicher (RAM) sollte je nach Einsatzzweck dafür etwas großzügiger ausgelegt sein. Für den Betrieb einer ejabberd-Instanz mit 10. 000 Nutzern gelten grob folgende Anforderungen:
- 2 dedizierte Kerne
- ab 4 GB RAM
- Festplattenkapazität ab 40 GB (mit Option auf Erwe 901iternges 9013 IP 9013 IP 9013 -Adresse
Einen solchen Root-Server könnt ihr bereits ab 6-7 € pro Monat bei einem Hosting-Anbieter bekommen.
2.3 Пример конфигурации
Der dauerhafte Betrieb eines XMPP-Servers auf Basis von ejabberd erfordert ein hohes Maß an Verantwortung vom Betreiber. Grundlegende Kenntnisse in der Härtung eines Server-Systems sowie Notfall- bzw. Backupstrategien sollten zu eurem Repertoire gehören, bevor ihr es in Erwägung zieht, einen ejabberd-Server in den Föderationsverbund zu integrieren.
Die vorliegende Konfiguration dient als Beispiel, der euch den Einstieg in den sicheren und datenschutzfreundlichen Betrieb eines ejabberd-Servers erleichtern soll.Folgende Besonderheiten gelten für diese Konfiguration:
- Es werden ausschließlich XMPP-Clients wie Conversations oder Gajim unterstützt. Веб-клиенты (на основе JavaScript) bzw. XMPP-over-HTTP werden nicht unterstützt.
- Eine Registrierung von einem neuen Konto per Weboberfläche ist nicht vorgesehen. Neue Accounts können einfach per In-Band-Registration (также direkt über den XMPP-Client) eröffnet werden.
- Grundsätzlich is jedem gestattet ein XMPP-Konto auf dem Server anzulegen.
- Aus- und eingehende Verbindungen zu bzw. von anderen XMPP-Servern sind ausschließlich über einen TLS-verschlüsselten Kanal vorgesehen. Kann dieser aus irgendwelchen Gründen (kein gültiges Zertifikat, keine unterstützten Cipher-Suiten) nicht aufgebaut werden, wird die Verbindung abgebrochen.
- Die Auswahl der TLS-Cipher-Suiten ist sehr strikt. Unter Umständen kann dies zu Problemen bei der Föderation mit anderen Servern führen, die bspw. (noch) keine aktuellen OpenSSL-Bibliotheken verwenden.
Bei Bedarf könnt ihr die genannten Punkte natürlich jederzeit an eure Bedürfnisse anpassen. Mein Fokus lag eher auf einer sicheren und datenschutzfreundlichen Konfiguration, лучше проверять тест на соответствие XMPP.
Hinweis
An dieser Stelle möchte ich mich bei Holger Weiß bedanken, der mir mit Rat und Tat bei der Inbetriebnahme eines ejabberd-Testservers zur Seite stand. Holger ist unter anderem als freier Entwickler bei ejabberd tätig.
2.4 Установка: Debian GNU / Linux
Также Systemgrundlage für ejabberd nutze ich für die vorliegende Anleitung ein Debian GNU / Linux (Stretch) в минимальной установке.
Текущая стабильная версия Debian basiert ejabberd auf der Version 16.09-4. В Debian gilt: Die in der jeweils stabilen Version Enthaltene Software wird grundsätzlich nicht auf neuere Versionen aktualisiert — Nur Sicherheitsaktualisierungen aus neueren Versionen vom Debian-Security-Team in den Stable-Zweig portiert.Daher greifen wir auf die Debian-Backports zurück, um eine aktuelle Version von ejabberd zu bekommen. Es handelt sich bei den Backports um Rückportierungen von Paketen aus (hauptsächlich) Testing, die gegen die Stable Bibliotheken gebaut sind.
Zunächst fügen wir der sources. list die Backports für Debian (Stretch) hinzu:
nano /etc/apt/sources.list
# Stretch Backports deb http://ftp.debian.org/debian stretch-backports main
Anschließend aktualisieren wir die Paketquellen und installieren das ejabberd-Backport-Paket mit der Version 18.06:
apt-get update apt-get install -t stretch-backports ejabberd
Zur Darstellung der Captcha-Grafiken (später dazu mehr) benötigen wir noch Imagemagick:
apt-get install imagemagick gsfonts --no-install-рекомендует
3. Let’s Encrypt
3. Let’s Encrypt
Let’s Encrypt ist ein Vorzeigeprojekt, dem es gelungen ist, den komplexen Vorgang der Erstellung, Validierung, Signierung und Erneuerung von X.509-Zertifikaten zu automatisieren und diese Dienstleistung kostenlos anzubieten.Hunderttausende von kommerziellen und nichtkommerziellen Webseiten, Projekten etc. setzen auf Let’s-Encrypt-Zertifikate, die den Datenverkehr via TLS vor dem Abhören und der Manipulation schützen.
Für die Beantragung der benötigten Let’s-Encrypt-Zertifikate nutzen wir den acme.sh-Client — ein Shell-Skript für Unix- / Linux-Systeme. Es unterstützt ebenfalls den ACME v2 Standard. Альтернативное решение для совместимости с клиентом ACME v2.
3.1 Пакет установки для установки
Auf dem ejabberd-Server kommt kein Webserver (nginx, Apache и т. Д.) zum Einsatz, über den wir den Let’s-Encrypt-Prozess abbilden können. Daher nutzen wir den Standalone-Modus, der einen Webserver bereitstellt, um die Domainvalidierung durchzuführen — dafür sind die Program bzw. Pakete socat und curl erforderlich:
apt-get install socat curl
3.2 Загрузка и установка acme.sh
Die Installation от acme.sh ist mit einem Befehl erledigt:
wget -O - https: // get. acme.sh | sh
Bei Bedarf lässt sich die Установка einfach aktualisieren:
bash / root /.acme.sh/acme.sh --upgrade
3.3 Сертификация beantragen
Anschließend müssen wir für die folgenden Домены bzw. Поддомены Let’s-Encrypt-Zertifikate beantragen. Insgesamt sind es fünf Stück:
- kuketz-lab.de : Ein Zertifikat für unsere Hauptdomain
- conference.kuketz-lab.de : Das Modul mod_muc nutzt standard3 upload.kuketz-lab.de : Das Modul mod_http_upload nutzt standardmäßig die virtuelle Загрузка субдомена.@ HOST @
- pubsub.kuketz-lab.de : Das Modul mod_pubsub nutzt standardmäßig die virtuelle Subdomain pubsub. @ HOST @
- proxy.kuketz-lab.de : Das Modul mod_proxyä65. @ HOST @
Hinweis
Selbstverständlich solltet ihr den Domainnamen »kuketz-lab.de« mit eurem ersetzen.
Für den Praxisbetrieb nutzen wir RSA-basierte Zertifikate. Aktuell unterstützt ejabberd den Parallelbetrieb von RSA- und ECDSA-Zertifikaten leider noch nicht.Список всех доменов bzw. Поддомены в einem Rutsch:
bash /root/.acme.sh/acme.sh --issue -d kuketz-lab.de -d conference. kuketz-lab.de -d upload.kuketz-lab.de -d pubsub .kuketz-lab.de -d proxy.kuketz-lab.de --keylength 4096 --standalone
Falls jemand ECDSA-Zertifikate bevorzugt, kann er sich diese ebenfalls ausstellen lassen. Allerdings unterstützen einige ältere OpenSSL-Bibliotheken ECDSA-Zertifikate noch nicht, weshalb diese für den Föderationsbetrieb aktuell noch nicht empfehlenswert sind:
bash / root /.acme.sh/acme.sh --issue -d kuketz-lab.de -d conference.kuketz-lab.de -d upload.kuketz-lab.de -d pubsub.kuketz-lab.de -d proxy.kuketz- lab.de --keylength ec-384 --standalone
3.4 ejabberd: Zertifikate ausrollen
Die Let’s-Encrypt-Zertifikate sind nun beglaubigt und können in ejabberd eingebunden werden. Dazu erstellen wir zunächst einen Unterordner, in dem wir die Zertifikatsdateienablegenablegen:
mkdir / etc / ejabberd / certs cp /root/.acme.sh/kuketz-lab.de/fullchain.cer /etc/ejabberd/certs/kuketz-lab.pem cp /root/.acme.sh/kuketz-lab.de/kuketz-lab. de.key /etc/ejabberd/certs/kuketz-lab.key
Anschließend schränken wir noch die Berechtigungen auf den Ordner und die darin befindlichen Zertifikatsdateien ein:
chown ejabberd: ejabberd / etc / ejabberd / certs / chown ejabberd: ejabberd / etc / ejabberd / certs / * chmod 600 / etc / ejabberd / certs / *
3.5 Параметр Диффи-Хеллмана (необязательный)
Параметр Диффи-Хеллмана (необязательный).Dies wird benötigt, падает на TLS-Cipher-Suiten verwenden wollt, die auf dem DH-Schlüsselaustausch basieren:
openssl dhparam -out /etc/ejabberd/dh5096.pem 4096
4. DNS-Konfiguration Service
(SRV) обеспечивает подключение к системе доменных имен (DNS), а также к заданному порту, чтобы получить доступ к клиенту и серверу с ошибкой. Im XMPP-Wiki werden einige Beispiele aufgezeigt. Für den Praxisbetrieb sind folgende SRVs sinnvoll:
- Порт 5222 : Для клиентов, die sich mit unserem Server verbinden wollen
- Хост: _xmpp-client. _tcp.kuketz-lab.de.
- Тип: SRV
- Назначение: 5 0 5222 kuketz-lab.de.
- Порт 443 : Für Clients, die sich direct via TLS mit unserem Server verbinden wollen
- Host : _xmpps-client._tcp.kuketz-lab.de.
- Тип: SRV
- Место назначения: 4 0 443 kuketz-lab.de.
- Порт 5269 : Für XMPP-Server, die sich mit unserem Server verbinden wollen
- Хост: _xmpp-server._tcp.kuketz-lab.de.
- Тип: SRV
- Место назначения: 5 0 5269 kuketz-lab.de.
- Порт 5270 : Für XMPP-Server, он должен быть направлен через TLS mit unserem Server verbinden wollen
- Хост: _xmpps-server._tcp.kuketz-lab.de.
- Тип: SRV
- Назначение: 4 0 5270 kuketz-lab.de.
Konferenzräume bzw. MUC sind meist unter der Subdomain »конференция.DOMAIN« erreichbar. Über einen entsprechenden DNS-Eintrag (CNAME) machen wir diese Информационный адрес:
- Хост: конференция
- Тип: CNAME
- Место назначения: kuketz-lab. de
Auf einem Root-Server beim Hosting-Anbieter netcup würde die DNS-Konfiguration dann folgendermaßen aussehen:
5. ejabberd-Konfiguration
Die nachfolgendenfinediscungendiscungen фон Эджабберд (18.09-1 ~ bpo9 + 1) mitgeliefert wird. Alle Anpassungen sind kurz erklärt. Полная конфигурация (ohne Kommentare) stelle ich unter der Ziffer 5.10 zur Verfügung. Bei der Anpassung lag mein Fokus auf einer sicheren und datenschutzfreundlichen Konfiguration — bei Bedarf solltet ihr die Vorschläge prüfen und in euer Setup überführen.
5.1 Регистрация
Das Log-Level legt die Ausführlichkeit fest, mit dem ejabberd Protokolldateien erzeugt. Wird der Parameter
loglevel
auf einen Wert von 3 eingestellt, werden nur Fehler und Warnungen in die Log-Datei geschrieben. Anmeldevorgänge von Clients oder das Versenden von Nachrichten werden nicht erfasst.Wenn wir den Parameter
hide_sensitive_log_data
zusätzlich ergänzen, werden keine IP-Adressen или sonstige sensitive Daten in den Log-Dateien aufgezeichnet.## loglevel: Детальность файлов журналов, созданных ejabberd. ## 0: Нет журнала ejabberd вообще (не рекомендуется) ## 1: Критический ## 2: Ошибка ## 3: Предупреждение ## 4: Информация ## 5: Отладка ## loglevel: 3 hide_sensitive_log_data: true
5.2 Имя хоста [обслуживаемые имена хостов]
Angabe des Host- bzw. Domainnamens, über den unsere ejabberd-Instanz erreichbar ist. Ein ejabberd-Server kann übrigens mehrere Домены bedienen.
## hosts: Домены, обслуживаемые ejabberd. ## хосты: - " kuketz-lab.de "
5.3 Сертификат [Сертификаты]
Die beantragten Let’s-Encrypt-Zertifikate haben wir bereits im Unterordner
/ etc / ejabberd / certs /
abgelegt. Diese müssen wir nun ejabberd bekannt machen. Wie bereits erwähnt nutzen wir für den Praxisbetrieb RSA-basierte Zertifikate, da ein Parallelbetrieb mit ECDSA-Zertifikaten aktuell noch nicht möglich ist.## Список всех доступных файлов PEM, содержащих сертификаты для ваших доменов, ## цепочки сертификатов или ключей сертификатов. Полные сети будут построены ## автоматически по ejabberd. ## файлы сертификатов: - « /etc/ejabberd/certs/kuketz-lab.pem » - « /etc/ejabberd/certs/kuketz-lab.key »
5.4 TLS [конфигурация TLS]
Bei der TLS-Konfiguration müssen wir stets zwischen Abwärtskompatibilität und Sicherheit abwägen. Mit der Ergänzung des Parameters
no_tlsv1_1
schließen wir all TLS-Cipher-Suiten aus, die auf TLS 1.1 (oder niedriger) basieren und in best Kombinationen als anfällig bzw.Schwach Gelten. Wir setzen также ausschließlich auf TLS 1.2 oder höher. Doch damit nicht genug, wir schränken die von unserer ejabberd-Instanz angebotenen Cipher-Suiten über den ParameterTLS_CIPHERS
auf eine Handvoll ein. Das mag auf den ersten Blick ein drastischer Schritt sein, da wir dadurch die Föderationskompatibilität einschränken — denn können sich zwei XMPP-Server beim TLS-Verbindungsaufbau nicht auf eine Cipher-Suite die eindung.Ähnlich wie bei einem E-Mail-Service можно также использовать для решения дилеммы: Sicherheit vs. Abwärtskompatibilität. Unter Umständen kann также erforderlich sein, dass ihr weitere Cipher-Suiten ergänzt, um best XMPP-Servern oder Clients den TLS-Verbindungsaufbau zu ermöglichen. Das Mozilla-Wiki bietet eine Übersicht von unterschiedlichen TLS-Cipher-Konfigurationen an.
## Обратите внимание, что по умолчанию используется следующая конфигурация. ## конфигурация драйвера TLS, поэтому вам не нужно ## раскомментируйте.## define_macro: «TLS_CIPHERS»: « ECDHE-ECDSA-AES256-GCM-SHA384: ECDHE-RSA-AES256-GCM-SHA384: ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1-GCM-GCA-12-POLYA-GC-12-ECDHE-RSA-CHACHA20-POLY1 SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA384: ECDHE-ECDSA-AES128-SHA256: ECDHE-12 "SHA-AES128 900" SHA256 "TLS_OPTIONS": - «no_sslv3» - «no_tlsv1» - «no_tlsv1_1» - «cipher_server_preference» - «no_compression» ## 'DH_FILE': "/ etc / ejabberd / dh5096.pem "# сгенерировано с помощью: openssl dhparam -out dhparams. pem 2048
Убер CryptCheck (Auswahl XMPP) lassen sich all Cipher-Suiten anzeigen, die euer ejabberd-Server anbietet. Dabei fällt der 256-bit Schlüsselaustausch verwendet wird und auf Elliptic-Curve-Cryptography (ECC) basiert. .
Über den folgenden Befehl könnt ihr eine TLS-verschlüsselte Verbindung zu eurem ejabberd-Server initiieren und die Let’s-Encrpyt-Zertifikate prüfen:
—
openssl s_clientm -ppct-server kuketz-lab.de:5269 | openssl x509 -noout -text
5.5 Dienste [Порты прослушивания]
Um mit der Außenwelt zu kommunizieren bietet euer ejabberd-Server разнообразный Dienste bzw. Переносит и поддерживает клиентов, а также (XMPP-) Server verbinden und kommunizieren.Wir ergänzen die Standardkonfiguration um weitere Ports, die anschließend einen direkten Verbindungsaufbau via TLS (sozusagen TLS-on-Connect) ermöglichen, ohne zuvor den »Umweg« über STARTTLS nehmen zu müssen.
Der Port 5222 dient in der XMPP-Welt als Standard for Clients, die sich mit einem XMPP-Server verbinden möchten. Möchte sich ein Client mit unserem ejabberd-Server verbinden setzen wir STARTTLS voraus.
## listen: порты, которые ejabberd будет прослушивать, каждый из которых обслуживается ## by и с каких опций начать.## - порт: 5222 ip: "::" модуль: ejabberd_c2s starttls_required: true
protocol_options: 'TLS_OPTIONS'max_stanza_size: 65536 формирователь: c2s_shaper доступ: c2sDen Port 5223 ergänzen wir in der Konfiguration und ermöglichen Clients damit den direkten TLS-Verbindungsaufbau.
- порт: 5223 ip: "::" модуль: ejabberd_c2s tls: правда max_stanza_size: 65536 формирователь: c2s_shaper доступ: c2s
Der Port 5296 dient in der XMPP-Welt als Standard für all Server, die sich mit einem anderen XMPP-Server verbinden möchten.Über den Parameter
s2s_use_starttls: required
(hier nicht sichtbar) erzwingen wir die Verwendung von STARTTLS.- порт: 5269 ip: "::" модуль: ejabberd_s2s_in
Auch für die XMPP-Server ergänzen wir einen Port, der dann anschließend für den direkten TLS-Verbindungsaufbau genutzt werden kann.
- порт: 5270 ip: "::" модуль: ejabberd_s2s_in tls: true
Den Port 5280 entfernen wir aus der Standardkonfiguration und ergänzen dafür den Port 5443, worüber im Betrieb der Versand von Dateien geregelt wird.
- порт: 5443 ip: "::" модуль: ejabberd_http request_handlers: "/ upload": mod_http_upload tls: правда шифры: 'TLS_CIPHERS' protocol_options: 'TLS_OPTIONS'
Damit sich ein Client gegenüber dem ejabberd-Server authentifizieren kann, werden ihm different SASL-Methoden angeboten. Zwei dieser Methoden schließen wir aus Sicherheitsgründen aus.
disable_sasl_mechanisms: - «дайджест-мд5» - «x-oauth3»
5.6 Zugriffskontrolle [ACL]
Für unseren ejabberd-Server legen wir ein Administrationskonto an:
ejabberdctl register admin kuketz-lab.de [Passwort]
Diesem Konto gewähren wir anschließefiguration.
акл: ## ## ACL "admin" предоставляет административные привилегии учетным записям XMPP. ## Вы можете разместить здесь сколько угодно учетных записей. ## админ: пользователь: - «админ»: «кукетц-лаб.de "
5.7 Shaper-Rules
Mit den Shaper-Rules lassen sich unter anderem die maximale Anzahl an gleichzeitigen Verbindungen von einem Nutzer festlegen. Wir erhöhen die maximale Anzahl an Offline-Nachrichten, die derin Server Ben dieser wieder online kommt und diese abholt.
max_user_offline_messages: - 5000: администратор - 500
5.8 Captchas [Captcha]
Um die Registrierung von Accounts zu vermeiden, die anschließend von Bots zum Versand von Spam missbrau
Как установить и настроить Erlang & Ejabberd XMPP Server на Ubuntu?
Erlang — это функциональный язык программирования общего назначения с открытым исходным кодом, используемый для масштабируемости в реальном времени и обеспечения высокой доступности во время системных требований.Он имеет встроенную поддержку параллелизма, распределения и отказоустойчивости. Erlang широко используется во многих отраслях, таких как обмен мгновенными сообщениями, автомобилестроение, электронная коммерция, банковское дело и т. Д.
Следующие шаги представляют собой процедуру установки Erlang на сервере Ubuntu:
ШАГ 1: Загрузите Erlang на сервере Ubuntu
На сервере Linux загрузите исходный файл Erlang, используя ссылку ниже. Здесь используется версия Erlang 18.0, и это регулярно расширяет обновления.
Команда wget используется для загрузки исходных файлов Erlang.
$ wget http://erlang.org/download/otp_src_18.0.tar.gz
ШАГ 2: Извлеките tar-файл Erlang
Распакуйте загруженный tar-файл с помощью команды.
$ tar -xvzf otp_src_18.0.tar.gz
ШАГ 3: Добавление зависимостей в команду
Обеспечьте необходимые зависимости в одной библиотечной функции для выполнения конкретной задачи. Ниже перечислены зависимости, которые будут выполнять определенную задачу.
$ sudo apt-get install gcc make build-essential libncurses5-dev openssl libssl-dev fop xsltproc unixodbc-dev libwxbase3.0 libwxgtk3.0-dev libqt4-opengl-dev autoconf
ШАГ 4: Начать компиляцию и установить Erlang
Для компиляции исходного кода используйте команду «make», которая запускает выполнение файла и, наконец, устанавливает Erlang с помощью «make install» на сервере Linux. Команда configure поможет вам проверить зависимости.
$ sudo ./configure $ sudo make $ sudo make install
Указанные шаги представляют собой простой способ установки программы Erlang на сервер Ubuntu.
Прочтите: Как создать приложение для чата, такое как WhatsApp?
Ejabberd — это сервер программирования XMPP (Extensible Messaging Presence Protocol), написанный с использованием языка программирования Erlang. Один из самых популярных бесплатных программ с открытым исходным кодом. Ejabberd работает на нескольких операционных системах, таких как Linux, Mac, Unix, Windows и т. Д.XMPP — это магистраль, которая позволяет отправлять сообщения в реальном времени, индикаторы присутствия в сети, функции маршрутизации XML и многое другое.
В следующем разделе будет подробно описана установка сервера Ejabberd XMPP на Ubuntu 14.04 / 16.04.
ШАГ 1: Загрузите Ejabberd на сервер Ubuntu
На сервере Linux загрузите исходный файл Ejabberd, используя ссылку ниже. Здесь используется версия Ejabberd от 16.08, которая регулярно расширяет обновления.
Команда wget используется для загрузки исходных файлов Ejabberd.
$ wget https://www.process-one.net/downloads/ejabberd/16.08/ejabberd-16.08.tgz
ШАГ 2: Распакуйте tar-файл Ejabberd
Распакуйте загруженный tar-файл с помощью команды.
$ tar -xvzf ejabberd-16.08.tgz
ШАГ 3: Добавление зависимостей в команду
Обеспечьте необходимые зависимости в одной библиотечной функции для выполнения конкретной задачи. Ниже перечислены зависимости, которые будут выполнять определенную задачу.
$ sudo apt-get install rebar libyaml-dev libexpat1-dev
ШАГ 4: Устранение и проверка проблемы
autogen.sh используется для компиляции, проверки работоспособности и устранения начальных проблем.
$ ./autogen.sh
ШАГ 5: Начать выполнение и установить Ejabberd
Для компиляции исходного кода используйте команду «make», которая запускает выполнение файла и, наконец, устанавливает Erlang с помощью «make install» на сервере Linux.Команда configure поможет вам проверить зависимости.
$ sudo ./configure $ sudo make $ sudo make install
ШАГ 6: Откройте файл конфигурации Ejabberd
Используя команду, откройте файл Ejabberd для установки базы данных.
$ Судо нано /etc/ejabberd/ejabberd.yml
Если вам нужна база данных MySQL, выполните команду упоминания, чтобы включить IP, имя базы данных, имя пользователя, пароль.
1) Прокомментируйте следующие строки в ejabberd.yml файл
2) Раскомментируйте следующие строки в файле ejabberd.yml
auth_method: sql
sql_type: mysql
sql_server: «52.13.12.123 ″ (IP-адрес базы данных Mysql)
sql_database: «имя базы данных» (имя базы данных)
sql_username: «root» (имя пользователя базы данных)
sql_password: «пароль» (пароль базы данных)
Наконец, сохраните файл /etc/ejabberd/ejabberd.yml
ШАГ 7: Запустите Ejabberd
После внесения изменений запустите Ejabberd, который, в свою очередь, поможет обновить базу данных.
$ sudo ejabberdctl start
ШАГ 8: Проверьте состояние с помощью локального хоста
Чтобы проверить и проверить статус установки ejabberd, используйте следующую команду.
$ sudo ejabberdctl статус
Узел Ejabberd на Localhost запускается с команды status и показывает, что ejabberd 16.
,