Skip to main content

Prosody - Jabber / XMPP сервер для Debian



У рэпазітарах Debian Jessie прысутнічае прымальны версія 0.9.7. Яе мы і ўсталёўваны разам з дадаткам для працы з mysql:

  # Aptitude install prosody 

Далей трэба вырашыць, якую базу дадзеных выкарыстоўваць: mysql або sqlite.



SQLite больш кампактная і непатрабавальная да рэсурсаў. Яна ўяўляе сабой файл на сэрвэры, дзе і захоўваюцца табліцы з інфармацыяй. Яе лёгка скапіяваць, не патрабуецца нічога, акрамя бібліятэкі sqlite3. Такая база дадзеных будзе лепшым рашэннем, калі вы наладжваеце jabber для сябе (і дзясятка карыстальнікаў у прыдачу :).

  # Aptitude install lua-dbi-sqlite3 

MySQL лепш падыходзіць, калі на сэрвэры плануецца размяшчаць шмат-шмат рахункаў карыстальнікаў і іх пастаяннае даданне, выдаленне, рэдагаванне і г.д. Для такой базы таксама патрэбен адпаведны кампанент.

  # Aptitude install lua-dbi-mysql 

Змест артыкула:

Падрыхтоўка SSL сертыфікатаў

Карыстацца самоподписанными сертыфікатамі зусім ня кошерную. :) Да іх няма ніякага даверу. Таму трэба атрымаць бясплатны сертыфікат ад StartSSL.com . Па гэтым пытанні ёсць добрая інструкцыя .



Дапусцім, сертыфікат вы атрымалі. Зараз у вас ёсць файл сертыфіката ssl.crt і ключ ssl.key. Ключ трэба папярэдне дэшыфраваць. Вядома, можна скарыстацца і ня дэшыфраваць, але давядзецца паказаць пароль у конфіге Prosody, выставіць адпаведныя правы доступу і гэтак далей ...

  # Openssl rsa -in ssl.key -out ssl.key 

Падчас дэшыфроўкі трэба будзе паказаць пароль ключа.

Акрамя вашага сертыфіката і ключа, спатрэбіцца сертыфікат «Class 1 Intermediate Server CA». Спампоўваем яго:


  # Wget https://startssl.com/certs/sca.server1.crt 

Аб'яднаем ў адзін файл (example.com запісаны ў якасці прыкладу, заменіце яго на імя вашага дамена):

  # Cat ssl.crt ssl.key sca.server1.crt> /etc/prosody/certs/example.com.pem 

Сертыфікат будзе захаваны ў тэчцы / etc / prosody / certs /.

Акрамя гэтага, трэба стварыць ключ для пратаколу Диффи - Хеллмана . Ён таксама будзе выкарыстоўвацца ў параметрах віртуальнага хаста, падаючы магчымасць выкарыстання Forward Secrecy.

  openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048 

Усталюйце правы доступу, якія дазваляюць толькі чытанне сертыфікатаў ад імя карыстальніка prosody.

  # Chown prosody: prosody /etc/prosody/certs/*.pem
 # Chmod 0400 /etc/prosody/certs/*.pem

На гэтым падрыхтоўка сертыфікатаў скончаная.

Стварэнне базы дадзеных MySQL

Вы можаце як стварыць базу дадзеных і карыстальніка праз кансоль, так і праз панэль кіравання phpmyadmin або аналагічныя.

Настройка Prosody

Працэс наладжвання нескладаны. Усё досыць добра дакументавана (хоць і па-ангельску), а структура канфігурацыйных файлаў простая.

Можна з лёгкасцю ствараць віртуальныя хасты, прапісваць ім асаблівыя параметры і гэтак далей. Амаль аналогія з Apache і nginx. :)

Асноўныя параметры канфігурацыйнага файла /etc/prosody/prosody.cfg.lua, значэння якіх нам будзе трэба адрэдагаваць.

  allow_registration = true; 

Дазваляе рэгістрацыю карыстальнікаў пры дапамозе кліенцкіх праграм. Pidgin, напрыклад. Па-змаўчанні - false. Не ўключайце, калі вам не трэба дазваляць рэгістрацыю.

  authentication = "internal_hashed" 

