MTProxy в Telegram. Полный обзор протокола, секретов и Fake TLS

1036
MTProxy в Telegram. Полный обзор протокола, секретов и Fake TLS

MTProxy - специализированный прокси для Telegram, а не универсальный VPN и не обычный SOCKS5. Клиент Telegram подключается к промежуточному серверу, заворачивает трафик в MTProto, обфусцирует соединение и уже через прокси идет к дата-центрам Telegram. Провайдер видит соединение с IP прокси, но не видит прямой поход к Telegram. Оператор прокси видит IP клиента и факт использования узла, но не должен видеть содержимое сообщений, потому что полезная нагрузка остается зашифрованной MTProto.

Главная польза MTProxy видна там, где Telegram режут по IP-адресам, сигнатурам протокола или простым правилам DPI. MTProxy не делает анонимным весь интернет, не защищает браузер, не прячет DNS-запросы других приложений и не превращает обычные облачные чаты Telegram в end-to-end encrypted переписку. Протокол решает более узкую задачу - дать Telegram дополнительный маршрут и сделать сетевой отпечаток менее очевидным.

Как устроен MTProxy на уровне соединения

В документации Telegram MTProxy описан как узел, который маскирует IP Telegram и обфусцирует пользовательский трафик. Пользователь может подключиться к чужому узлу или поднять собственный. В приложении Telegram для подключения нужны три параметра - сервер, порт и secret. SOCKS5 может обходиться адресом, портом, логином и паролем, а MTProto proxy всегда опирается на secret, потому что secret участвует в распознавании и обфускации потока.

Сетевой путь выглядит так.

Telegram client
   -> TCP-соединение к MTProxy
   -> обфусцированный MTProto transport
   -> MTProxy пересылает поток к Telegram DC
   -> Telegram отвечает тем же маршрутом

MTProxy не работает как HTTP-прокси. Браузер, curl, пакетный менеджер или игра не смогут отправить через него произвольный трафик. Клиент Telegram знает формат MTProto, умеет собрать нужный транспортный слой и использует прокси как Telegram-aware relay. Такая узкая специализация дает меньше универсальности, зато снижает поверхность ошибок в клиентской настройке.

MTProto сам по себе состоит из нескольких уровней. Высокий уровень описывает API-вызовы и бинарную сериализацию, криптографический уровень шифрует сообщения, транспортный уровень переносит бинарные сообщения поверх TCP, WebSocket, HTTP-подобных вариантов и других носителей. В описании транспортов MTProto Telegram перечисляет abridged, intermediate, padded intermediate и full. Для обхода сетевых фильтров особенно важны padded intermediate и transport obfuscation, потому что простая длина пакетов тоже может стать сигнатурой.

Прокси не расшифровывает чат. MTProxy принимает входящий поток от клиента и передает Telegram-зашифрованные данные дальше. Но прокси остается сетевым посредником. Недобросовестный оператор может логировать IP-адреса, время подключения, объемы трафика, версию поведения клиента на уровне таймингов и стабильность сессий. Для обычного пользователя риск может быть приемлемым, для журналиста, активиста, администратора канала или человека под точечной слежкой одного MTProxy мало. Даже Telegram в своем обзоре MTProxy рекомендует людям с риском продвинутого наблюдения накладывать доверенный VPN поверх защиты MTProxy.

Материал предназначен для легального и ответственного использования. Соблюдайте законы своей страны, особенно России. Не применяйте инструкции для несанкционированного доступа, слежки, взлома, нарушения правил сервисов или незаконного обхода блокировок.

Secret, random padding и Fake TLS

Secret в MTProxy часто называют паролем, но технически сравнение хромает. Secret не просто проверяет доступ к прокси. Клиент использует secret при построении обфусцированного соединения, а сервер по secret понимает, что перед ним валидный Telegram-клиент, а не случайный сканер порта.

Классический secret - 16 байт в hex, то есть 32 шестнадцатеричных символа.

935ddceb2f6bbbb78363b224099f75c8

Ссылка для добавления прокси обычно выглядит так.

tg://proxy?server=203.0.113.10&port=443&secret=935ddceb2f6bbbb78363b224099f75c8

У prefix dd другая роль. Такой secret включает режим random padding на стороне клиента. Telegram прямо описывает random padding в README официального MTProxy - некоторые провайдеры распознавали прокси по размерам пакетов, поэтому случайная набивка усложняет fingerprinting. На практике dd превращает обычный 16-байтный secret в padded-вариант.

обычный secret
 935ddceb2f6bbbb78363b224099f75c8
 
 secret с random padding
 dd935ddceb2f6bbbb78363b224099f75c8

Fake TLS сложнее. В популярной терминологии secret с prefix ee включает режим, где внешний рисунок соединения имитирует TLS-трафик на 443 порту. Часто рядом указывают домен для SNI-маскировки. Но здесь нельзя делать слишком сильное утверждение. Основная официальная страница Telegram про MTProxy не расписывает Fake TLS как отдельный нормативный стандарт, а детали зависят от клиента и серверной реализации. Telegram Desktop, мобильные клиенты и сторонние движки могут по-разному поддерживать длинные secret с доменным хвостом.

Рабочая схема Fake TLS обычно выглядит так.

ee + 16 байт ключа в hex + домен в hex
 
 пример структуры
 ee935ddceb2f6bbbb78363b224099f75c8 + 6769746875622e636f6d

Hex-хвост 6769746875622e636f6d соответствует строке github.com. Фильтрующее оборудование видит трафик, похожий на TLS-соединение к привычному домену, но внутреннее поведение все равно зависит от реализации прокси. Нельзя обещать «полную неотличимость от HTTPS». DPI смотрит не только на первые байты, но и на тайминги, размеры пакетов, поведение SNI, ALPN, отсутствие полноценной TLS-семантики, повторяемость адресов и репутацию IP.

Вариант Что делает Где полезен Слабое место
обычный secret Дает клиенту доступ к MTProxy Простая настройка в мягко фильтруемых сетях Легче ловится по размерам и паттернам
dd + secret Включает random padding Помогает против простого fingerprinting Не спасает от блокировки IP и продвинутой корреляции
ee + secret Маскирует поток под TLS-подобное соединение Полезен при DPI по сигнатурам Telegram Совместимость зависит от клиента и реализации

Как поднять свой узел и проверить работу

Самый быстрый способ - официальный Docker-образ Telegram. На странице образа в Docker Hub приведен минимальный запуск, где контейнер слушает 443 порт, хранит secret в volume и печатает готовые ссылки в лог. Для домашнего эксперимента достаточно VPS с публичным IPv4, открытым TCP-портом и синхронизацией времени.

docker run -d 
   --name mtproto-proxy 
   --restart=always 
   -p 443:443 
   -v proxy-config:/data 
   telegrammessenger/proxy:latest

После запуска смотрим лог.

docker logs mtproto-proxy

В логе появится secret и ссылка вида tg://proxy?server=.... Если сервер находится за NAT или внешний адрес определился неверно, ссылку придется поправить вручную. Документация Docker-образа также предупреждает, что прокси получает список адресов Telegram core servers при старте, поэтому контейнер желательно перезапускать примерно раз в день или следить за обновлением конфигурации другим способом.

Для фиксированного secret можно передать переменную окружения.

docker run -d 
   --name mtproto-proxy 
   --restart=always 
   -p 443:443 
   -v proxy-config:/data 
   -e SECRET=935ddceb2f6bbbb78363b224099f75c8 
   telegrammessenger/proxy:latest

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

docker run -d 
   --name mtproto-proxy 
   --restart=always 
   -p 443:443 
   -v proxy-config:/data 
   -e SECRET=935ddceb2f6bbbb78363b224099f75c8,2084c7e58d8213296a3206da70356c81 
   telegrammessenger/proxy:latest

Минимальная проверка на сервере.

docker ps
 docker logs --tail=50 mtproto-proxy
 ss -lntp | grep 443

Если клиент висит на «Connecting», чаще всего виноваты firewall, неверный port mapping Docker, закрытый порт у провайдера VPS, блокировка IP прокси или ошибка в ссылке. Если Telegram подключился к прокси, но завис на «Updating», проверьте исходящие соединения с сервера к Telegram, время системы, NAT и актуальность конфигурации Telegram core servers.

timedatectl
 docker exec mtproto-proxy sh -c 'date'
 docker exec mtproto-proxy curl -s http://localhost:2398/stats | head

Статистика доступна локально. В ней полезны поля ready_targets и active_targets. Если active_targets меньше ready_targets или равно нулю, прокси принимает клиентов, но сам плохо достает Telegram. Тогда проблема не в приложении пользователя, а в маршруте от VPS к Telegram.

Границы безопасности, мифы и типичные ошибки

Первый миф - «MTProxy анонимизирует Telegram». Нет. MTProxy убирает прямое соединение пользователя с IP Telegram, но сам прокси видит IP пользователя. Telegram видит входящий трафик от прокси, а также продолжает знать аккаунт, устройство, сессию и серверные метаданные в рамках своей архитектуры. Для анонимности нужны другая модель угроз, отдельный номер, аккуратная операционная безопасность, доверенная сеть и понимание, какие метаданные остаются.

Второй миф - «прокси читает сообщения». Для обычного MTProxy утверждение неверно. Прокси не получает открытый текст чатов, потому что пересылает уже зашифрованный MTProto-поток. Но фраза «прокси безопасен» тоже груба. Оператор может собирать сетевые метаданные, ломать доступность, подсовывать неработающие ссылки, рекламировать канал через promoted channel, а при плохой конфигурации еще и раскрывать статистику наружу.

Третий миф - «Fake TLS не блокируется». Блокируется. Фильтры могут резать IP-адреса VPS-провайдеров, подсети дата-центров, подозрительные домены в SNI, поведение без валидного полного TLS-диалога, повторяющиеся fingerprints и массово распространяемые public proxy. Чем популярнее открытый прокси, тем быстрее адрес попадает в списки. Частный MTProxy для небольшой группы живет дольше публичного узла из канала на десятки тысяч подписчиков.

Четвертая ошибка - использовать MTProxy вместо VPN для всей системы. MTProxy защищает только Telegram. Браузер продолжит ходить напрямую, DNS останется прежним, другие мессенджеры не изменят маршрут. Если нужна защита всего трафика, нужен VPN, системный прокси, Tor или другой инструмент под конкретную задачу. MTProxy хорош именно как встроенный механизм Telegram, который не требует отдельного приложения на телефоне.

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

Шестая ошибка - открывать служебную статистику наружу. У официального контейнера stats endpoint должен быть доступен только локально. Если администратор публикует метрики через reverse proxy без авторизации, посторонний человек сможет увидеть нагрузку и косвенные признаки использования. Для личного узла достаточно локального доступа через SSH.

Седьмая ошибка - ждать от MTProxy end-to-end encryption в обычных чатах. MTProxy отвечает за транспорт и обфускацию. Обычные облачные чаты Telegram используют клиент-серверное шифрование и хранятся в инфраструктуре Telegram. End-to-end encryption в Telegram относится к Secret Chats и отдельным сценариям, а не ко всем перепискам автоматически. MTProxy здесь ничего не меняет.

При выборе режима работает простой принцип. Для личного стабильного доступа начните с собственного узла на 443 порту и secret с dd. Если сеть активно режет Telegram по сигнатурам, проверьте реализацию с Fake TLS, но отдельно тестируйте совместимость на Android, iOS, Telegram Desktop и macOS. Не смешивайте в одной инструкции обещания для всех клиентов, потому что поддержка длинных secret и SNI-логика менялись и могут отличаться.

MTProxy лучше VPN для Telegram?

Для Telegram в заблокированной или фильтруемой сети MTProxy часто удобнее VPN, потому что встроен в клиент и не трогает остальной трафик. Для защиты всей системы VPN подходит лучше. Для высокой модели угроз иногда используют оба инструмента.

Может ли оператор MTProxy читать переписку?

Оператор MTProxy не должен видеть открытый текст сообщений, потому что прокси пересылает зашифрованный MTProto-трафик. Но оператор может видеть IP пользователя, время подключения, объемы и другие сетевые метаданные.

Зачем нужен prefix dd в secret?

Prefix dd включает random padding у клиента. Случайная набивка меняет размеры пакетов и усложняет распознавание MTProxy по простым сетевым паттернам.

Что такое Fake TLS в MTProxy?

Fake TLS - режим маскировки, где соединение выглядит похожим на TLS-трафик. На практике используется secret с prefix ee, иногда с доменным хвостом для SNI. Совместимость зависит от клиента Telegram и серверной реализации.

Почему MTProxy подключается, но Telegram висит на Updating?

Клиент может успешно достучаться до прокси, но сам прокси не достает Telegram core servers. Проверьте исходящие соединения VPS, системное время, NAT, firewall и актуальность конфигурации Telegram-серверов.

Вывод простой. MTProxy стоит рассматривать как точечный транспортный инструмент для Telegram, а не как магическую защиту приватности. Собственный узел с закрытой аудиторией, 443 портом, нормальным firewall, синхронизацией времени и secret с random padding обычно дает лучший баланс простоты и живучести. Fake TLS полезен в более жестких сетях, но требует тестов на конкретных клиентах и не гарантирует бессмертие прокси. Главные риски лежат не в тексте чатов, а в метаданных, доверии к оператору, публичности адреса и переоценке возможностей протокола.

Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
MAX
MAX
[ confession.log ]
Не спрашивайте, почему
мы в MAX
Мы и сами не гордимся. Но раз уж вы здесь —
$ whoami
securitylab
$ reason?
unknown
Смотреть →
реклама

Техноретроградка

Технологии без шума вентиляторов и сухих спецификаций.