Установка и настройка MTProxy

MTProxy — это эталонная реализация протокола MTProto, созданного командой Павла Дурова для обхода блокировки мессенджера Telegram. MTProxy представляет из себя специальное приложение — промежуточный сервер, который выполняет роль посредника, обрабатывая соединения между устройством пользователя и серверами Telegram.

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

Необходимо отметить некоторые особенности MTProxy по сравнению с различными реализациями серверов, использующих протокол SOCKS5, такими как Dante:

  • Вместо связки логин/пароль для подключения используется парольная комбинация символов, т.н. «секрет»;
  • Трафик не имеет отличий по сравнению с TLS/SSL;
  • Пароль серверу при подключении не передается;
  • MTProxy может использоваться для подключений только клиентом Telegram. Другие приложения не могут устанавливать соединения через MTProxy;
  • В настройках можно указать канал Telegram, на который пользователи будут автоматически подписаны при подключении к серверу.

Следует отметить и определенные недостатки протокола SOCKS5 по сравнению с MTProto:

  1. При подключении к SOCKS5 логин и пароль передаются в открытом виде;
  2. Эталонная реализация протокола SOCKS5 не имеет никаких средств шифрования;
  3. Если прокси SOCKS5 настроен без аутентификации, при сканировании ботами он может попасть в глобальные списки запрещенных узлов. Если таким сервером воспользуются злоумышленники для совершения преступных деяний, это может являться основанием для возбуждения уголовного дела.

Рассмотрим установку MTProxy на примере Ubuntu 18.10:

  1. Установим пакеты git, curl, инструменты для сборки пакетов, а также openssl и zlib:
    apt install git curl build-essential libssl-dev zlib1g-dev
  2. Клонируем репозиторий с GitHub и собираем приложение:
    cd ~
    git clone https://github.com/TelegramMessenger/MTProxy.git
    cd MTProxy/
    make
  3. Разместим файлы в системных директориях, а также получим секретный ключ и конфигурацию, необходимые для подключения 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
  4. Создадим секретный код, который будут использовать клиенты для подключения к серверу, и запишем его:
    head -c 16 /dev/urandom | xxd -ps
  5. Создадим конфигурационный файл systemd, который будет хранить настройки службы MTProto:
    sudo vim /etc/systemd/system/mtproto-proxy.service
  6. В файл запишем настройки службы:
    [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). Затем можно добавлять канал для рекламы средствами бота.

Установка завершена.

Список источников:

  1. https://github.com/TelegramMessenger/MTProxy
  2. https://admincorner.ru/services/install-telegram-mtproto-proxy-on-ubuntu-18-04/

2 Replies to “Установка и настройка MTProxy”

Добавить комментарий для Anton K. Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *