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

30297


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

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

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


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

«И рыбку съесть и MTProto proxy Telegram развернуть для своих друзей и близких»
  • Технический уровень сложности - "как два байта переслать", если следовать данной шпаргалке.
  • Уровень надежности - выше среднего: docker-образ работает стабильно, перезапускать его не требуется каждый день, как писали разработчики в своей официальной документации Telegram (Примечание - разработчики Telegram «думали», что, возможно, придется каждые сутки владельцам MtprotoProxy перезагружать свой docker-контейнер, следуя за "ip-telegram"), но какие-то уязвимости контейнер наверняка содержит.
  • Уровень сопротивления/тревоги - 10 человек пользуются, бан не прилетал от РКН ни разу за месяц/всё спокойно.
  • Уровень доверия - public baby distrust, проблема на стороне клиентов (не все доверяют моему MtprotoProxy).
  • Уровень тестостерона - выше не стал.
  • Финансовые затраты - 0$.
  • Финансовое вознаграждение - от Дурова не зависит. Поощрение - возможность продажи рекламы.
Поднимать наш TelegramProxy будем на «бесплатных/персональных» мощностях Amazon-ec2: t2.micro. Как завести t2.micro неплохо расписано на нашем форуме здесь.
Окей, развернули сервер, переходим на официальный сайт и скачиваем 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, кроме codeby.net
 
  • Нравится
Реакции: bothub
Данные прокси только для Telegram.
Если я правильно понял вопрос, то вкл/не вкл vpn можно решить задачу разделением трафика через маршрутизацию.
Пример, пускать все через vpn, кроме codeby.net
не, я просто работаю с данным протоколом посредством MTProto на Python и там есть возможность подключаться через обычные http и https прокси, вот думал может и эти специализированные можно как то приспособить.
 
Отличная статья ,
если у кого не получилось запустить , появились ошибки то запускайте от привилегии :
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 человек. как сервер по характеристикам требуется арендовать, и в какой стране лучше всего.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!