Matrix

В данный момент мы все общаемся в мессенджерах. Самые популярные из них - WhatsApp, Telegram. Viber, Slack, Discord, VK Messenger, Facebook Messenger.

Их всех объединяет то, что они проприетарные. Конечно же у проприетарных продуктов есть плюсы - большое количество аудитории из-за бюджетов на рекламу, да и сами продукты хорошо сделаны с точки зрения UI/UX. Пользоваться ими действительно приятно.

Но минусы проприетарных продуктов гораздо более существенны.

Ваши данные не ваши

Самый основной минус в том, что вы не контролируете ваши данные. Во-первых ваш аккаунт может быть удален в одностороннем порядке. И вы ничего не сможете с этим сделать.

Кроме того, будьте уверены, что ваша переписка в мессенджере не только ваша. При желании люди смогут получить доступ к вашим перепискам.

Если бы это было не так, то мессенджеры внедряли бы сквозное end-to-end шифрование. Но мессенджеры это не делают. Потому что ваши данные это довольно ценный ресурс. Зачем от него отказываться?

Реклама

Так или иначе во всех этих продуктах появится реклама.

Даже если ее нет сейчас, то она может появиться завтра и появится она самым ужасным способом. Телеграм заявлял, что он бесплатный и в нем никогда не будет рекламы.

Поздравляю вас, реклама в нем появилась.

Ну а если в продукте нет рекламы, то подумайте сами как зарабатывает данный продукт.

Цензура

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

Например, в Facebook или Twitter сейчас самая сильная цензура. И блокируют там людей просто за высказывание мнения.

Недавно, в фейсбуке я написал пост про один сериал, который я смотрел. Он назыается “Уборщица” (MAID). Я высказал свое мнение о том, что в сериале все персонажи женского пола это чудесные и прекрасные люди, а все персонажи мужского пола это безумные насильники. После чего мой пост удалила администрация, сказал что это хармфул контент.

Сейчас, если ваш пост не совпадает с современной феминистической повесткой, то высказываться вы не можете.

Поэтому я считаю, что мессенджеры должны быть децентрализованными. Вот так же как деньги. Например. Сейчас у нас есть биткоин и мы получили честные деньги. Точно так же и мессенджер. У нас должен быть честный мессенджер. Мессенджер в котором нет централизованной власти которая бы могла заблокировать человека за его взгляды.

Мессенджер в котором все должно быть зашифровано. В котором не собирают твои данные. И не показывают тебе рекламу в таком ужасном виде, как это делает Telegram.

Open Source

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

Вообще если вы посмотрите на Open Source то поймете сколько невероятно чудесных инструментов и возможностей он дал нам. Мы им пользуемся, делаем на его основе кучу других полезных вещей и это все только благодаря ему.

Email. Сам имейл никому не принадлежит. Вы можете взять свой сервер и поднять на нем свой почтовый сервер и отправлять почту кому угодно. Потому что это открытый код. Потому что код у протокола и у сервера открыт. Вас не могут заблокировать в Email. Да, вас, конечно, могут заблокировать на каком-либо выбранном сервере. Но вы всегда можете уйти на другой или развернуть все на своем сервере.

Apache, Nginx. Тоже с открытым кодом. Благодаря им вы можете поднять любой сервер за несколько минут.

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

Линукс. Операционная система которая работает на огромном количестве компьютеров. 90 процентов серверов работают на нем. 100 процентов всех мелких устройств для умного дома работают на нем.

Nextcloud. Сервер для хранения и расшаривания файлов, который тоже с открытым исходным кодом. В данный момент нет никакого смысла использовать дропбокс и делиться с ним своими личными данными.

УЖЕ ЕСТЬ

Некоторые могут сказать, что у нас уже есть инструменты для этого. Которые с открытым исходным кодом и которые позволяют общаться.

IRC, XMPP, Signal, Telegram

IRC?

