„Я атрымаў у спадчыну гэтую блытаніну,
пачынаючы з бессаромных 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) Вызначаны connect to port localhost 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
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f423c209cfdc telegrammessenger/proxy:latest «/bin/sh -c '/bin/ba…» Да 0.0.0.0 гадзіны 443:443->2/tcp mtproto-proxyXNUMX
Ідзем са сваім статутам унутр 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-dh -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 яе частка), ствараем alias:
$ 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