Search
Write a publication
Pull to refresh

Comments 73

Делать альтернативу и упирается вот в это:

Далее нам нужен домен для работы сервера, XMPP работает через TLS со всеми вытекающими, без домена никак. В принципе, можно использовать и бесплатный домен с какого-нибудь dynu.com, freedns.afraid.org, или даже sslip.io, но тут все упирается в доверие к сервису - кто владеет доменом, тот имеет доступ ко всему (если только вы не сделаете certificate pinning).

Немного неосмотрительно мягко говоря, а если доступ к домену будет по какой то причине утерян? Если нарушится связность с некоторыми сегментами интернет? Не будет доступа к ДНС и/или к серверу сертификации? Если уж желаете неубиваемую болталку, то она должна быть способна работать хоть в локальной сети на два устройства + сервер, а в идеале вообще без сервера в режиме точка-точка + меш из многих точек, но это уже разумеется уровень железа и каналов затрагивает уже. А пока это песочная "крепость" на пляже. Но это разумеется мое имхо...

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

Наверное это стоило написать, а ещё лучше описать настройку прямо в статье?

И кстати зачем этим всем заниматься если вы не параноик реалист? Всегда же есть "прекрасная альтернатива" этим вашим враждебным сервисам! ;)

Не понял вопроса, перефразируйте пожалуйста

МаКсимально пафосный троллинг просто

А ориентировочно в конце этого года можно будет у LE получать валидные сертификаты для IP-адресов.

Это не решает вопроса с доступностью самого LE в определенный момент с определенного сегмента сети.

Не параноики.

Во-первых, выставлять что-то без крайней необходимости в интернет на публичные адреса в наше время весьма попрочная практика. Уязвимостей в таком комплексном софте настолько много, что взлом - дело времени. И хорошо, если что-то лайтовое зальют - там ведь могут начать цопе распространять, или пропаганду запрещ енки вести - а отбрехиваться от товарища майора вам потом.

Во-вторых, сервисы "для себя и компании" часто сидят на приватном 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)

О, спасибо за подсказку. Попробую на этот алгоритм перейти, если сервера его будут поддерживать. К сожалению, заказчики не одобряют регулярные обновления. Видимо, по принципу "А зачем мене запасной парашют, если он за 10 лет ни разу не понадобился?".

Зачем prosody-то? Буквально сейчас поднял себе сервак на ejabberd. Кластеризация из коробки, он на elixir, понятный yml в настройках, интеграция с let's encrypt, сразу умеет в stun/turn да и вообще всё что надо. Есть apt и rpm репы. Развивается активно компанией, которая им реально зарабатывает.

Такой же вопрос — а зачем ejabberd, если на сервере будет полтора анонимуса? Ejabberd это про высокие нагрузки (Whatsapp, eve online), а prosody — про сервер для друзей и родных.

Ну как минимум он сложнее в настройке и нужно осваивать erlang. А если у вас на сервере десяток человек то зачем городить сложности?

нужно осваивать erlang

Зачем? У меня личный сервер на ejabberd уже лет пятнадцать, из настроек всего один yaml-файлик, erlang до сих пор не знаю

Лет 15 назад я писал плагины для ejabberd на Erlang не зная Erlang. Минут 30 потребовалось чтобы вкурить суть языка (идея у него близка к Prolog-у) и разобраться как выводить отладочные сообщения. Дальше никаких проблем.

Не понимаю где вы в Gajim увидели устаревший интерфейс. Давно уже выглядит как один из самых современных мессенджеров

Я тестил версию 2.2, она прям вообще олдскульная. Сейчас проверил 2.3, там обновили интерфейс, стало поприличнее, но уж точно не "как один из самых современных" :) Думаю, это уже вопрос вкуса и личных предпочтений

Это вы похоже не видели олдскульные клиенты — Gajim 0.6, Tkabber, QIP. Так когда-то выглядели все XMPP клиенты.

Почему же, видел и хорошо их помню. Речь даже не про компоновку окна (олдскульные часто делали отдельное окно под ростер, и отдельное под чаты, а то и под каждый чат), а в целом про то как выглядит приложение - шрифты (и антиалиасинг), иконки, и т.д. Времена-то не стоят на месте.

А почему был выбор именно в пользу Prosody, а не тот же Snikket, который сразу в докере? Или Openfire, который вообще буквально в пару кликов устанавливается, насколько я помню, к тому же он с самым вменяемым web интерфейсом из всех?

Openfire

Придётся втаскивать Java, да и сам по себе Openfire местами весьма творчески интерпретрует спецификациии. По крайней мере, когда к нам в багтрекер приходят с очередным "что-то не работает", чаще всего оказывается, что с ejabberd оно работает, с Prosody работает, а вот Openfire имеет своё особое мнение.

Просто 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, а другие запретить нафиг, то это ещё секьюрнее, но тут нужна поддержка со стороны клиентского приложения.

