ejabberd MySQL

Возможно позднее добавлю статью в ArchWiki. Первое что нам понадобится это естественно сам ejabberd. Думаю объяснять как ставить пакеты пакманом для человека озаботившегося поставить Jabber-сервер пустая трата времени и вы давно это умеете. Нужно лишь поставить ejabberd а там пакман сам вытянет нужные зависимости. После установки нужно править конфиг. находится он в

/etc/ejabberd/ejabberd.cfg

Открываем его вашим любимым текстовым редактором и ищем строки в которых необходимо изменить параметры.

Думаю тут все понятно. Вместо моего доменного имени прописываем свое (vasya-pupkin.ru).

%%%.   ================
%%%'   SERVED HOSTNAMES
%%
%% hosts: Domains served by ejabberd.
%% You can define one or several, for example:
%% {hosts, ["example.net", "example.com", "example.org"]}.
%%
{hosts, ["syslinux.ru"]}.
%%
%% route_subdomains: Delegate subdomains to other XMPP servers.
%% For example, if this ejabberd serves example.org and you want
%% to allow communication with an XMPP server called im.example.org.
%%
%%{route_subdomains, s2s}.

LISTENING PORTS

{listen,
 [
  {5222, ejabberd_c2s, [
                        %%
                        %% If TLS is compiled and you installed a SSL
                        %% certificate, put the correct path to the
                        %% file and uncomment this line:
                        %%
                        {certfile, "/etc/ejabberd/server.pem"}, starttls,
                        {access, c2s},
                        {shaper, c2s_shaper},
                        {max_stanza_size, 65536}
                       ]},
  %%
  %% To enable the old SSL connection method in port 5223:
  %%
  {5223, ejabberd_c2s, [
                        {access, c2s},
                        {shaper, c2s_shaper},
                        {certfile, "/etc/ejabberd/server.pem"}, tls,
                        {max_stanza_size, 65536}
                       ]},
  {5269, ejabberd_s2s_in, [
                           {shaper, s2s_shaper},
                           {max_stanza_size, 131072}
                          ]},
  %%
  %% ejabberd_service: Interact with external components (transports...)
  %%
  {5347, ejabberd_service, [
                            {access, all},
                            {shaper_rule, fast},
                            {ip, {127, 0, 0, 1}},
                            {hosts, ["icq.syslinux.ru"],
                             [{password, "yourpassword"}]
                            }
                           ]},
  %% MRIM Transport
   {8884, ejabberd_service, [
                  {ip, {127, 0, 0, 1}},
                  {access, all},
                  {shaper_rule, fast},
                  {host, "mrim.syslinux.ru", [{password, "your_password"}]}
          ]},
  %%
  %% ejabberd_stun: Handles STUN Binding requests
  %%
  %%{{3478, udp}, ejabberd_stun, []},
  {5280, ejabberd_http, [
                         %%{request_handlers,
                         %% [
                         %%  {["pub", "archive"], mod_http_fileserver}
                         %% ]},
                         captcha,
                         http_bind,
                         http_poll,
                         web_admin
                        ]}
 ]}.
%%
%% s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.
%% Allowed values are: true or false.
%% You must specify a certificate file.
%%
{s2s_use_starttls, true}.
%%
%% s2s_certfile: Specify a certificate file.
%%
{s2s_certfile, "/etc/ejabberd/server.pem"}.
%%
%% domain_certfile: Specify a different certificate for each served hostname.
%%
%%{domain_certfile, "example.org", "/path/to/example_org.pem"}.
%%{domain_certfile, "example.com", "/path/to/example_com.pem"}.
%%
%% S2S whitelist or blacklist
%%
%% Default s2s policy for undefined hosts.
%%
{s2s_default_policy, allow}.
%%
%% Allow or deny communication with specific servers.
%%
%%{{s2s_host, "goodhost.org"}, allow}.
%%{{s2s_host, "badhost.org"}, deny}.
%%
%% Outgoing S2S options
%%
%% Preferred address families (which to try first) and connect timeout
%% in milliseconds.
%%
{outgoing_s2s_options, [ipv4, ipv6], 10000}.
5222, ejabberd_c2s

Это порт для подключений client2server,тобишь порт который будет слушать ваш сервер и ждать когда к нему подключаться (естественно если вы за железным роутером, то нужно прокинуть порт 5222, или если подключается сам комп (Bridge) то разрешить в Iptables.

{certfile, "/etc/ejabberd/server.pem"}, starttls,

это путь до файла сертификата,без него как я понимаю к другим серверам вы подключаться не сможете. Как его сгенерить я скажу позже. access, c2s — тут я ниче не менял, все by default.

5223, ejabberd_c2s

это подключение client2server по защищенному каналу. В принципе кошерно юзать TLS а TLS работает и на 5222 порту. Так что 5223 в основном для устаревших клиентов которые юзают SSL (в этом я мало понимаю так что могу и ошибаться) и им можно принебречь.

5269, ejabberd_s2s_in

этот порт должен обязательно быть доступен извне,так как через этот порт к вашему серверу подключаются другие сервера (например jabber.ru).

5347, ejabberd_service

здесь прописан на каком порту будет слушать транспорт ICQ.

8884,  ejabberd_service

транспорт Mail.ru, тут аналогично как и с ICQ.

5280,  ejabberd_http

это порт вашей админки сервера,расшаривать этот порт в инет необязательно локальный доступ через браузер итак будет,ведь мы де не хотим чтоб кто то подобрав пароль убил БД или уронил серв. Вобщем тут на ваше усмотрение.

3478, udp

тут вообще закоменчено,не знаю для чего это и на работу не влияет.

s2s_use_starttls, true

использование STARTTLS при запросах server2server.

{s2s_certfile, "/etc/ejabberd/server.pem"}.

все тот же сертификат для подключений.

auth_method, internal

это метод аутенфикации на сервере у меня закоменчен. Если вы будете использовать встроенную базу данных Mnesia то надо раскоментить эту строку (убрать %%). Если будете использовать MySQL то нужно раскоментить

{auth_method,  odbc}.

Весь остальной конфиг в этой секции by default. Теперь возьмемся за список контроля доступа ACCESS CONTROL LISTS

Ищем строку

{acl, admin, {user, "your_user", "syslinux.ru"}}.

и ставим вместо youruser желаемое имя пользователя(это будет аккаунт с правами админа). Остальное в данной секции я не редактировал. далее ищем строку language и ставим

{language, "ru"}.

в секции MODULES в принципе можно ничего не править если не использовать MySQL. Тепеь можно пробовать запустить сервер

sudo /etc/rc.d/ejabberd start

Смотрим логи в /var/log/ejabberd/ejabberd.log,если ругани нет то можно зарегать аккаунт админский. Если не запускается сервер то скорее всего дело в правах на файлы конфигурации (файлы должны прнадлежать ejabberd). Можно зарегать аккаунт через ejabberdctl,но у меня он почему то либо не запускался,а если запускался то валился в корку. запускаем Vacuum,Qutim,PSI или что у вас там создаем в нем аккаунт с именем пользователя которое вы указали в ACCESS CONTROL LISTS и нужным паролем. Подключаемся,аккаунт админа создан. Теперь у вас есть админка по адресу http://localhost:5280/admin в которой вы можете рулить сервом. С этим в принципе все. Теперь мы хотим аськотранспорт.

sudo pacman -S  pyicqt

Теперь надо настроить его конфиг /etc/ejabberd/pyicq.xml

        icq.syslinux.ru
        /var/spool/pyicqt
        /var/run/pyicqt.pid
        syslinux.ru
        [email protected]
        
        5347
        yourpassword
        en
        windows-1251
        login.icq.com
        5190

Думаю тут все понятно,прописываем свое доменное имя вместо syslinux.ru…. и вместо youruser ваш аккаунт админа. Проблем тут у меня не возникло думаю и у вас также будет. после настройки

sudo /etc/rc.d/pyicqt start

С Mrim аналогично. Теперь самое главное,вернее то на что ушло больше всего времени из за недостатка знаний. MySQL. Не буду перечислять достоинства и недостатки разных СУБД,а сразу к делу. Чтоб поставить MySQL надо:

sudo pacman  -S mysql

После установки в конфиге мускуля в основном ничего править не надо. Если после установки мускуля появилась директория /var/lib/mysql и с вложенными в нее директориями mysql и test то можно начать создавать базы данных и пользователей для работы с ними.(ИМХО от рута запускать базы как то не очень))). теперь запускаем мускуль

sudo /etc/rc.d/mysqld start

проверяем

sudo mysql

Далее создаем пароль для суперпользователя

mysqladmin -u root password  "your_root_password"

Теперь подключаемся к серверу как рут


mysql -u root -h hostname -p

где hostname обычно localhost. Теперь создаем в MySQL пользователя для работы с БД

mysql> GRANT ALL PRIVILEGES ON *.* TO ejabberd@localhost
IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

пароль должен быть в «кавычках» Этой командой мы создали юзверя ejabberd для MySQL который может подключаться к СУБД с localhost’a и не ограничен в правах. Обновим привилегии:


mysql> FLUSH PRIVILEGES;

А теперь дадим этому пользователю разрешение на подключение к нашей будущей базе данных на чем я как раз и запнулся в следствии чего ejabberd никак не хотел логиниться в БД.

mysql> GRANT SELECT,INSERT,UPDATE,CREATE ON jabber.* TO
ejabberd@localhost IDENTIFIED BY "yourpassword";

Jabber — это наша будущая база данных в которой будет вся инфа серва а ejabberd это уже имеющийся и в системе и в MySQL пользователь. Теперь можно выйти из мускуля q Сейчас создадим базу данных jabber:


sudo mysqladmin -h localhost -u ejabberd -p create jabber

вводим пароль и если все удачно то база создастся. Теперь следующие грабли на которые я наступил. По умолчанию БД создается пустая и о том что ее надо заполнять таблицами я знать не знал)),а когда узнал то долго гуглил где найти то чем это сделать *LOL* Скачиваем это, сохраняем например в /home/vasya ,заходим в мускуль


sudo mysql -h localhost -u ejabberd -p

делаем нашу БД активной


mysql> u jabber

и выполняем


mysql> source /home/vasya/mysql.sql;

Смотрим как создаются таблицы и радуемся. Отключаемся от СУБД (q) Открываем снова конфиг ejabberd ищем строку

AUTHENTICATION

{auth_method, odbc}.

раскоменчиваем ее если закоменчена ,потом коментим

%%{auth_method,  internal}.

Находим это

{odbc_server, {mysql, "localhost", "jabber", "ejabberd", "yourpassword"}}.

вместо yourpassword пишем тот пароль который вы ввели при установке привилегий на подключени к БД. Ну вобщем то и все теперь

sudo /etc/rc.d/ejabberd stop
sudo /etc/rc.d/mysqld restart
sudo /etc/rc.d/ejabberd start

Наслаждаемся! Теперь про сертификат. Делается это просто

cd /etc/ejabberd/
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout
privkey.pem -out server.pem

после этого вам зададут несколько вопросов (ваш email,cтрана и прочее) После этого выполняем

$openssl rsa -in privkey.pem -out  privkey.key
cat privkey.key >> server.pem
rm privkey.pem
mv server.pem ejabberd.pem

Оцените статью