
„Dedičim to zmedo,
od brezobzirnega Zello; LinkedIn
do vseh ostalih na platformi Telegram
v mojem svetu.In potem, z vzdihom,
je uradnik hitro in glasno dodal:
„ampak tukaj v IT bom uveljavil red“
(…).
Durov upravičeno meni, da bi se jih morale bati avtoritarne države, Roskomnadzor in zlati ščitovi s svojimi DPI filtri pa ga ne skrbijo preveč“
(Politična tehnika)
Moja tehnična politika je preprosta, lahko tukaj zapišem svoje misli o nepremišljenih blokadah v Runetu, vendar menim, da so napredni državljani Modern Russian in uporabniki Habra na svoji koži občutili nekvalificiranost trenutne oblasti, zato se omejujem na en stavek: naša tehnična politika je „Digitalno odpor“. „zagotavljanje stabilnega komunikacijskega kanala za družino in prijatelje“.
Postopek namestitve MTProto proxy Telegram
- Tehnična raven zapletenosti – „ni zapleteno“, če na primer sledimo tej pomoči.
- Raven zanesljivosti – „nad povprečjem“: docker slika deluje stabilno, ni treba, da jo ponovno zagnemo vsak dan, kot so pisali razvijalci v svoji uradni dokumentaciji Telegram, vendar zagotovo vsebuje nekatere ranljivosti.
- Raven upora/skrbi – 10 jihilovcev spletajo svoje zarote „družina uporablja“, ban ni bil nikoli izdan s strani RKN od pomladi.
- Raven zaupanja – „javni otrok nezaupanje“, problem je na strani strank (nekatere prijatelje moje MtprotoProxy sumljivo opazujejo).
- Raven testosterona – „ni se povečal“.
- Finančni stroški – „0₽“.
- Finančna nagrada – „ni od državljana Durova odvisna“. Spodbuda – možnost vsiljevanja oglasov.
Naš TelegramProxy bomo zagnali na „brezplačnih/osebnih“ virih Amazon-ec2: t2.micro. Uporabil sem to računalnik.
Okej, zagnali smo svoj brezplačni strežnik, preidemo na uradno stran dockerhub in prenesemo docker vsebnik.
Ni treba iskati nobene slike, datoteke ali čarobnega gumbka – „nimamo jih“, cela magija se naredi v CLI:
$ docker pull telegrammessenger/proxy #slika prenesena.Ampak pred „tem“ namestite docker za CLI:
sudo apt-get install docker.io dockerNato nam uradna dokumentacija MtprotoProxyTelegram ponuja, da naredimo približno naslednje, naredimo:
$ sudo su && docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest #začnemo naš vsebnik „mtproto-proxy“.
Po tej komandi se bo v izhodu terminala pojavila HEX-vrstica, vendar nas ta ne zanima.
V CLI vnesemo:
$ docker logs mtproto-proxyIn dobimo potrebne podatke:

V izhodu tega loga nam pokažejo (zamučeno):
A) naš ip strežnika (zunanji ip strežnika);
B) in naključni ključ — naključna vrstica v HEX.
Preden registriramo naš MtproProxy, je potrebno nastaviti glavni požarni zid nad iptables (karkoli že storite za preusmeritev prometa na tej VPC, bo nepokoren, saj je glavni požarni zid v Amazon-EC2 dostopen prek spletnega vmesnika in ima višjo prioriteto kot iptables).
Vstopimo v "konzolo Amazon-EC2" v Varnostni skupini in odprite vhodni 443 port (logična maskirna prometa za prvo obdobje).

Vzeli smo iz loga naše podatke "ip in ključ" in gremo v aplikacijo Telegram, najdemo uradnega MTProxy Admin Bota (@MTProxybot) in registriramo naš MtproProxy: zaženemo ukaz [\/newproxy] in vnesemo [naš_ip:443], nato pa še naš [ključ\/HEX].
Če naredite napako pri vnosu podatkov, bo bot jezen in vas bo poslal na…
Če obeh vrstic ne vnesete brez napak, boste prejeli odobritev in delujočo povezavo do vašega delujočega MtprotoProxyTelegram, ki ga lahko delite s komerkoli.

Preko tega bota lahko dodate tudi svoj sponzorski kanal (ampak ne klepet), kjer boste svoje poglede vsiljevali uporabnikom, ki so se povezali z vašim strežniku, ali pa ne "spamati" in ne vznemirjati potencialnih strank, ne da bi pokazali kanal na priloženem seznamu v aplikaciji.
Še nekaj besed o botu, tam lahko zahtevate statistiko, ampak "tudi krof". Očitno je "statistika" dostopna, ko za vami Makhachkala "ljudstvo prežvekov".
Nadzor
Koliko uporabnikov lahko povežemo na naš strežnik? In sploh, kdo\/kaj je tam? Česa? In koliko?
Oglejmo si, kaj je v uradni dokumentaciji… Aha, tako bo:
$ curl http://localhost:2398/stats ali tako $ docker exec mtproto-proxy curl http://localhost:2398/stats # in nam bodo izpisali statistiko neposredno v CLI."Drži žep širše" Po predlaganih ukazih bomo vedno dobili podoben error:
«curl: (7) Failed to connect to localhost port 2398: Povezava zavrnjena»
Naš proxy bo deloval. Ampak! Krof, ne statistiko bomo dobili.
Lahko se lotimo opravil za rdeče oči: preveriti
$ netstat -an | grep 2398 in...Sprva sem mislil, da gre za še eno napako razvijalcev Telegrama (in še vedno tako mislim), nato pa sem našel začasno zadovoljivo rešitev: obdelati Docker kontejner z brusnim papirjem.
Kasneje sem naletel na informacije:
o državnih manirih Roskomnadzorja okoli 'statistike'.
„Na naših strežnikih smo blokirali del javnih proxy-jev, pri čemer smo uporabili baze podatkov projekta firehol. Ta projekt spremlja sezname javnih proxy-jev in ustvarja baze z njimi.
Od takrat (to pomeni, že skoraj dva dni) ni bil blokiran noben IP naslov našega ruskega proxy-ja.
3. Razložimo, kako narediti skoraj nepretrgovan proxy za Roskomnadzor ter delimo skript za blokado javnih proxy-jev.
— Posodobite docker kontejner (ali demon) MTProto proxy na najnovejšo različico: RKN prepozna stare različice po statističnem vžigu, ki se je vezal na 0.0.0.0 in se jasno identificiral za celoten internet. Še bolje — odprite potrebne porte s pomočjo iptables, druge pa zaprite (ne pozabite, da je pri docker kontejnerju treba uporabiti pravilo FORWARD).
— Roskomnadzor se je že dolgo naučil prestrezati promet: vidijo klice znotraj HTTP- in SOCKS5-proxyjev ter tudi stare različice obfuskacije MTProto proxy.
Ko se stranke nekaterih ponudnikov, pri katerih so nameščeni taki prestrezniki, povežejo s Telegramom prek takih proxyjev, RKN vidi te klice in takoj blokira te proxyje. Enako velja za MTProto proxy s staro obfuskacijo.
Rešitev: dajajte strankam, ki se povezujejo s proxyjem, secret samo z dd na začetku (ni treba dodajati dodatnih črk dd v nastavitvah samega MTProto proxyja). To bo omogočilo različico obfuskacije, ki je ne morejo prepoznati prestrezniki.
In nobenih HTTP- in SOCKS5-proxyjev.
— Vse to je sredstvo, s katerim lahko vsak lastnik telegram proxyja, ki ga redno blokira RKN, popolnoma (ali skoraj popolnoma) ustavi blokade (in še enkrat preveri, da RKN laže).
Skript, ki blokira javne proxyje in majhen priročnik zanj.
→ Source
Naš proxy je pridobitniški, nobenih težav/blokad v spomladanskih in hladnih poletnih dneh nisem srečal, to tudi ni bilo kreativna naloga, zato se nisem ukvarjal z izgubo tempa in predpono dd* k ključu nisem dodajal.
Manjša »prejem statistike/monitoring« po uradnih navodilih MtprotoProxyTelegram - ne deluje/je zastarela, potrebno bo popraviti docker sliko.
Popravimo.
Kontejner je še vedno zagnan:
$ docker stop mtproto-proxy #ustavimo naš zagnan docker-kontejner in zaženemo novo sliko brez izpuščenega oznake statistike
$ docker run --net=host --name=mtproto-proxy2 -d -p443:443 -v proxy-config:/data -e SECRET=vaš_prejšnji_secret_hex telegrammessenger/proxy:latest
Preverimo statistiko:
$ curl http://localhost:2398/statscurl: (7) Napaka pri povezovanju na 0.0.0.0 port 2398: Povezava zavrnjena
Statistika še vedno nedostopna .!..
Ugotovimo ID docker kontejnerja:
$ docker psID KONTEJNERJA SLIKE UKAZ USTVARJENO STATUS PORTI IMENA
f423c209cfdc telegrammessenger/proxy:latest "/bin/sh -c '/bin/ba..." Pred eno uro Zagnano Pred eno minuto 0.0.0.0:443->443/tcp mtproto-proxy2
Vstopimo v docker kontejner s svojim pravilnikom:
$ sudo docker exec -it f423c209cfdc /bin/bash
$ apt-get update
$ apt-get install nano
$ nano -$ run.sh
In v zadnjem tipu skripte »run.sh« dodamo izpuščeni označevalec:
«—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»
Dodate »—http-stats«, nekaj takega bi moralo izpasti:
«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 (shraniti/izhod iz nano/izhod iz kontejnerja).
Ponovno zagnamo naš docker kontejner:
$ docker restart mtproto-proxy2Vse, zdaj po ukazu:
$ curl http://localhost:2398/stats #pridobimo obsežno statistiko
V statistiki je veliko »smeti« (na sličici 1/3 njenega dela), ustvarimo alias:
$ echo "alias telega='curl localhost:2398/stats | grep -e total_special -e load_average_total'" >> .bashrc && bashPridobimo tisto, zaradi česar smo predelovali docker kontejner: število povezav in obremenitev:
$ telega
Docker kontejner deluje, statistika teče.
Porabljeni viri
Kakor hudo si lahko kul Stuart Redman, tudi ti puščaš sled po gnoju na svojih hlačah. Delujoča Docker slika pušča kar precejšnjo sled.
Obrazložiti prednosti in slabosti docker slik nima smisla, docker kontejner - to je mini-virtualna naprava, ki porablja vire manj kot 'prava' virtualna naprava, na primer VirtualBox, vendar porablja.
1) Zagnani s statistiko docker sliko ali brez nje, dva klienta se zabavajo ali deset - viri se porabijo ~enako: 75% celotne zmogljivosti CPU t2.micro.
2) Ogledujemo monitoring VPC strežnika:

Iz grafikona iskorištenja resursa na VPC-u vidimo da docker-kontejner stalno troši ~7,5% od ukupne maksimalne CPU performanse, a 28. maja ga je namerno/privremeno zaustavio. (Napomena — na serveru također radi OpenVPN & pptp).
Zašto je 10% stalnog opterećenja CPU-a granica za ovaj server?
Zato što postoje ograničenja sa strane Amazon EC2, i ona se mere u kreditima:

1 kredit CPU = 1 CPU koji radi sa 100% opterećenjem tokom jedne minute, a imamo 6 kredita (tj. u vrhuncima, 100% iskorišćenje CPU-a je moguće tokom 6 minuta, a zatim će se snaga CPU-a smanjiti). Druge kombinacije: na primer, 1 kredit CPU = 1 CPU koji radi sa 50% opterećenjem tokom dva minuta (tj. možemo koristiti CPU sa 50% opterećenjem tokom 12 minuta), ili, primer, stalno 10% opterećenje CPU-a tokom celog vremena itd.
Zaključki
- Mi smo deo „Digitalnog Otpora“. Obezbedili smo svojim „mamama i tatama“ pouzdan kanal komunikacije.
- Ako na serveru imate postavljen MtprotoProxyTelegram i OpenVPN, ali ne više od toga, neće biti latencija/pinga/poremećaja, ali ako neprestano eksperimentirate sa svojim t2/micro, očekujte usporenje u vezi.
- Moj daljinski ping je ~100-250ms, latencija u govornoj komunikaciji se ne oseća.
- Finansijski troškovi za sve „to“ (uključujući resurse VPC) = 0₽.
Prepravka vlastitog članka.
UPD: Hvala nekim korisnicima Habr-a na korisnim komentarima, zaista, moguće je (da li se statistika podržava?), da postoje bolji analozi zvaničnom docker-ima Mtproto proxy Telegram.
Izvor: habr.com
