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, що дозволяють підключення до 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 не буде опублікований.