Статья Развёртывание своего MTProxy Telegram со статистикой

30297


„Я унаследовал эту неразбериху,
начиная с бессовестных Zello; LinkedIn
и кончая "всеми прочими" на платформе Telegram
в моём мире.

А потом икнув,
чиновник торопливо и громко добавил:
«но я наведу (здесь в IT) порядок“.
(...)

Дуров, справедливо полагает, что это авторитарные государства должны его, шифропанка, бояться,
а роскомнадзоры и золотые щиты со своим DPI-фильтрами его не очень-то беспокоят»
(Политическая техника)


Наша техническая политика - проще, я могу тут расписать свои размышления по беспечным блокировкам в рунете, но полагаю, что прогрессивные граждане Modern Russian и жители yg140.servegame.com ощутили на своей шкуре непрофессионализм действующей власти, поэтому ограничусь единственной фразой: наша техническая политика - "Цифровое Сопротивление".

«И рыбку съесть и MTProto proxy Telegram развернуть для своих друзей и близких»
  • Технический уровень сложности - "как два байта переслать", если следовать данной шпаргалке.
  • Уровень надежности - выше среднего: docker-образ работает стабильно, перезапускать его не требуется каждый день, как писали разработчики в своей официальной документации Telegram (Примечание - разработчики Telegram «думали», что, возможно, придется каждые сутки владельцам MtprotoProxy перезагружать свой docker-контейнер, следуя за "ip-telegram"), но какие-то уязвимости контейнер наверняка содержит.
  • Уровень сопротивления/тревоги - 10 человек пользуются, бан не прилетал от РКН ни разу за месяц/всё спокойно.
  • Уровень доверия - public baby distrust, проблема на стороне клиентов (не все доверяют моему MtprotoProxy).
  • Уровень тестостерона - выше не стал.
  • Финансовые затраты - 0$.
  • Финансовое вознаграждение - от Дурова не зависит. Поощрение - возможность продажи рекламы.
Поднимать наш TelegramProxy будем на «бесплатных/персональных» мощностях Amazon-ec2: t2.micro. Как завести t2.micro неплохо расписано на нашем форуме здесь.
Окей, развернули сервер, переходим на официальный сайт dockerhub и скачиваем docker-контейнер.
Не нужно искать какой-то образ, файл, или волшебную кнопку - "их нет", вся магия делается в CLI: $ docker pull telegrammessenger/proxy #образ скачан.
Но перед "этим" установите docker для CLI:
sudo apt-get install docker.io docker

Далее, в официальной документации MtprotoProxyTelegram нам предлагают сделать примерно следующее:
$ sudo su && docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest #запускаем наш контейнер «mtproto-proxy».
После этой команды в выводе терминала появится HEX-строка, но она нам не интересна.

Пишем $ docker logs mtproto-proxy
И получаем нужные данные:

30298


В выводе данного лога нам показывают (замазал):
А) наш ip сервера (внешний ip сервера);
Б) и случайный секрет - случайная строка в HEX.

Перед тем, как зарегать наш MtproProxy, нужно настроить главный файрволл над iptables (как бы вы не перенаправляли трафик на данной VPC, он будет непослушный, так как самый главный файрволл в Amazon-Ec2 находится в web-интерфейсе и имеет более высокий приоритет над iptables).

Заходим в «консоль Amazon-ec2» в Security Group и открываем входящий 443 порт (логичная маскировкатрафика на первое время).

30299


Берём из лога наши данные «ip и секрет» и идем в мессенджер Telegram, находим официальный MTProxy Admin Bot (@MTProxybot) и регистрируем наш MtproProxy: запускаем команду [/newproxy] и вводим [наш_ip:443], а потом и наш [секрет/HEX].
Если накосячите при вводе данных, бот будет сердиться и слать вас на...
Если две строчки заполните без ошибок, то получите одобрение и рабочую ссылку, на ваш действующий MtprotoProxyTelegram, которым вы можете поделиться с кем угодно.

30300


Также через данного бота можно добавить Ваш спонсоркий канал (но не чат), где Вы будете ваши взгляды навязывать пользователям, которые подключились к вашему серверу, а можно не «спамить», и не беспокоить своих будучи-потенциальных клиентов, не показывая канал в закрепленном списке мессенджера.
Еще пару слов о боте, там можно запрашивать статистику, но «тоже бублик».
Видимо "статистика" доступна, когда за тобой Махачкала «толпа нахлебников».

Мониторинг

А сколько мы можем подключить юзеров на наш сервер? И вообще, кто/что там? Чего? И сколько?
Смотрим, что там по официальной документации... Ага, вот: сделать так $ curl http://localhost:2398/stats или вот так $ docker exec mtproto-proxy curl http://localhost:2398/stats # и нам выдадут статистику прямо в CLI.
«Держи карман шире» По предложенным командам мы всегда будем получать подобную ошибку:
«curl: (7) Failed to connect to localhost port 2398: В соединении отказано»
Прокси наш будет работать. Но! Бублик, а не статистику мы получим.

