Розгортання свого MTProxy Telegram зі статистикою

Розгортання свого MTProxy Telegram зі статистикою

„Я успадкував цю плутанину,
починаючи з безсовісних Zello; LinkedIn
і закінчуючи «усі інші» на платформі Telegram
У моєму світі.

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

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

Моя технічна політика — простіше, я можу тут розписати свої роздуми щодо безтурботних блокувань у рунеті, але вважаю, що прогресивні громадяни Modern Russian та користувачі Хабра відчули на своїй шкурі непрофесійність чинної влади, тому обмежусь єдиною фразою: «Наша технічна політика . «забезпечення рідних та близьких стійким каналом зв'язку».

Розгортання MTProto proxy Telegram

  • Технічний рівень складності — «нескладно», якщо, наприклад, дотримуватися цієї шпаргалки.
  • Рівень надійності — «вищий за середній»: docker-образ працює стабільно, перезапускати його не потрібно щодня, як писали розробники у своїй офіційній документації Telegram, але якісь уразливості контейнер напевно містить.
  • Рівень опору/тривоги - 10 ігілівців плетуть свої змови «рідня користується», бан не прилітав від РКН жодного разу за весь час (з весни).
  • Рівень довіри - "public baby distrust", проблема на стороні клієнтів (деякі друзі підозріло ставляться до мого MtprotoProxy).
  • Рівень тестостерону – «вище не став».
  • Фінансові витрати – «0₽».
  • Фінансова винагорода – «від громадянина Дурова не залежить». Заохочення – можливість нав'язування реклами.

Підніматиме наш TelegramProxy на «безкоштовних/персональних» потужностях Amazon-ec2: 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-рядок, але він нам не цікавий.

Пишемо в CLI:

$ docker logs mtproto-proxy

І отримуємо потрібні дані:

Розгортання свого MTProxy Telegram зі статистикою
У виведенні цього лога нам показують (замазав):

А) наш ip сервер (зовнішній ip сервер);
Б) і випадковий секрет - випадковий рядок у HEX.

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

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

Розгортання свого MTProxy Telegram зі статистикою

Беремо з ліг наші дані «ip і секрет» і йдемо в месенджер Telegram, знаходимо офіційний MTProxy Admin Bot (@MTProxybot) і реєструємо наш MtproProxy: запускаємо команду [/newproxy] і вводимо [наш_ip:443], а потім і наш [секрет /HEX].

Якщо накосячіть при введенні даних, бот буде сердитись і надсилати вас на…

Якщо два рядки заповните без помилок, то отримаєте схвалення та робоче посилання на ваш діючий MtprotoProxyTelegram, яким ви можете поділитися з ким завгодно.

Розгортання свого MTProxy Telegram зі статистикою

Також через даного бота можна додати Ваш спонсоркий канал (але не чат), де Ви будете ваші погляди нав'язувати користувачам, які підключилися до вашого серверу, а можна не «спамити», і не турбувати своїх потенційних клієнтів, не показуючи канал у закріпленому списку месенджера.

Ще кілька слів про роботу, там можна запитувати статистику, але «теж бублик». Мабуть «статистика» доступна, коли за тобою Махачкала натовп нахлібників.

моніторинг

А скільки ми можемо підключити користувачів на наш сервер? І взагалі хто/що там? Чого? І скільки?

Дивимося, що там за офіційною документацією... Ага, ось зробити так:

$ curl http://localhost:2398/stats или вот так $ docker exec mtproto-proxy curl http://localhost:2398/stats # и нам выдадут статистику прямо в CLI.

«Тримай кишеню ширше» За запропонованими командами ми завжди отримуватимемо подібну помилку:

«curl: (7) Використовується для підключення до локального порту 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* до ключа не додавав.

Мануал "отримання статистики/моніторинг" за офіційною інструкцією 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) 0.0.0.0 port 2398: У з'єднанні відмовлено
Статистика все ще недоступна!.

Дізнаємося ідентифікатор docker-контейнера:

$ docker ps

ІД КОНТЕЙНЕРА ЗОБРАЖЕННЯ КОМАНДА СТВОРЕНИЙ СТАТУС НАЗВА ПОРТОВ
f423c209cfdc telegrammessenger/proxy:latest «/bin/sh -c '/bin/ba…» About am 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 #получаем объемную статистику

Розгортання свого MTProxy Telegram зі статистикою
У статистиці багато «сміття» (на скрині 1/3 її частина), створюємо або:

$ echo "alias telega='curl localhost:2398/stats | grep -e total_special -e load_average_total'" >> .bashrc && bash

Отримуємо те, заради чого полірували docker-контейнер: кількість підключень і навантаження:

$ telega

Розгортання свого MTProxy Telegram зі статистикою
Docker-контейнер працює, статистика крутиться.

Витрачені ресурси

Як би ти не був крутий Стюарт Редман навіть ти залишаєш слід від го.на на своїх трусах. Діючий Docker-образ залишає великий слід.

Розписувати переваги та недоліки docker-образів не має сенсу, docker-контейнер - це міні-віртуальна машина, яка споживає ресурси менш ніж "реальна" віртуальна машина, наприклад VirtualBox, але споживає.

1) Запущений зі статистикою docker-образ або без неї, два клієнти граються або десять - ресурси утилізуються ~однаково: 75% від усієї продуктивності CPU t2.micro.

2) Дивимося моніторинг VPC-сервера:

Розгортання свого MTProxy Telegram зі статистикою

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

Чому 10% постійного завантаження CPU – це межа для цього сервера?

Тому що є обмеження з боку Amazon EC2 і обчислюються вони у кредитах:

Розгортання свого MTProxy Telegram зі статистикою

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

Висновки

  • Ми частинка "Цифрового Опору". Забезпечили своїх «тат та мам» надійним каналом зв'язку.
  • Якщо на сервері у вас буде розгорнутий MtprotoProxyTelegram і OpenVPN, але не більше, затримок/пінгів/збоїв не буде, але якщо ви постійно експериментуєте зі своїм t2/micro, то чекайте на гальма зв'язку.
  • Мій заокеанський пінг ~100-250мс, затримок у мовному зв'язку не відчувається.
  • Фінансові витрати на все це (у тому числі і ресурси VPC) = 0₽.

Передрук своєї статті.

UPD: Дякуємо деяким хабраюзерам за корисні коментарі, дійсно, можливо (статистика підтримується?), є найкращі аналоги офіційному docker-образу Mtproto proxy Telegram.

Джерело: habr.com

Додати коментар або відгук