Comments 73
Делать альтернативу и упирается вот в это:
Далее нам нужен домен для работы сервера, XMPP работает через TLS со всеми вытекающими, без домена никак. В принципе, можно использовать и бесплатный домен с какого-нибудь dynu.com, freedns.afraid.org, или даже sslip.io, но тут все упирается в доверие к сервису - кто владеет доменом, тот имеет доступ ко всему (если только вы не сделаете certificate pinning).
Немного неосмотрительно мягко говоря, а если доступ к домену будет по какой то причине утерян? Если нарушится связность с некоторыми сегментами интернет? Не будет доступа к ДНС и/или к серверу сертификации? Если уж желаете неубиваемую болталку, то она должна быть способна работать хоть в локальной сети на два устройства + сервер, а в идеале вообще без сервера в режиме точка-точка + меш из многих точек, но это уже разумеется уровень железа и каналов затрагивает уже. А пока это песочная "крепость" на пляже. Но это разумеется мое имхо...
Параноики могут и без доменов использовать самосгенеренные сертификаты, вручную добавляя их в список доверенных.
Наверное это стоило написать, а ещё лучше описать настройку прямо в статье?
А ориентировочно в конце этого года можно будет у LE получать валидные сертификаты для IP-адресов.
Не параноики.
Во-первых, выставлять что-то без крайней необходимости в интернет на публичные адреса в наше время весьма попрочная практика. Уязвимостей в таком комплексном софте настолько много, что взлом - дело времени. И хорошо, если что-то лайтовое зальют - там ведь могут начать цопе распространять, или пропаганду запрещ енки вести - а отбрехиваться от товарища майора вам потом.
Во-вторых, сервисы "для себя и компании" часто сидят на приватном TLD типа ".lan" внутри локалки, куда доступ через ipsec (или другой впн). Это наиболее безопасное и взломостойкое решение... Там как ни крути, но серты самому делать, поскольку на приватный TLD получить нормальный серт нереально...
Когда поднял сервер для пары друзей, требовать подключаться к нему исключительно через постоянно поднятый VPN - затея довольно сомнительная и всетаки ближе к паранойе.
А если сервер только внутри локалки, это никак не мешает использовать LE. В LE есть челенджи, с которыми для подтверждения владения доменом не нужно иметь связность снаружи, а например достаточно добавить определенную TXT NS-запись, и после этого можно генерить сертификаты даже для доменов которые указывают на чисто локальные адреса.
VPN может быть достаточно лёгким и простым как по настройке, так и для конечного пользователя, например ssh туннель. В одном скрипте запустить туннель и клиент следом. Просто и без затей так говорится и достаточно надёжно в плане перехвата траффика. Все крутится внутри сервера, наружу только один порт и один сервис - красота же!
Правда тогда ssl для сервера вроде как и не нужен уже, шифровать внутри зашифрованного туннеля несколько излишне...
например ssh туннель. В одном скрипте запустить туннель и клиент следом.
На мобильнике, ага
И? Что именно вас смущает? На Андроиде к примеру с этим проблем точно нет, на яблоках возможно... Даже скорее всего! Но тут как бы я не помощник:)
На андроиде это не получится одной командой. Нужно ставить отдельную аппку, настраивать роутинг (чтобы на впн шло только то что надо), а бонусом оно будет еще дополнительно батарею поджирать
Ну почему же? На самом деле можно, но пользоваться этим будет не особо удобно... В 16-м Андроиде обещали завезти нативно запуск Линукс приложений, ну а для более ранних версий - termux.
Не напомните, когда вышел 16-й Андроид? Если не помните, я могу сказать точно: полтора месяца назад, то есть 10 июня 2025 года, до массовых аппаратов, которые стоят не как боинг или хотя бы крыло от него, он доберётся через год-полтора. А до тех пор всё так, как было описано выше. Я пытался поднимать такой туннель. Да, можно, но это многошаговые пляски с бубнами по поводу запуска программы программы, которой нужен туннель. В крайнем случае - можно, в качестве постоянного рецепта - ну его нафиг. Это при том, что Android Studio не умеет собирать маленькие программы, раздувая каждую до размеров чуть ли не отдельной операционки. Даже если программи делает примерно ничего. А тут приходится запускать программу с графическим интерфейсом, без которого запустить её никак не получится, да и интерфейс развесистый, потому что её же настраивать надо.
Jabber живее всех живых , а вот с клиентами так себе - большинство не умеет otr ( кроме как раз той классики )
А чем OTR лучше OMEMO?
OMEMO умели все современные клиенты из тех что я пробовал.
Насколько я помню/знаю они очень похожи ( otr и omemo) не возьмусь сказать лучше или хуже. Имею в контакт листе людей общающихся исключительно с otr , по этому проблема поиска клиента с его поддержкой знакома.
OMEMO является эталоном на текущий момент, он лучше OTR большей стабильностью, возможностью отправки сообщений в оффлайн и поддержкой множества устройств одновременно
На сколько я помню у отра ключ 128 бит. В современных реалиях не слишком секурно.
А там разве размер ключа прибит гвоздями? Не интересовался, поэтому не знаю. Но если да, то это очень печально, поскольку, например, ключи RSA меньше 4, а то и 8, килобит в современных реалиях это совсем не смешно.
У RSA длинные ключи только потому, что они должны быть простыми числами с особыми свойствами, которых среди этих 4 килобит относительно немного. Нынче модно заменять RSA на какой-нибудь Ed25519, у которого такой особенности нет и у которого 256-битного ключа достаточно, чтобы обеспечить безопасность, сравнимую с 4096-битным RSA (собственно, если я правильно понимаю, в OMEMO используется как раз Ed25519)
Зачем prosody-то? Буквально сейчас поднял себе сервак на ejabberd. Кластеризация из коробки, он на elixir, понятный yml в настройках, интеграция с let's encrypt, сразу умеет в stun/turn да и вообще всё что надо. Есть apt и rpm репы. Развивается активно компанией, которая им реально зарабатывает.
Такой же вопрос — а зачем ejabberd, если на сервере будет полтора анонимуса? Ejabberd это про высокие нагрузки (Whatsapp, eve online), а prosody — про сервер для друзей и родных.
Ну как минимум он сложнее в настройке и нужно осваивать erlang. А если у вас на сервере десяток человек то зачем городить сложности?
нужно осваивать erlang
Зачем? У меня личный сервер на ejabberd уже лет пятнадцать, из настроек всего один yaml-файлик, erlang до сих пор не знаю
Не понимаю где вы в Gajim увидели устаревший интерфейс. Давно уже выглядит как один из самых современных мессенджеров
Я тестил версию 2.2, она прям вообще олдскульная. Сейчас проверил 2.3, там обновили интерфейс, стало поприличнее, но уж точно не "как один из самых современных" :) Думаю, это уже вопрос вкуса и личных предпочтений
Это вы похоже не видели олдскульные клиенты — Gajim 0.6, Tkabber, QIP. Так когда-то выглядели все XMPP клиенты.
А почему был выбор именно в пользу Prosody, а не тот же Snikket, который сразу в докере? Или Openfire, который вообще буквально в пару кликов устанавливается, насколько я помню, к тому же он с самым вменяемым web интерфейсом из всех?
Openfire
Придётся втаскивать Java, да и сам по себе Openfire местами весьма творчески интерпретрует спецификациии. По крайней мере, когда к нам в багтрекер приходят с очередным "что-то не работает", чаще всего оказывается, что с ejabberd оно работает, с Prosody работает, а вот Openfire имеет своё особое мнение.
Using Prosody with Docker
https://prosody.im/doc/docker
Есть(An Overview of XMPP) и что выбрать по клиентам и серверам
Понравилась лаба(офис или организация):
https://github.com/spanishairman/ejabberd-postgresql-debian
Просто Snikket это уже настроенный, готовый к использованию дочерний проект этих ребят. Сейчас уже не помню, но если мне не изменяет память там даже конфиг править не надо (есть примитивная админка на web).
P.S. Да и гайд какой-то поверхностный. На вскидку: ничего не сказано, что оф. репозиторий использует устаревший алгоритм (dsa1024), а сейчас многие Linux-дистрибутивы больше не доверяют DSA-ключам. Не раскрыта админка (а штука важная), не раскрыто создание комнат (не менее важно). Модуль bosch почему-то не освещён. Да и про то, что такое "prosodyctl" не мешало бы рассказать.
На вскидку: ничего не сказано, что оф. репозиторий использует устаревший алгоритм (dsa1024), а сейчас многие Linux-дистрибутивы больше не доверяют DSA-ключам.
Если человек взялся осваивать линукс, то уж способ сказать пакетному менеджеру "игнорируй то, что ключ ненадёжный" нагуглит.
К тому же, в этом году планируется замена ключа на более стойкий, просто команда Prosody почему-то тривиальную задачу растягивает на целый год: в начале 2025 они писали, что сгенерируют ключ на каком-то там мероприятии (словно это какой-то торжественный подвиг - вау, смотрите, я умею генерировать ключи), теперь они его сгенерировали и грозятся начать использовать. Вместо того, чтобы просто взять и сделать, они тянут резину.
Официальная докер-репа протухла почти на 4 года. Есть prosodyim/prosody, в которую руками деплоит один из разработчиков, но это такое - работать работает и даже вроде как не особо и проблема, просто имидж проекта несколько подмочен: за несколько лет не разобраться с автоматизированным деплоем - это либо некомпетентность, либо катастрофическая нехватка рук
Signal - отличный мессенджер и всем хорош.
Особенно он хорош деаноном при создании аккаунта и централизованной архитектурой.
Да и не нужно про встроенное сквозное шифрование. Без одноразового шифроблокнота передаваемого независимым от шифруемого канала способом это всего лишь маркетинг. Как и в Телеграмм к примеру.
Как раз на неделе интересовался вопросом. Спасибо за статью, утащил в закладки!
По поводу сертификатов: не безопаснее ли сгенерить ключ своего собственного certificate authority (CA), которым затем подписывать сертификат сервера, выданный хоть на внутренний домен, хоть на dyndns-домен, хоть на IP, хоть на домен habr.com, как в вашей статье? Если не пользоваться LE или другими публичными CA, то всё равно нужно будет либо какой-то сертификат добавлять в хранилище, либо пинить в самом клиенте или в системе. Имхо, лучше пусть это будет не самоподписанный серт (вдруг забудете запинить его — и привет MITM), а заверенный вашим CA, приватный ключ от которого есть только у вас — никто другой не сможет подписать серт вашего сервера вашим CA. А если запинить сам CA, а другие запретить нафиг, то это ещё секьюрнее, но тут нужна поддержка со стороны клиентского приложения.
Можно ли связать несколько серверов вместе как relay? Например, чтобы поднять mesh на OpenWRT и не выходить в Интернет вовсе?
Ещё есть швейцарская Threema и deltachat -который работает поверх email.
Как будто "швейцарская" должно добавлять надёжности и доверия. На самом деле это обычный маркетинг. Гораздо важнее какая у них криптография, и какие данные они хранят и собирают.
Вот тут разбор Threema с точки зрения безопасности.
https://soatok.blog/2021/11/05/threema-three-strikes-youre-out/
Как возможный интересный вариант можно рассмотреть: SimpleX Chat.
Следующая статья : Как завести свою голубятню?
Пробовал делать то же самое и обнаружил, что нормальных клиентов под iOS, с поддержкой видеозвонков, пушей итп. попросту нет. Т.е. есть нечто похожее, но по сравнению с привычными телегами и вацапами - просто кривое уныние и пользоваться таким ну вообще не хочется. Может кто подскажет правильный клиент для iOS? (а как дела на Андроидах?)
Как выбрать вообще сервак под такой сервер? Нагрузку наверное надо считать условно на том же аггрегаторе https://all-vps.com не всегда есть подбор по джабер сервер
Не могу сказать. На десяток не слишком активных пользователей (я использую SQLite в качестве базы) с лихвой хватает дохлого дешевого VPS с 1-м ядром и 768 мегабайтами памяти (при том что там на сервере еще куча всего крутится). Вот тут люди пишут что они гоняют prosody на Raspberry Pi и даже на микро-инстансах с 128 мегабайтами памяти.
А если вам надо на много сотен активных пользователей, то надо делать какие-нибудь бенчмарки, или сразу смотреть в сторону упомянутого тут в комментах ejabberd.
А почему не Matrix?
В посте написано:
Я попробовал, и мне не понравилось. Клиенты тормозные, через нестабильный интернет-канал все работает просто отвратительно, а сам сервер просто неповоротливый и укладывает не слишком богатый на процессор и память VPS даже всего с парой клиентов.
Как постоянный пользователь матрикса подтверждаю это всё
Так автору просто не надо на дохлых VDS-ках все в модных докерах разворачивать, а по классике устанавливать (кажется это нынче называют "bare metal"). Докер ведь ломает основополагающий принцип разделяемых библиотек - памяти отжирается больше на их виртуализированные версии. У меня на дохлой VDS (2 ядра, 2 гига) спокойно держало около 12 клиентов, причем вместе с сеансом видеоконференцсвязи. Ну и за оверселлом VDS-провайдера следить (технология виртуализации типа OpenVZ?).
около 12 клиентов
А комнат сколько? А сообщений в комнатах сколько? А федерация с другими серверами и комнатами на других серверах была?
Так автору просто не надо на дохлых VDS-ках все в модных докерах разворачивать, а по классике устанавливать (кажется это нынче называют "bare metal")
Так я и без докера пробовал, когда с докером оно захлебнулось. Лучше не сильно стало.
У меня на дохлой VDS (2 ядра, 2 гига)
Это уже не дохлая, для "дохлой" разделите оба параметра на два.
Не согласен с оценкой, что Signal - это хорошо, по логике статьи вы должны были написать недостаток и про него. Да и расследования про Telegram отдают дешёвой заказухой.
А потом от провайдера прилетает abuse, потому что spamhaus считает, что открытый порт 5223 (это как 5222 только сразу SSL) это атата:
Issue: Botnet Command and Controller Detection
Malware: win.cobalt_strike
А еще мобильные клиенты жрут батарею и нужно поднимать свой пушсервер и перекомпилировать клиентов со своим аккаунтом FCN и APN. Эх вот кто бы написал инструкцию как это всё сделать... например с openfire https://discourse.igniterealtime.org/t/flow-and-configuration-of-push-notifications/93734 + Conversations
Почему Miranda IM не упоминули ? Или вы не такой старый? :)
А потом от провайдера прилетает abuse, потому что spamhaus считает, что открытый порт 5223 (это как 5222 только сразу SSL) это атата:Issue: Botnet Command and Controller DetectionMalware: win.cobalt_strike
Это какой-то очень странный провайдер/хостер, лучше им не пользоваться.
А еще мобильные клиенты жрут батарею и нужно поднимать свой пушсервер
Некоторые клиенты используют свою push-инфраструктуру, например Siskin IM (надо только чтобы s2s был разрешен на сервере, он использует push.tigase.com для процессинга событий и рассылки пушей)
А Conversations под Android поддерживает UnifiedPush и даже может работать как дистрибьютор для других приложений.
Почему Miranda IM не упоминули ? Или вы не такой старый?
Я ее пробовал еще во времена диалапа и ICQ, и еще тогда она мне не зашла. Сейчас погуглил и с удивлением обнаружил что оно еще живо, однако.
Мне не удалось нагуглить, но может кто-то подскажет реализации чего-то вроде "оверлейного мессенджера"? Когда клиентская часть шифрует все передаваемые данные и дальше доставляет их через инфраструктуру уже существующего мессенджера, например, того же телеграма. Со звонками могут возникнуть сложности, но передачу файлов и сообщений точно не так уж сложно реализовать.
Есть такая штука как KryptEY, это софт-клавиатура для андроид, позволяет реализовать шифрование по открытый/закрытый ключ в любом мессенджере, почте где угодно в общем, хоть на открытом форуме публикуйте... Прочитает это только человек у которого есть нужный ключ. Работает с текстовыми сообщениями до 500 символов.
Есть некоторые проблемы в использовании этой штуки:
нужно руками копипастить полученные сообщения
(субъективная) общение нужно вести с телефона с его неудобной экранной клавиатурой, а не с десктопа с комфортной физической клавиатурой
Первый недостаток исправлен в Oversec, который вроде данные прям с экрана умеет расшифровывать. Однако, требует рута, и у меня так и не удалось его нормально завести
Поделюсь своим XMPP-решением на полсотни пользователей.
Сервер на CentOS, поставил OpenFire из rpm-пакета. К нему Java (OpenJDK) из репозиториев. Стартанул сервис, сразу поднялась веб-админка на порту 9090/tcp. Добавил через неё пару плагинов, группы, пользователей, SSL-сертификат. Порт 5222/tcp смотрит в локальную сеть, 5223/tcp (SSL) — в интернет.
Клиенты на десктопе Miranda NG, Android — Jasmine IM, iOS — Siskin IM.
Поднимаем свой Jabber/XMPP сервер в 2025 году