Ўключае Хэшаванне пароляў карыстальнікаў. Значэнне па-змаўчанню: internal_plain, што не зусім надзейна - захоўваць паролі ў базе ў адкрытым выглядзе.

Паказваем тып сховішчы - база дадзеных sql:

  storage = "sql"

Калі вы выбралі ў якасці сховішча sqlite, то раскомментируем радок:

  sql = {driver = "SQLite3", database = "prosody.sqlite"} 

Калі ж mysql:

  sql = {driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost"}

Не забудзьцеся пазначыць ніжэй параметр sql_manage_tables = true , каб Prosody аўтаматычна запоўніў базу дадзеных табліцамі.

Значэння prosody ў параметрах database і username трэба замяніць на імя базы дадзеных і імя карыстальніка адпаведна. Таксама трэба паказаць пароль для опцыі password, замяніўшы фразу secret. Host пакідаем без змен, калі сервер MySQL усталяваны на той жа машыне, што і Prosody.

Віртуальныя хасты ў Prosody

Наступным пунктам налады Prosody з'яўляецца стварэнне канфігурацыі для віртуальных хастоў. Дапусцім, дамен у нас адзін. Знаходзім наступны радок і замяняем прыклад example.com на імя вашага дамена.

  VirtualHost "example.com"

Закомментируйте радок:

  enabled = false

Далей ідуць налады ssl для канкрэтнага віртуальнага хаста. Трэба паказаць шлях да сертыфікату і іншыя дадатковыя опцыі.

Паколькі раней мы экспартавалі сертыфікат і ключ у адзін файл, то і шлях трэба паказаць толькі да аднаго файла.

Першыя тры радкі - гэта шляхі да ключоў / сертыфікатах. адпаведна.

  ssl = {
   key = "/etc/prosody/certs/example.com.pem";
   certificate = "/etc/prosody/certs/example.com.pem";
   dhparam = "/etc/prosody/certs/dh-2048.pem";
   options = { "no_sslv3", "no_sslv2", "no_ticket", "no_compression", "single_dh_use", "single_ecdh_use"};
   ciphers = "ECDH: DH:! ADH:! AECDH:! SEED:! DES:! 3DES:! RC4:! NULL";
 } 

Чацвёртая радок адказвае за опцыі ssl і адключае ssl версіі 2 і 3. Пятая паказвае, якія шыфры вырашаюцца да выкарыстання.

Апошнія два параметру для віртуальнага хаста, якія патрабуюць шыфраванне пры падключэнні кліентаў і сервераў. Іх трэба паказваць пасля пункта ssl = {...}.

  c2s_require_encryption = true
 s2s_require_encryption = true

На гэтым налада Prosody скончаная.

Ствараць і выдаляць карыстальнікаў

Калі вы не ўключылі магчымасць самастойнай рэгістрацыі карыстальнікаў пры дапамозе кліента, то дадаць новых карыстальнікаў можна праз кансоль просты камандай: prosodyctl adduser name@example.com. Пры даданні трэба будзе двойчы паказаць пароль.

Правы адміністравання таксама можна даць любому карыстальніку. Пакажыце лагін патрэбнага карыстальніка ў параметры admins = {} канфігурацыйнага файла. Напрыклад, так:

  admins = { "user1@example.com", "user2@example.net"}

Выдаленне карыстацкага акаўнта вырабляецца камандай: prosodyctl deluser name@example.com, дзе name@example.com трэба замяніць на jabber ID існуючага карыстальніка.

Паведамленні пра памылкі

Праверце, ці ёсць у логу памылак Prosody (/var/log/prosody/prosody.err) наступнае паведамленне:

  certmanager error SSL / TLS: Failed to load '/etc/prosody/certs/example.com.pem': 
 Reason: bad end line (for example.com)

У гэтым выпадку трэба праверыць файл сертыфікатаў на наяўнасць вось такіх радкоў:

  ----- END CERTIFICATE ---------- BEGIN RSA PRIVATE KEY -----

Гэта няправільна і трэба іх падзяліць, каб яны выглядалі так:

  ----- END CERTIFICATE -----
 ----- BEGIN RSA PRIVATE KEY -----

DNS запісу для Jabber

Для кожнага дамена трэба прапісваць у ДНС адпаведныя запісы (хоць і не абавязкова, калі не патрабуецца зносіны з карыстальнікамі іншага дамена).

  _xmpp-client._tcp IN SRV 5 0 5222 xmpp.example.com.
 _xmpp-server._tcp IN SRV 5 0 5269 xmpp.example.com.

Дзе 5 - гэта прыярытэт, 0 - вага, а 5222 і 5269 - парты для client-to-server і server-to-server тыпаў сувязі адпаведна.

Далей варта даменнае імя, якое паказвае на сервер з усталяваным jabber-ым. Гэта можа быць як той жа самы сервер, на якім запушчаны сайт, так і любы іншы.

Правілы для iptables

Калі на вашым серверы па-змаўчанню блакуюцца злучэньні, варта стварыць правілы iptables, якiя вырашаюць падключэнне да jabber-серверу па пратаколе tcp для неабходных партоў:

  # Iptables -A INPUT -p tcp --dport 5222 -j ACCEPT
 # Iptables -A INPUT -p tcp --dport 5269 -j ACCEPT 

Ўключэнне сціску ў Prosody

Часам можа спатрэбіцца ўключыць сціск для эканоміі трафіку кліента або сервера. Для гэтага ўсталюйце пакет lua-zlib:

  # Aptitude install lua-zlib 

Знайдзіце ў самым пачатку канфігурацыйнага файла групу параметраў modules_enabled і раскаментуйце радок:

  "Compression";  - Stream compression (Debian: requires lua-zlib module to work) 

І усталюйце ўзровень сціску ад 1 да 9 параметрам, які трэба прапісаць пасля групы modules_enabled.

  compression_level = 5 

тэставанне

Правільнасць наладзіць шыфраванне можна праверыць на сайце https://xmpp.net . У наяўнасці тэст як для злучэнняў client-to-server, так і server-to-server.



Як вы ацэніце артыкул?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 адзнак, сярэдняе: 5,00 з 5)
Загрузка ...