Я выше писал что это тоже вариант, да. Но тогда это потребует ручного добавления вашего корневого серта на все устройства всех ваших пользователей.

Девайсы на Android в таком случае (когда какой-то левый CA добавлен в доверенные), например, начинают всякие страшные сообщения юзеру показывать.

Мне чатбот предложил поковырять libsignal для локальных решений.

Можно ли связать несколько серверов вместе как relay? Например, чтобы поднять mesh на OpenWRT и не выходить в Интернет вовсе?

Если вам нужно без интернета и достаточно только чата, можно присмотреться к meshtastic и lora, выйдет дешевле, более энергоэффективно, да и проще в целом чем эти все городы из роутеров на опеврт и серверов жаббер.

Ещё есть швейцарская Threema и deltachat -который работает поверх email.

Как будто "швейцарская" должно добавлять надёжности и доверия. На самом деле это обычный маркетинг. Гораздо важнее какая у них криптография, и какие данные они хранят и собирают.

Вот тут разбор Threema с точки зрения безопасности.
https://soatok.blog/2021/11/05/threema-three-strikes-youre-out/

Как возможный интересный вариант можно рассмотреть: SimpleX Chat.

Следующая статья : Как завести свою голубятню?

Пробовал делать то же самое и обнаружил, что нормальных клиентов под iOS, с поддержкой видеозвонков, пушей итп. попросту нет. Т.е. есть нечто похожее, но по сравнению с привычными телегами и вацапами - просто кривое уныние и пользоваться таким ну вообще не хочется. Может кто подскажет правильный клиент для iOS? (а как дела на Андроидах?)

SiskinIM, я его упоминал в статье. Я им пользуюсь, никаких проблем.

А под Android - Conversations.

Как выбрать вообще сервак под такой сервер? Нагрузку наверное надо считать условно на том же аггрегаторе https://all-vps.com не всегда есть подбор по джабер сервер

Не могу сказать. На десяток не слишком активных пользователей (я использую SQLite в качестве базы) с лихвой хватает дохлого дешевого VPS с 1-м ядром и 768 мегабайтами памяти (при том что там на сервере еще куча всего крутится). Вот тут люди пишут что они гоняют prosody на Raspberry Pi и даже на микро-инстансах с 128 мегабайтами памяти.

А если вам надо на много сотен активных пользователей, то надо делать какие-нибудь бенчмарки, или сразу смотреть в сторону упомянутого тут в комментах ejabberd.

Вот, кстати, тема для следующей статьи. Как поднять prosody на Raspberry, воткнуть в роутер и наслаждаться 146%-й приватностью

В посте написано:

Я попробовал, и мне не понравилось. Клиенты тормозные, через нестабильный интернет-канал все работает просто отвратительно, а сам сервер просто неповоротливый и укладывает не слишком богатый на процессор и память VPS даже всего с парой клиентов.

Как постоянный пользователь матрикса подтверждаю это всё

Так автору просто не надо на дохлых VDS-ках все в модных докерах разворачивать, а по классике устанавливать (кажется это нынче называют "bare metal"). Докер ведь ломает основополагающий принцип разделяемых библиотек - памяти отжирается больше на их виртуализированные версии. У меня на дохлой VDS (2 ядра, 2 гига) спокойно держало около 12 клиентов, причем вместе с сеансом видеоконференцсвязи. Ну и за оверселлом VDS-провайдера следить (технология виртуализации типа OpenVZ?).

около 12 клиентов

А комнат сколько? А сообщений в комнатах сколько? А федерация с другими серверами и комнатами на других серверах была?

Комнат около 5. Сообщений около 50 штук в каждой, не считая приватных чатов (которые тоже комнаты). Федерации не было (намеренно).

Так автору просто не надо на дохлых 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 символов.

Есть некоторые проблемы в использовании этой штуки:

  1. нужно руками копипастить полученные сообщения

  2. (субъективная) общение нужно вести с телефона с его неудобной экранной клавиатурой, а не с десктопа с комфортной физической клавиатурой

Первый недостаток исправлен в Oversec, который вроде данные прям с экрана умеет расшифровывать. Однако, требует рута, и у меня так и не удалось его нормально завести

Однако, требует рута, и у меня так и не удалось его нормально завести

Оно и с рутом под новыми андроидами не работает и не поддерживается уже лет 5...

Поделюсь своим XMPP-решением на полсотни пользователей.

Сервер на CentOS, поставил OpenFire из rpm-пакета. К нему Java (OpenJDK) из репозиториев. Стартанул сервис, сразу поднялась веб-админка на порту 9090/tcp. Добавил через неё пару плагинов, группы, пользователей, SSL-сертификат. Порт 5222/tcp смотрит в локальную сеть, 5223/tcp (SSL) — в интернет.

Клиенты на десктопе Miranda NG, Android — Jasmine IM, iOS — Siskin IM.

Sign up to leave a comment.

Articles