У меня очень теплые чувства к IRC так как в те времена когда я учился в университете я очень много и часто его использовал. Все студенты в те времена переписывались там.

Но тем не менее у этого протокола есть большое количество недостатков.

  • только текст
  • нет истории
  • нет поддержки нескольких девайсов
  • нет поддержки присутствия
  • нет открытой федерации
  • нет стандартного АПИ
  • нет встроенного сквозного шифрования
  • сплиты из-за которых возникают много проблем и которые даже влияют на безопасность

XMPP?

Если вы такой же старый как и я то вы помните Jabber. Тоже в свое время он был довольно интересным инструментом. Но при этом тоже имеет большое количество недостатков.

  • Не полная поддержка нескольких устройств
  • Протокол не очень хорош для веба, то есть для работы из браузера
  • Да и вообще сильно перегружен

Signal?

Потому что Signal не поддерживает децентрализацию.

MATRIX

Так вот наиболее интересным сейчас выглядит Matrix - свободный протокол для децентрализованного общения в реальном времени. Он может быть использовал для чатов, и для аудио- и видеосвязи с помощью WebRTC. Matrix определяет стандарт и предоставляет open-source реализации серверов, клиентов.

Matrix дает людям возможность общаться и синхронизировать данные по всей сети. При этом иметь контроль над своими данными.

При этом для пользователя все выглядит просто. Можно общаться абсолютно со всеми не беспокоясь о том какие приложения ты используешь. Можно использовать свой сервер, а можно зарегистрироваться на уже существующем.

При этом матрикс это федеративная сеть. Это значит что каждый сервер может общаться с другими между собой. Например так же как сервер GMAIL.COM взаимодействует с сервером MAIL.RU когда вы отправляете имейл.

Matrix обеспечивает открытую федерацию - это означает, что любой в интернете может присоединиться к экосистеме Matrix, развернув свой сервер.

Например, в IRC вы можете подключиться к одной сети и общаться в ней. И подключиться еще и к другой сети и общаться в ней. Но фактически это разные сети. И пользователи одной сети не видят пользователей из другой.

В матриксе сервера могут коннектиться друг к другу.

Room-schema.png

В матриксе есть каналы. Вы можете присоединиться к моему - #johenews:matrix.johenews.com

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

И каждый сервер сохранит это сообщение в своей локальной базе данных.

  • Каждый хоум-сервер в комнате хранит содержимое её истории.

  • Если по любой причине какой-то хоум-сервер отключается, даже если это сервер, адрес которого прописан в названии комнаты, все остальные хоум-серверы в комнате могут продолжать общаться друг с другом.

Как зарегистрироваться и начать общаться?

Наиболее быстрый способ - это установить клиент с https://matrix.org/blog/try-matrix-now и зарегистрироваться. Обратите внимание, что для клиента можно указать любой сервер как домашний - не обязательно использовать matrix.org, хотя, как и в первый день, matrix.org является единственным общедоступным сервером.

Что я могу с этим делать?

Типичный клиент предоставляет простой чат интерфейс в Matrix, позволяя пользователю взаимодействовать с другими пользователями и комнатами в Matrix-федерации. Поддерживаются обмен текстовыми сообщениями, картинками, файлами, подключение различных ботов и мостов. Также работают голосовые и видео-звонки (1:1 и групповые).

Как мне подключить свой сервер к публичной сети Matrix?

Зайдите на http://github.com/matrix-org/synapseдля деталей.

Поднять свой сервер

Теперь про то, как поднять свой сервер.

Для начала сделаем дроплет на DigitalOcean. Я выбрал самый дешевый. После этого подключаемся к нему по SSH

ssh root@ip

И обновляемся

sudo apt update
sudo apt upgrade

Кроме того нужно купить домен. Для домена привязываем DNS DigitalOcean и после этого в самом DigitalOcean идем во вкладку Network и добавляем домен. После добавления выбираем к какому дроплету он будет привязан.

После этого устанавливаем зависимости

sudo apt-get install build-essential python3-dev libffi-dev \
  python3-pip python-setuptools sqlite3 \
  libssl-dev python3-virtualenv libjpeg-dev libxslt1-dev

И устанавливаем synapse

mkdir -p ~/synapse
virtualenv -p python3 ~/synapse/env
source ~/synapse/env/bin/activate

После этого

pip install --upgrade pip virtualenv six packaging appdirs

Потом

pip install --upgrade setuptools
pip install matrix-synapse

Теперь нам нужно его сконфигурировать. Для этого выполняем Только вместо matrix.example.com вводите свой адрес. Например, мой - matrix.johenews.com

source ~/synapse/env/bin/activate
pip install -U matrix-synapse
cd ~/synapse
python -m synapse.app.homeserver \
  --server-name matrix.johenews.com \
  --config-path homeserver.yaml \
  --generate-config \
  --report-stats=yes

Теперь нам нужно включить TLS

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Теперь нам нужно сконфигурировать Certbot, для этого сначала установим nginx

sudo apt-get install nginx

И теперь выполним команду

sudo certbot certonly --nginx -d matrix.example.com

Только вместо matrix.example.com вводите свой адрес. Например, мой - matrix.johenews.com

Теперь нужно сконфигурировать прокси. Для этого нужно открыть файл

vim ~/synapse/homeserver.yaml

Найти строку с айпи

  - port: 8008
    tls: false
    bind_addresses: ['127.0.0.1']
    type: http
    x_forwarded: true

И оставить там только 120.0.0.1

После этого сохраняем файл.

Теперь нужно создать новый файл конфига прокси.

sudo vim /etc/nginx/conf.d/matrix.conf

Со следующим содержимым:

server {
    listen 80;
	listen [::]:80;
    server_name matrix.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name matrix.example.com;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

server {
    listen 8448 ssl default_server;
    listen [::]:8448 ssl default_server;
    server_name matrix.example.com;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Только вместо matrix.example.com вводите свой адрес. Например, мой - matrix.johenews.com

После этого стартуем nginx

sudo systemctl restart nginx
sudo systemctl enable nginx

Теперь нам нужно сделать админского пользователя

cd ~/synapse
source env/bin/activate
synctl start

и после этого регистрируем нового пользователя

register_new_matrix_user -c homeserver.yaml http://localhost:8008

После этого у вас спросят логин и пароль

New user localpart [root]: username
Password: password
Confirm password: password
Make admin [no]: yes|no
Sending registration request...
Success.

Если все прошло хорошо то вы можете открыть в браузере свою ссылку

https://matrix.example.com

И на ней увидеть, что сервер успешно запустился и работает

PROBLEMS

Matrix имеет и проблемы

Сообщество людей сделало ресерч и нашло большое некоторые проблемы.

Факт в том, что матрикс позиционируется как открытый, децентрализованный и безопасный протокол. Поэтому у сообщества довольно высокие требования

И многие люди очень пристально смотрели на то как это все реализовано и нашли некоторые проблемы

В основном проблемы связаны с тем что некоторые метаданные отправляются на сервера матрикс

https://hackea.org/notas/matrix.html#leak

https://gist.github.com/maxidorius/5736fd09c9194b7a6dc03b6b8d7220d0

Но при этом ребята из матрикса это откомментировали

https://matrix.org/~matthew/Response_to_-_Notes_on_privacy_and_data_collection_of_Matrix.pdf

Я до сих пор пытаюсь разобраться для себя и найти правду

Если вдруг вы разбираетесь в этом и уже делали какой-то ресерч то пишите. Интересно будет почитать ваше мнение

https://gitlab.com/libremonde-org/papers/research/privacy-matrix.org/-/blob/master/part1/README.md

https://gitlab.com/libremonde-org/papers/research/privacy-matrix.org/-/blob/master/part2/README.md

Contents

comments powered by Disqus