Можно заняться делами для красноглазиков: проверить $ netstat -an | grep 2398 и...

Сначала я подумал, что это очередной косяк за разработчиками Telegram (и я до сих пор так думаю), потом нашёл временное неплохое решение: полирнуть напильником Docker-Контейнер. Позже на глаза попалась инфа о государственных плясках Роскомнадзора вокруг «статистики».
«Мы заблокировали на своих серверах часть публичных прокси, воспользовавшись базами проекта firehol . Этот проект мониторит списки с публичными прокси и делает базы с ними.
С этого момента (то есть уже почти двое суток) не было заблокировано ни одного IP-адреса нашего российского прокси.

3. Рассказываем, как сделать почти неуязвимый для Роскомнадзора прокси и делимся скриптом блокировки публичных прокси.
— Обновите docker-контейнер (или демон) MTProto proxy до последней версии: РКН вычисляет старые версии по порту статистики, который биндился на 0.0.0.0 и однозначно себя идентифицировал для всего интернета. А лучше — откройте нужны порты с помощью iptables, а остальные — закройте (помните, что в случае с docker-контейнером следует использовать правило FORWARD).
— Роскомнадзор давно научился дампить трафик: они видят обращения внутри HTTP- и SOCKS5-прокси, а так же видят старую версию обфускации MTProto proxy.
Когда клиенты некоторых провайдеров, у которых установлены такие дампилки, обращаются к Telegram через такие прокси, то РКН видит такие обращения и сразу блокируют эти прокси. Тоже самое касается MTProto proxy со старой обфускацией.

Решение: раздавайте клиентам, которые подключаются к прокси, secret только с dd в начале (не нужно указывать дополнительные буквы dd в настройках самого mtproto proxy). Это включит версию обфускации, которую не умеют определять дампилки.
И никаких HTTP- и SOCKS5-прокси.
— Подгон, с помощью которого каждый владелец телеграм-прокси, который регулярно банится РКН, может полностью (или почти полностью) прекратить блокировки (а заодно и убедиться в том, что РКН лжёт).

Скрипт, который банит публичные прокси и небольшой мануал к нему».
-----------

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

Источник: https://t.me/unkn0wnerror/1154

Мануал «получение статистики/мониторинг» по официальной инструкции MtprotoProxyTelegram - нерабочий/устаревший, придется чинить docker-образ.
Чиним.
Контейнер у нас всё еще запущен,
$ docker stop mtproto-proxy #останавливаем наш запущенный docker-контейнер и запускаем новый образ с пропущенным флагом статистики
$ docker run --net=host --name=mtproto-proxy2 -d -p443:443 -v proxy-config:/data -e SECRET=ваш_предыдущий_секрет_hex telegrammessenger/proxy:latest

Проверим статистику
$ curl http://localhost:2398/stats
curl: (7) Failed to connect to 0.0.0.0 port 2398: В соединении отказано
Статистика всё еще не работает(

Узнаем идентификатор docker-контейнера
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f423c209cfdc telegrammessenger/proxy:latest "/bin/sh -c '/bin/ba…" About an hour ago Up About a minute 0.0.0.0:443->443/tcp mtproto-proxy2

Идём со своим уставом внутрь docker-контейнера
$ sudo docker exec -it f423c209cfdc /bin/bash

$ apt-get update
$ apt-get install nano
$ nano -$ run.sh

И в самой последней строке скрипта "run.sh" добавляем пропущенный флаг: «--http-stats»
«exec /usr/local/bin/mtproto-proxy -p 2398 -H 443 -M "$WORKERS" -C 60000 --aes-pwd /etc/telegram/hello-explorers-how-are-you-doing -u root $CONFIG --allow-skip-d h --nat-info "$INTERNAL_IP:$IP" $SECRET_CMD $TAG_CMD»

Добавляете "--http-stats", что- то вроде этого должно получиться:
«exec /usr/local/bin/mtproto-proxy -p 2398 --http-stats -H 443 -M "$WORKERS" -C 60000 --aes-pwd /etc/telegram/hello-explorers-how-are-you-doing -u root $CONFIG --allow-skip-d h --nat-info "$INTERNAL_IP:$IP" $SECRET_CMD $TAG_CMD»
Ctrl+o/Ctrl+x/Ctrl+d (сохранить/выход из nano/выход из контейнера).

Перезапускаем наш docker-контейнер
$ docker restart mtproto-proxy2

Всё, теперь по команде
$ curl http://localhost:2398/stats #получаем объемную статистику

30302


В статистике много «мусора» (на скрине 1/3 её часть), создаём alias
$ echo "alias telega='curl localhost:2398/stats | grep -e total_special -e load_average_total'" >> .bashrc && bash

Получаем то, ради чего полировали docker-контейнер: кол-во подключений и нагрузку
$ telega

30303

Docker-контейнер работает, статистика крутится.


Затраченные ресурсы


Как бы ты не был крут Стюарт Редман даже ты оставляешь след от го.на на своих трусах. Работающий Docker-образ оставляет немаленький след.
Расписывать преимущества и недостатки docker-образов не имеет смысла, docker-контейнер - это мини-виртуальная машина, потребляющая ресурсы менее, чем «реальная» виртуальная машина, например VirtualBox, но потребляющая.

1) Запущен со статистикой docker-образ или без неё, два клиента резвятся или 10 — ресурсы утилизируются ~одинаково=75% от всей производительности CPU t2.micro.
2) Смотрим мониторинг VPC-сервера

