Debian 12 с последними обновлениями и доступом в Интернет
Prosody >= 0.13
PAM (Pluggable Authentication Modules) - API для авторизации в Unix-подобных ОС, по умолчанию использует список пользователей из файла `/etc/passwd`.
Все команды выполняются пользователем root
, если не указано иначе.
Выполните эти команды:
# Установить Prosody wget https://prosody.im/files/prosody.sources -O/etc/apt/sources.list.d/prosody.sources apt update apt install prosody lua5.4 liblua5.4-0 liblua5.4-dev luarocks # Добавить привилегии демону Prosody usermod -aG shadow prosody usermod -aG ssl-cert prosody # Установить библиотеку для взаимодействия с POSIX-функциями luarocks install luaposix # Собрать библиотеку дл/ PAM-аутентификации git clone https://github.com/devurandom/lua-pam && cd lua-pam make LUA_VERSION=5.4 cp pam.so /usr/lib/ # Установить модуль для PAM-аутентификации LUA_INCDIR=5.4 prosodyctl install --server=https://modules.prosody.im/rocks/ mod_auth_pam
Начните редактировать файл /etc/prosody/prosody.cfg.lua
.
Следуйте этим инструкциям, заменяя example.net
на доменное имя, привязанное к вашему серверу.
Найдите строку, начинающуюся с слова admins
, и добавьте ваше будущее имя пользователя в фигурные скобки подобным образом:
admins = { "admin@example.net" }
Где admin
- это ваше имя пользователя в вашей системе.
Дальше найдите строку --"mam";
и удалите два дефиса, сделайте то же самое с строкой --"turn_external";
, находящейся ниже.
Теперь перейдите к строке authentication = "internal_hashed"
и замените internal_hashed
на pam
.
Перейдите к строке, начинающейся с storage
и поменяйте sql
на internal
(по желанию, в этой инструкции я не рассматриваю настройку с базами данных)
По желанию в строке archive_expires_after = "1w"
замените 1w
на never
, чтобы истории переписок не удалялись каждую неделю.
Найдите строку, начинающуюся с VirtualHost
и замените localhost
на example.net
.
Если вам нужны многопользовательские переписки, на следующей строке добавьте следущее:
Component "conference.example.net" "muc" modules_enabled = { "muc_mam", "vcard_muc" }
Последнюю строку можете опустить, если вам не нужно сохранение истории многопользовательских переписок.
Если нужна возможность загружать файлы на ваш сервер, дополните конфигурацию следующими строками:
Component "upload.example.net" "http_file_share" http_file_share_size_limit = 512 * 1024 * 1024 --измеряется в байтах http_file_share_expire_after = 60 * 60 * 24 * 31 * 1000 --измеряется в секундах
В данном случае, лимит размера файла - это 512 МиБ (0,5 ГиБ), а удаляться файлы будут через ~1000 лет. Если требуется изменить какое-либо из этих свойств, смотрите комментарии (в Lua они начинаются с двух дефисов) и пробуйте изменять значения.
Также заменяйте `example.net` на ваше доменное имя.
ACME (Automatic Certificate Management Environment) - это протокол для получения TLS-сертификатов по Web. В этом примере используется ACME-клиент acme.sh, так как эта программа более настраиваемая и удостоверяющий центр (далее УЦ) Let's Encrypt (но вы можете использовать любой другой).
Выполните следующие команды:
# Эта команда установит acme.sh в директорию ~/.acme.sh, системные # файлы не будут затронуты wget -O - https://get.acme.sh | sh -s \ email=yourveryownlocalpart@example.net # Теперь либо перезайдите в систему, либо выполните `exec $0`, если # вы уверены в значении переменной `$0`. # Проверьте, прошла ли установка правильно acme.sh -h # Установить Let's Encrypt в качестве УЦ acme.sh --set-default-ca --server \ https://acme-v02.api.letsencrypt.org/directory # Есть два способа подтверждения владения доменом - по HTTP или по # DNS. # Первый проще, но требует доступ на запись в директорию, содержимое # которой доступно по ссылке http://example.net/: acme.sh --issue -d example.net -d conference.example.net -d \ upload.example.net -w <директория с корнем вашего веб-сервера> # А второй, поддерживая Wildcard-сертификаты, позволяет в дальнейшем # подключать к вашему XMPP-серверу всевозможные компоненты # (транспорты в другие сети, модуль публикации-подписки, он же # Publish-Subscribe или просто PubSub и многие другие), но требует # доступа к API вашего DNS-регистратора для создания записи, # подтверждающей владение доменным именем: acme.sh --issue --dnssleep <время в секундах, большее чем TTL> \ --dns dns_myapi \ -d example.net -d '*.example.net' # Где dns_myapi - это кодовое # имя DNS-провайдера, указанное на # https://github.com/acmesh-official/acme.sh/wiki/dnsapi # Но если у вас нет и веб-сервера (или доступа к нему), и доступа к # API регистратора, то вы можете внести запись с подтверждением # вручную (заметьте, что вам нужно будет это делать каждый раз, когда # будет истекать срок действия сертификата): # (Перед применением этого способа следует внимательно прочитать # следующую страницу: # https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode) acme.sh --issue --dns -d example.net -d '*.example.net' # Теперь примените DNS-запись, выведенную на экран командой выше, и # подождите до её распространения. После выполните следующее: acme.sh --renew -d example.net -d '*.example.net' # Почти готово. Теперь осталось установить сертификат: mkdir /etc/ssl/private/example.net chown root:ssl-cert /etc/ssl/private/example.net chmod 750 /etc/ssl/private/example.net acme.sh --install-cert \ -d example.net -d '*.example.net' \ --ca-file /etc/ssl/private/example.net/chain.pem \ --cert-file /etc/ssl/private/example.net/cert.pem \ --fullchain-file /etc/ssl/private/example.net/fullchain.pem \ --key-file /etc/ssl/private/example.net/privkey.pem \ --reloadcmd "prosodyctl --root cert import \ /etc/ssl/private/example.net"
В завершении статьи хочется обратить ваше внимание на то, что данная инструкция предоставляется БЕЗ каких-либо гарантий. Если при выполнении указаний из данной инструкции случилось что-то непредвиденное, вы можете обратиться ко мне, но не стоит ожидать какого-либо результата.