” 2 Каментары "Prosody - Jabber / XMPP сервер для Debian"

  1. Вітаю.
    Зрабіў усё паводле тваёй інструкцыі - ніяк не магу вырашыць праблему з даверанай сертыфікатам. Атрымаў у startssl. Там архіў з іншымі, сярод якіх apache, ngnix, otherserver. Выкарыстаў сертыфікат з otherserver (спрабаваў і apache) - не праходзіць у выніку аўтарызацыя з іншымі серверамі, у логі на гэтым этапе такая памылка:
    info Accepting SASL EXTERNAL identity from ya.ru
    info incoming s2s connection ya.ru-> myserver.ru complete
    info incoming s2s stream ya.ru-> myserver.ru closed: New stream 'from' attribute does not match original
    Дзесьці прачытаў, што яе вырашае ўключэнне модуля s2s_auth_compat. Уключыў, у выніку пры аўтарызацыі:
    warn Invalid stream header, certificate will not be trusted

    Нібы праблема ў самым сертыфікаце. Напісаў у саппорта startssl, там сказалі што сертыфікаты для XMPP-сервераў не падтрымліваюць. Хоць вось ты раіш, ды і ў іншых месцах згадваюць, што prosody з іх сертыфікатамі нармальна працуе ... калі ласка, падкажы як ты і якой канкрэтна сертыфікат ад startssl падключаў?

    1. Пацешна, раней падтрымлівалі, а цяпер - не.

      Бяру сертыфікат з папкі nginx. Там ён адразу «злеплены» з прамежкавым сертыфікатам. Усё заводзіцца, хоць з ya.ru не тэсціравалі.

      У сертыфікаце павінны супадаць дамен з www і без.

      Як варыянт, закаментаваць ciphers і options у віртуальнага хаста, каб выкарыстоўваць значэння па-змаўчанню. Можа, xmpp Яндэкса працуе з менш устойлівымі шыфрамі і толькі пад sslv3.

      Таксама можна дадаць выключэнне:

      s2s_insecure_domains = { "ya.ru" }

      http://prosody.im/doc/s2s#security

Дадаць каментар

Ваш e-mail не будзе апублікаваны.