30304


Из графика утилизации ресурсов на VPC видим, что docker-контейнер потребляет постоянно ~7,5% от общей макс. производительности CPU и 28 мая был остановлен мною намеренно (Примечание - на сервере так же крутятся OpenVPN & pptp).

Почему 10% постоянной загрузки CPU - это предел для данного сервера?
Потому что есть ограничения со стороны Amazon и исчисляются они в кредитах:
30305


1 кредит CPU = 1 ЦП, работающему со 100% загрузкой в течение одной минуты, а у нас кредитов 6 (то есть в пиках 100%-я утилизация CPU возможна в течении 6 минут, а дальше мощность CPU снизиться). Другие комбинации: например, 1 кредит CPU = 1 ЦП, работающему с 50%-й нагрузкой в течение двух минут (то есть мы можем исполльзовать CPU с 50%-й нагрузкой в течении 12 минут), или, пример, постоянной 10%-й нагрузкой CPU в течение всего времени и тд.

Выводы
  • Мы частичка «Цифрового Сопротивления».
  • Если на сервере у вас будет развернут MtprotoProxyTelegram и OpenVPN, но не более, задержек/пингов/сбоев не будет, но если вы постоянно экспериментируете со своим сервером, то ждите тормозов.
  • Мой заокеанский пинг ~250мс, задержек в речевой связи не ощущается.
  • За автоматически сгенерированный «секрет» переживать особо не стоит, даже после «docker rm», он останется в памяти.
  • Финансовые затраты на все "это" (в том числе и ресурсы VPC) = 0₽.
 
можно ли с помощью данных прокси работать с локальными скриптами? Допустим для скриптов работающих по протоколу MTProto и телеграм ботов работающих через него же. Иногда надоедает включать VPN)
 
Данные прокси только для Telegram.
Если я правильно понял вопрос, то вкл/не вкл vpn можно решить задачу разделением трафика через маршрутизацию.
Пример, пускать все через vpn, кроме yg140.servegame.com
 
  • Нравится
Реакции: bothub
Данные прокси только для Telegram.
Если я правильно понял вопрос, то вкл/не вкл vpn можно решить задачу разделением трафика через маршрутизацию.
Пример, пускать все через vpn, кроме yg140.servegame.com
не, я просто работаю с данным протоколом посредством MTProto на Python и там есть возможность подключаться через обычные http и https прокси, вот думал может и эти специализированные можно как то приспособить.
 
Спасибо за статью очень познавательно!
 
  • Нравится
Реакции: am29f010b
Отличная статья ,
если у кого не получилось запустить , появились ошибки то запускайте от привилегии :
docker run -d -p443:443 --name=mtproto-proxy --restart=always --privileged -v proxy-config:/data telegrammessenger/proxy:latest
 
Благодарю, добавил "sudo su"
Думал на скрине видно "root" понятно и так.
 
Если ставите Amazon Linux 2 AMI, то там нет apt-get, установка докер клиента:
у меня сработала следующая последовательность:
Код:
$ sudo yum install -y docker
$ sudo service docker stop
$ sudo systemctl start docker
$ sudo docker pull telegrammessenger/proxy
# docker run -d -p443:443 --name=mtproto-proxy --restart=always --privileged -v proxy-config:/data telegrammessenger/proxy:latest
5489b46da88839b4a9b818a46d06d9fde78410e0ebd8bd9d00bd8c51688e398f
# docker logs mtproto-proxy
Спасибо за статью
 
Форум тут специфичный, берем по максиму. На скринах же в статье Amazon t2.micro KaliLinux.
31108
 
Статья супер, спасибо!
 
Подскажите пожалуйста как рассчитать нагрузку на сервер под определенное количество человек. Допустим прокси будет пользоваться 1000 человек. как сервер по характеристикам требуется арендовать, и в какой стране лучше всего.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab