У репозиторіях 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 сертификатов 1 Підготовка SSL сертифікатів
- Создание базы данных MySQL 2 Створення бази даних MySQL
- Настройка Prosody 3 Налаштування Prosody
- Создание и удаление пользователей 4 Створення та видалення користувачів
- Сообщения об ошибках 5 Повідомлення про помилки
- DNS записи для Jabber 6 DNS записи для Jabber
- Правила для iptables 7 Правила для iptables
- Включение сжатия в Prosody 8 Включення стиснення в Prosody
- Тестирование 9 Тестування
Підготовка 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.
Вітаю.
Зробив все по твоїй інструкції - ніяк не можу вирішити проблему з довіреною сертифікатом. Отримав у 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 підключав?
Забавно, раніше підтримували, а зараз - ні.
Беру сертифікат з папки nginx. Там він відразу «склеєний» з проміжним сертифікатом. Все зводиться, хоча з ya.ru не пройшло перевірку.
У сертифікаті повинні збігатися домен з www і без.
Як варіант, закомментировать ciphers і options у віртуального хоста, щоб використовувати значення за умовчанням. Може, xmpp Яндекса працює з менш стійкими шифрами і тільки під sslv3.
Також можна додати виняток:
s2s_insecure_domains = { "ya.ru" }
http://prosody.im/doc/s2s#security