Предыстория: почему я отказался от XMPP

В прошлом посте я разворачивал приватный XMPP-сервер на базе Prosody. Казалось бы — открытый протокол, федеративная сеть, E2EE через OMEMO, поддержка звонков. На бумаге всё отлично.

На практике вышло иначе.

Что не понравилось:

  • Зоопарк клиентов. Каждое приложение реализует протокол по-своему. Gajim умеет одно, Conversations — другое, Dino — третье. Элементарная отправка голосового сообщения превращается в выяснение совместимости. На Windows позвонить так и не удалось вовсе.
  • Сложная настройка. Настроить сервер + правильный TLS + TURN для звонков + добиться, чтобы это всё работало на iOS и Android одновременно — серьёзная задача даже для человека с техническим бэкграундом. Объяснить это родственникам — невозможно.
  • Нет единой платформы. В отличие от Telegram или Signal, пользователь XMPP должен сам разобраться, какой клиент ставить и почему именно его.

Короче говоря: технически интересно, практически бесполезно для задачи «держать связь с семьёй».


Задача: связь с людьми в РФ без VPN

Ситуация простая. Один человек — за рубежом. Другой — в России. VPN нестабилен или заблокирован. Провайдер включил «белые списки» — доступны только разрешённые домены.

Требования к решению:

  • текстовые сообщения и файлы
  • голосовые сообщения
  • сквозное шифрование
  • работа без VPN через разрешённую инфраструктуру
  • простота — чтобы мог настроить любой человек
  • групповые чаты

Неожиданное решение: мессенджер поверх email

Электронная почта существует десятилетиями. Почтовые серверы mail.ru и Яндекс почти наверняка попадают в белые списки — отключить их значит сломать огромную часть привычной интернет-инфраструктуры.

Именно на этом построен Delta Chat — мессенджер, который использует обычную почту как транспорт.

Как это работает

Delta Chat не изобретает новый протокол. Для отправки сообщений используется SMTP, для получения — IMAP. Сообщение формируется локально, шифруется, отправляется как обычное письмо и отображается у получателя не как письмо — а как элемент чата.

Интерфейс при этом выглядит как обычный мессенджер: диалоги, вложения, голосовые сообщения, групповые чаты. Никаких следов «почты» снаружи нет.

Шифрование

Delta Chat использует сквозное шифрование OpenPGP (Autocrypt). Это значит:

  • сообщение шифруется на устройстве отправителя
  • расшифровывается только на устройстве получателя
  • почтовый сервер (включая mail.ru и Яндекс) видит только зашифрованный набор байтов — содержимое переписки ему недоступно

Обмен ключами происходит автоматически — пользователь ничего не настраивает вручную.

Почему это работает при белых списках

При «белых списках» в РФ:

  • произвольные серверы недоступны
  • VPN режутся или деградируют
  • нестандартные протоколы блокируются DPI

Но SMTP/IMAP через mail.ru или Яндекс — это стандартный разрешённый трафик. Delta Chat работает именно поверх него, без каких-либо нестандартных соединений.


Ограничения, которые важно понимать

Это не серебряная пуля. Честный список ограничений:

  • Не анонимно. Email-адреса участников известны обеим сторонам и почтовому провайдеру.
  • Метаданные доступны провайдеру. Кто, кому и когда писал — видно на уровне сервера, даже при E2EE.
  • Антиспам. Высокая частота коротких сообщений выглядит подозрительно для антиспам-систем. Яндекс особенно строг — часть сообщений может попасть в спам или вообще не дойти. Mail.ru в тестах работал значительно стабильнее.
  • Голосовые звонки используют WebRTC (P2P). При белых списках они с высокой вероятностью не будут работать или будут нестабильны. Текстовые сообщения и файлы — работают.
  • E2EE только между пользователями Delta Chat. Если собеседник использует обычный почтовый клиент — шифрования не будет.

Вывод: Delta Chat — надёжный резервный канал связи, а не полноценная замена популярным мессенджерам по качеству реального времени.


Быстрая настройка через mail.ru

Это самый простой путь — без технических знаний, за 5 минут. Для яндекса принцип аналогичный.

1. Скачать Delta Chat

Клиенты доступны для iOS, Android, Windows, macOS, Linux:
👉 delta.chat/ru/download

2. Создать ящик на mail.ru

Если нет — зарегистрировать на mail.ru. Желательно сделать это заранее с обычного браузера.

3. Создать пароль приложения

Обычный пароль от почты Delta Chat не примет — нужен специальный пароль для внешних приложений:

  1. Откройте почту на mail.ru → правый верхний угол → иконка профиля
  2. Перейдите в БезопасностьПароли для внешних приложений
  3. Нажмите Создать пароль, задайте название (например: DeltaChat), выберите полный доступ к почте
  4. Подтвердите действие (пароль или SMS)
  5. Скопируйте и сохраните сгенерированный пароль — он показывается только один раз

4. Настроить Delta Chat

  1. Откройте Delta Chat → Создать новый профиль
  2. Выберите Использовать другой серверИспользовать электронную почту как релей
  3. Введите email и пароль приложения
  4. Приложение настроится автоматически

Совет по антиспаму

Если используете Яндекс или mail.ru — зайдите в веб-интерфейс почты и пометьте первые входящие сообщения от Delta Chat как «Не спам». Это обучит фильтр. Также рекомендуется отключить подтверждения прочтения в настройках Delta Chat — меньше автоматических исходящих писем, меньше шансов попасть под антиспам.


Для энтузиастов: свой chatmail-сервер

Если вы хотите больше контроля — звонки, уведомления на iPhone, увеличенные лимиты на файлы, нулевое хранение метаданных — можно развернуть собственный chatmail relay.

Chatmail — это специализированный почтовый сервер, оптимизированный под Delta Chat. Он не хранит логи, не требует регистрации с личными данными, поддерживает push-уведомления для iOS и Android и позволяет передавать файлы размером до 300 МБ.

Что потребуется

  • VPS с Debian 12
  • Минимум 1 CPU, 512 МБ RAM, 10 ГБ диска (достаточно для тысяч адресов)
  • Домен с возможностью управления DNS
  • Локальный Linux-компьютер для запуска скриптов деплоя (нужны python3-dev, python3.12-venv, gcc)

Открытые порты на сервере

ПортНазначение
22SSH (администрирование)
25SMTP (федерация между серверами)
80 / 443HTTPS (веб, Let’s Encrypt)
143 / 9993IMAP
465 / 587SMTP Submission (отправка клиентами)
3478STUN/TURN (P2P-звонки)

Деплой шаг за шагом

Шаг 1. Предварительные DNS-записи

Создайте у вашего DNS-провайдера:

chat.example.org.       3600 IN A     <IP-адрес сервера>
chat.example.org.       3600 IN AAAA  <IPv6-адрес, если есть>
www.chat.example.org.   3600 IN CNAME chat.example.org.
mta-sts.chat.example.org. 3600 IN CNAME chat.example.org.

Шаг 2. SSH-ключи

Скрипты деплоя не поддерживают ввод пароля — нужен SSH-ключ:

ssh-keygen -t ed25519 -f ~/.ssh/chatmail
ssh-copy-id -i ~/.ssh/chatmail.pub root@chat.example.org
eval $(ssh-agent)
ssh-add ~/.ssh/chatmail

Временно в /etc/ssh/sshd_config на сервере: PermitRootLogin yes — только для первоначальной настройки.

Шаг 3. Клонирование и инициализация

git clone https://github.com/chatmail/relay
cd relay
scripts/initenv.sh
scripts/cmdeploy init chat.example.org

Будет создан файл chatmail.ini.

Шаг 4. Настройка chatmail.ini

Ключевые параметры, которые стоит поменять:

[params]
mail_domain = chat.example.org

# Максимальный размер сообщения (по умолчанию ~30 МБ)
max_message_size = 314572800  # 300 МБ

# Хранение сообщений (дни)
delete_mails_after = 20
delete_large_after = 7        # файлы >200 КБ удаляются быстрее

# Неактивные пользователи удаляются через:
delete_inactive_users_after = 90

# Контакт для политики конфиденциальности (обязательно заполнить)
privacy_postal = Ваш адрес
privacy_mail = admin@chat.example.org

# Мониторинг через Prometheus/Grafana (опционально)
# mtail_address = 127.0.0.1

Пароли не задаются вручную. При регистрации через QR-код пароль генерируется автоматически. Значение password_min_length влияет на длину автогенерированной строки — менять не обязательно.

Шаг 5. Запуск деплоя

scripts/cmdeploy run

Скрипт установит Postfix, Dovecot, настроит TLS через Let’s Encrypt и логику Chatmail. Если каких-то DNS-записей не хватает — скрипт сообщит об этом.

Шаг 6. Финальные DNS-записи

scripts/cmdeploy dns

Скрипт выведет список из 6–7 записей (MX, DKIM, SPF, SRV). Все их нужно добавить в DNS — это критично для доставляемости и прохождения DMARC-проверок.

Шаг 7. Проверка

scripts/cmdeploy status   # статус сервисов и DNS
scripts/cmdeploy test     # тест отправки/получения
scripts/cmdeploy bench    # нагрузочный тест (опционально)

После нагрузочного теста не забудьте удалить тестовых пользователей: временно установите delete_inactive_users_after = 0, выполните scripts/cmdeploy run, затем верните значение 90 и снова запустите деплой.

Шаг 8. Закрыть SSH

# На сервере в /etc/ssh/sshd_config:
PermitRootLogin no
# systemctl restart ssh

Ограничить регистрацию (для приватного использования)

Если не хотите, чтобы посторонние регистрировались:

ssh root@chat.example.org
touch /etc/chatmail-nocreate

Пока этот файл существует — регистрация новых адресов заблокирована.

Как подключиться к своему серверу

Откройте браузер на устройстве с Delta Chat и перейдите на https://chat.example.org — там будет QR-код. Отсканируйте его в приложении и аккаунт создастся автоматически.

Кастомизация приветственной страницы

После деплоя на https://chat.example.org появляется стандартная страница с QR-кодом и кратким описанием. Её можно переделать под себя — поменять текст, добавить инструкции для родственников, убрать лишнее.

Страницы генерируются из Markdown-файлов в директории www/src/ локальной копии репозитория. Основные файлы:

ФайлСодержимое
www/src/index.mdГлавная страница с QR-кодом
www/src/info.mdСтраница «О сервере»
www/src/policy.mdПолитика конфиденциальности

Например, чтобы добавить простую инструкцию прямо на главную страницу — откройте www/src/index.md и отредактируйте текст под QR-кодом:

## Как подключиться

1. Установите [Delta Chat](https://get.delta.chat) на телефон
2. Откройте приложение → нажмите «Создать профиль»
3. Отсканируйте QR-код выше
4. Готово — можно писать

По вопросам: admin@chat.example.org

Для локального превью с автообновлением в браузере запустите:

scripts/cmdeploy webdev

Когда результат устраивает — загрузить на сервер:

scripts/cmdeploy run

Эта команда синхронизирует локальные файлы www/src/ с сервером, пересобирает HTML и перезапускает Nginx. Достаточно запускать её после каждого изменения страниц.

Если хотите вести веб-страницы полностью отдельно от репозитория — укажите www_folder = /путь/к/своей/папке в chatmail.ini. Можно также отключить встроенные страницы совсем: www_folder = disabled.

Включить звонки (опционально)

По умолчанию звонки отключены. Чтобы включить:

  • Меню (три точки) → Дополнительные параметрыDebug → активировать Calls

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


Итог

Delta Chat — нетривиальное, но рабочее решение. Оно использует инфраструктуру, которую сложно просто взять и заблокировать, обеспечивает сквозное шифрование и не требует от пользователя почти никаких технических знаний.

Для связи с родственниками в РФ через mail.ru — это один из наиболее реалистичных вариантов на сегодняшний день.


Рассылка

Получайте уведомления о новых постах и не только. Без спама.