„Я успадкував цю плутанину,
починаючи з безсовісних Zello; LinkedIn
і закінчуючи «усі інші» на платформі Telegram
У моєму світі.А потім икнув,
чиновник квапливо і голосно додав:
але я наведу (тут у IT) порядок“
(...).
Дуров, справедливо вважає, що це авторитарні держави повинні його, шифропанка, боятися, а розкомнагляди та золоті щити зі своїми DPI-фільтрами його не дуже турбують»
(Політична техніка)
Моя технічна політика — простіше, я можу тут розписати свої роздуми щодо безтурботних блокувань у рунеті, але вважаю, що прогресивні громадяни Modern Russian та користувачі Хабра відчули на своїй шкурі непрофесійність чинної влади, тому обмежусь єдиною фразою: «Наша технічна політика . «забезпечення рідних та близьких стійким каналом зв'язку».
Розгортання MTProto proxy Telegram
- Технічний рівень складності — «нескладно», якщо, наприклад, дотримуватися цієї шпаргалки.
- Рівень надійності — «вищий за середній»: docker-образ працює стабільно, перезапускати його не потрібно щодня, як писали розробники у своїй офіційній документації Telegram, але якісь уразливості контейнер напевно містить.
- Рівень опору/тривоги - 10 ігілівців плетуть свої змови «рідня користується», бан не прилітав від РКН жодного разу за весь час (з весни).
- Рівень довіри - "public baby distrust", проблема на стороні клієнтів (деякі друзі підозріло ставляться до мого MtprotoProxy).
- Рівень тестостерону – «вище не став».
- Фінансові витрати – «0₽».
- Фінансова винагорода – «від громадянина Дурова не залежить». Заохочення – можливість нав'язування реклами.
Підніматиме наш TelegramProxy на «безкоштовних/персональних» потужностях Amazon-ec2: t2.micro. Я використовував
Окей, розгорнули свій безкоштовний сервер, переходимо на офіційний сайт
Не потрібно шукати якогось образу, файлу, або чарівної кнопки — «їх немає», вся магія робиться в 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
І отримуємо потрібні дані:
У виведенні цього лога нам показують (замазав):
А) наш ip сервер (зовнішній ip сервер);
Б) і випадковий секрет - випадковий рядок у HEX.
Перед тим, як зареєструвати наш MtproProxy, потрібно налаштувати головний файрволл над iptables (якби ви не перенаправляли трафік на даній VPC, він буде неслухняний, оскільки найголовніший файрволл в Amazon-EC2 знаходиться у web-інтерфейсі і має більший пріоритет над iptables ).
Заходимо в «
Беремо з ліг наші дані «ip і секрет» і йдемо в месенджер Telegram, знаходимо офіційний MTProxy Admin Bot (@MTProxybot) і реєструємо наш MtproProxy: запускаємо команду [/newproxy] і вводимо [наш_ip:443], а потім і наш [секрет /HEX].
Якщо накосячіть при введенні даних, бот буде сердитись і надсилати вас на…
Якщо два рядки заповните без помилок, то отримаєте схвалення та робоче посилання на ваш діючий MtprotoProxyTelegram, яким ви можете поділитися з ким завгодно.
Також через даного бота можна додати Ваш спонсоркий канал (але не чат), де Ви будете ваші погляди нав'язувати користувачам, які підключилися до вашого серверу, а можна не «спамити», і не турбувати своїх потенційних клієнтів, не показуючи канал у закріпленому списку месенджера.
Ще кілька слів про роботу, там можна запитувати статистику, але «теж бублик». Мабуть «статистика» доступна, коли за тобою Махачкала натовп нахлібників.
моніторинг
А скільки ми можемо підключити користувачів на наш сервер? І взагалі хто/що там? Чого? І скільки?
Дивимося, що там за офіційною документацією... Ага, ось зробити так:
$ 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 #получаем объемную статистику
У статистиці багато «сміття» (на скрині 1/3 її частина), створюємо або:
$ echo "alias telega='curl localhost:2398/stats | grep -e total_special -e load_average_total'" >> .bashrc && bash
Отримуємо те, заради чого полірували docker-контейнер: кількість підключень і навантаження:
$ telega
Docker-контейнер працює, статистика крутиться.
Витрачені ресурси
Як би ти не був крутий Стюарт Редман навіть ти залишаєш слід від го.на на своїх трусах. Діючий Docker-образ залишає великий слід.
Розписувати переваги та недоліки docker-образів не має сенсу, docker-контейнер - це міні-віртуальна машина, яка споживає ресурси менш ніж "реальна" віртуальна машина, наприклад VirtualBox, але споживає.
1) Запущений зі статистикою docker-образ або без неї, два клієнти граються або десять - ресурси утилізуються ~однаково: 75% від усієї продуктивності CPU t2.micro.
2) Дивимося моніторинг VPC-сервера:
З графіка утилізації ресурсів на VPC бачимо, що docker-контейнер споживає постійно ~7,5% загальної макс. продуктивності CPU та 28 травня був зупинений мною навмисно/тимчасово (Примітка - на сервері також крутяться OpenVPN & pptp).
Чому 10% постійного завантаження CPU – це межа для цього сервера?
Тому що є обмеження з боку Amazon EC2 і обчислюються вони у кредитах:
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