MTProxy — это эталонная реализация протокола MTProto, созданного командой Павла Дурова для обхода блокировки мессенджера Telegram. MTProxy представляет из себя специальное приложение — промежуточный сервер, который выполняет роль посредника, обрабатывая соединения между устройством пользователя и серверами Telegram.
Обратите внимание, что использование прокси-серверов может нарушать локальное законодательство Вашей страны. Рекомендуем уточнить данный момент до внедрения решения. Операции, описанные в данной статье, выполнялись на тестовом стенде, который впоследствии был удален.
Необходимо отметить некоторые особенности MTProxy по сравнению с различными реализациями серверов, использующих протокол SOCKS5, такими как Dante:
- Вместо связки логин/пароль для подключения используется парольная комбинация символов, т.н. «секрет»;
- Трафик не имеет отличий по сравнению с TLS/SSL;
- Пароль серверу при подключении не передается;
- MTProxy может использоваться для подключений только клиентом Telegram. Другие приложения не могут устанавливать соединения через MTProxy;
- В настройках можно указать канал Telegram, на который пользователи будут автоматически подписаны при подключении к серверу.
Следует отметить и определенные недостатки протокола SOCKS5 по сравнению с MTProto:
- При подключении к SOCKS5 логин и пароль передаются в открытом виде;
- Эталонная реализация протокола SOCKS5 не имеет никаких средств шифрования;
- Если прокси SOCKS5 настроен без аутентификации, при сканировании ботами он может попасть в глобальные списки запрещенных узлов. Если таким сервером воспользуются злоумышленники для совершения преступных деяний, это может являться основанием для возбуждения уголовного дела.
Рассмотрим установку MTProxy на примере Ubuntu 18.10:
- Установим пакеты git, curl, инструменты для сборки пакетов, а также openssl и zlib:
apt install git curl build-essential libssl-dev zlib1g-dev
- Клонируем репозиторий с GitHub и собираем приложение:
cd ~ git clone https://github.com/TelegramMessenger/MTProxy.git cd MTProxy/ make
- Разместим файлы в системных директориях, а также получим секретный ключ и конфигурацию, необходимые для подключения MTProxy к серверам Telegram:
cp objs/bin/mtproto-proxy /usr/bin/ chmod 777 /usr/bin/mtproto-proxy cd /etc mkdir mtproto-proxy cd mtproto-proxy //Получить секретный файл (периодически может требовать обновления) curl -s https://core.telegram.org/getProxySecret -o proxy-secret //Получить текущую конфигурацию (периодически требует обновления) curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
- Создадим секретный код, который будут использовать клиенты для подключения к серверу, и запишем его:
head -c 16 /dev/urandom | xxd -ps
- Создадим конфигурационный файл systemd, который будет хранить настройки службы MTProto:
sudo vim /etc/systemd/system/mtproto-proxy.service
- В файл запишем настройки службы:
[Unit] Description=MTProxy After=network.target [Service] ExecStart=/usr/bin/mtproto-proxy -u nobody -p 6419 -H 1194 -S <secret> --aes-pwd /etc/mtproto-proxy/proxy-secret /etc/mtproto-proxy/proxy-multi.conf -M 1 Restart=on-failure [Install] WantedBy=multi-user.target
Рассмотрим параметры, которые записаны в файле настройки сервиса MTProto:
- 1194 — порт, который будут использовать клиенты для подключения к серверу;
- 6149 — внутренний порт для подключения статистики доступный только через loopback (к примеру, с помощью команды wget localhost:6419/stats);
- <secret> — секретный код, сгенерированный на 4 шаге данного руководства;
- 1 — количество процессов-обработчиков;
- Если сервер расположен за NAT, требуется добавить параметр
-nat-info <arg> <Внутренний адрес>:<Внешний адрес>
В этом случае потребуется корректно настроить проброс портов. Прочие аргументы можно узнать с помощью команды
mtproto-proxy -h
.
После выполнения всех действий перезагружаем юниты systemd:
systemctl daemon-reload
Затем запускаем службу MTProxy и добавляем ее в автозагрузку:
systemctl restart mtproto-proxy
systemctl enable mtproto-proxy
Всё готово! Теперь, чтобы подключиться к серверу, клиент (Telegram) должен перейти по следующей ссылке:
tg://proxy?server=<IP сервера>&port=<ПОРТ>&secret=<СЕКРЕТ>
В связи с тем, что современные комплексы пассивного перехвата трафика DPI (Deep Packet Inspection), которые установлены у многих провайдеров, могут перехватывать трафик и блокировать соединение по размеру пакета, рекомендуется включить функцию наполнения сетевых пакетов случайными символами. В этом случае размер сетевых пакетов будет динамически изменяться, что затруднит определение MTProxy.
Для включения функции random padding необходимо в ссылку для подключения перед секретным кодом добавить символы dd:
tg://proxy?server=<IP сервера>&port=<ПОРТ>&secret=<ddСЕКРЕТ>
Для настройки канала, на который будут автоматически подписываться все пользователи, подключившиеся к прокси-серверу, необходимо написать боту @MTProxybot и зарегистрировать сервер. После регистрации бот выдаст персональный идентификатор (tag), который потребуется добавить в файл mtproto-proxy.service, дописав аргумент -P <TAG>
. После внесения изменений потребуется перезагрузить прокси (systemctl restart mtproto-proxy). Затем можно добавлять канал для рекламы средствами бота.
Установка завершена.
Список источников:
make: *** [Makefile:94: objs/bin/mtproto-proxy] Error 1
Что с этим сделать?
Попробуйте выполнить ‘git clone https://github.com/krepver/MTProxy/tree/gcc10‘ вместо репозитория, указанного в статье.
На github описана аналогичная проблема: https://github.com/TelegramMessenger/MTProxy/issues/420