
„Naslijedio sam ovaj nered,
počinjajući od bezobraznih Zello; LinkedIn
i završavajući sa „svim ostalima“ na platformi Telegram
u mom svijetu.A onda, nakon što je zinuo,
službenik je brzo i glasno dodao:
„ali ću uspostaviti (ovdje u IT-u) red“
(…).
Durov, s pravom, smatra da se autoritarne države trebaju bojati njega, šifropanka, a Roskomnadzor i zlatni štitovi s njihovim DPI filtrima ga ne brinu previše“
(Politička tehnika)
Moja tehnička politika je jednostavnija, mogu ovdje napisati svoja razmišljanja o nepromišljenim blokadama u runetu, ali smatram da su progresivni građani Modern Russian i korisnici Habr-a na vlastitoj koži osjetili nek profesionalizam sadašnje vlasti, pa ću se ograničiti na jednu jedinu rečenicu: naša tehnička politika je „Digitalni otpor“. „osiguranje stabilnog kanala komunikacije za voljene“.
Implementacija MTProto proxy Telegram
- Tehnički nivo složenosti – „ne previše teško“, ako se na primjer slijedi ovaj vodič.
- Nivo pouzdanosti – „iznad prosjeka“: docker slika radi stabilno, ne treba je ponovno pokretati svaki dan, kao što su pisali programeri u svojoj službenoj dokumentaciji Telegrama, ali container sigurno sadrži nekakve ranjivosti.
- Nivo otpora/tjeskobe – 10 igilovaca spleću svoje zavjere „rodbina koristi“, nikad nije stigla zabrana od RKN-a (od proljeća).
- Nivo povjerenja – „javna beba ne vjeruje“, problem je na strani klijenata (neki prijatelji sumnjivo gledaju na moj MtprotoProxy).
- Nivo testosterona – „nije postao viši“.
- Financijski troškovi – „0₽“.
- Financijska nagrada – „ne ovisi o građaninu Durovu“. Osveta – mogućnost nametanja reklame.
Podići ćemo naš TelegramProxy na „besplatnim/osobnim“ resursima Amazon-ec2: t2.micro. Koristio sam ovu stroj.
OK, postavili smo svoj besplatni server, prelazimo na službenu stranicu dockerhub i preuzimamo docker container.
Nema potrebe tražiti neki image, datoteku ili čarobnu tipku – „nema ih“, sva magija se događa u CLI-u:
$ docker pull telegrammessenger/proxy #image preuzet.Ali prije „ovoga“ instalirajte docker za CLI:
sudo apt-get install docker.io dockerNakon toga, u službenoj dokumentaciji MtprotoProxyTelegram-a predložit će nam da napravimo otprilike sljedeće, radimo:
$ sudo su && docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest #pokrećemo naš container „mtproto-proxy“.
Nakon ove komande u izlazu terminala će se pojaviti HEX-string, ali nas to ne zanima.
Pišemo u CLI:
$ docker logs mtproto-proxyI dobijamo potrebne podatke:

U izlazu ovog loga pokazuju nam (zamaskirano):
A) naš IP servera (spoljni IP servera);
B) i slučajni tajni kod — slučajan niz u HEX-u.
Pre nego što registrujemo naš MtproProxy, potrebno je da podesimo glavni firewall iznad iptables (kako god da preusmeravate saobraćaj na ovoj VPC, neće slušati, jer je najvažniji firewall u Amazon-EC2 u web-interfejsu i ima viši prioritet od iptables).
Ulazimo u “konzole Amazon-EC2” u Security Group i otvaramo ulazni port 443 (logična maska saobraćaja na neko vreme).

Uzimo iz loga naše podatke “IP i tajnu” i idemo u messenger Telegram, nalazimo zvanični MTProxy Admin Bot (@MTProxybot) i registrujemo naš MtproProxy: pokrećemo komandu [\/newproxy] i unosimo [naš_ip:443], a zatim i naš [tajni_kod\/HEX].
Ako napravite grešku prilikom unosa podataka, bot će se naljutiti i poslaće vas na…
Ako unesete dve linije bez grešaka, dobićete odobrenje i aktivnu vezu na vaš radni MtprotoProxyTelegram, koju možete podeliti s kim god želite.

Takođe preko ovog bota možete dodati svoj sponzorisani kanal (ali ne chat), gde ćete nametati svoje stavove korisnicima koji su se povezali na vaš poslužitelju, ili ne “spamovati”, i ne ometati svoje buduće potencijalne klijente, ne prikazujući kanal u fiksnom spisku messengera.
Još par reči o botu, tamo možete tražiti statistiku, ali “takođe bublik”. Očigledno
Monitoring
je “statistika” dostupna kada za vama Makhachkala “gomila parazita.”
Koliko korisnika možemo povezati na naš server? I uopšte, ko\/šta je to? Šta? I koliko?
Pogledajmo šta piše u zvaničnoj dokumentaciji… Aha, ovako, učinite:$ curl http:\/\/localhost:2398\/stats ili ovako $ docker exec mtproto-proxy curl http:\/\/localhost:2398\/stats # i dobićemo statistiku direktno u CLI.
«“Drži ruksak šire” Po predloženim komandama uvek ćemo dobijati sličnu grešku:»
curl: (7) Failed to connect to localhost port 2398: Veza odbijena
Naš proxy će raditi. Ali! Bublik, a ne statistiku dobićemo.
Možete se posvetiti poslovima za ‘crvene oči’: proverite$ netstat -an | grep 2398 i...
Kasnije sam naletio na informacije:
o državnim plesačima Roskomnadzora oko ‘statistike’.
‘Blokirali smo na svojim serverima dio javnih proksija, koristeći baze projekta firehol. Ovaj projekt prati popise javnih proksija i pravi baze s njima.
Od tog trenutka (tj. već skoro dva dana) nije blokirana niti jedna IP adresa našeg ruskog proksija.
3. Objašnjavamo kako napraviti gotovo neprobojni proksi za Roskomnadzor i dijelimo skriptu za blokiranje javnih proksija.
— Ažurirajte docker-container (ili daemon) MTProto prokxy na posljednju verziju: RKN izračunava stare verzije prema portu statistike, koji se bindao na 0.0.0.0 i jednoznačno se identifikovao za cijeli internet. Ili bolje — otvorite potrebne portove pomoću iptables, a ostale zatvorite (zapamtite da u slučaju docker-container treba koristiti pravilo FORWARD).
— Roskomnadzor je davno naučio snimati promet: vide zahtjeve unutar HTTP- i SOCKS5-proksija, a također vide staru verziju obfuscacije MTProto proksija.
Kada klijenti nekih davatelja usluga, koji imaju takve snimače, pristupaju Telegramu preko takvih proksija, RKN vidi te zahtjeve i odmah blokira te proksije. Isto se odnosi na MTProto proksi sa starom obfuscacijom.
Rješenje: dijelite klijentima koji se povezuju putem proksija, secret samo s dd na početku (ne treba dodavati dodatna slova dd u postavkama samog mtproto proksija). Ovo će uključiti verziju obfuscacije koju snimači ne mogu odrediti.
I nikakvi HTTP- i SOCKS5-proksiji.
— Pomoć koja omogućava svakom vlasniku Telegram-proksija, koji se redovito blokira od strane RKN, da potpuno (ili gotovo potpuno) prestane s blokadama (a za to će se i uvjeriti da RKN laže).
Skripta koja blokira javne proksije i kratak priručnik za nju.
→ Izvor
Naš proksi je prozapadni, nisam imao nikakvih problema/blokada tijekom proljetnih i hladnih ljetnih dana, to ni na kakvu kreativnu zadaću nije utjecalo, tako da se nisam bavio gubitkom tempa i nisam dodavao prefiks dd* ključu.
Priručnik ‘prikupljanje statistike/monitoring’ prema službenim uputama MtprotoProxyTelegram - ne radi/je zastario, trebati će popraviti docker-sliku.
Popravimo.
Kontejner nam je još uvijek pokrenut:
$ docker stop mtproto-proxy #zaustavljamo naš pokrenuti docker-kontejner i pokrećemo novu sliku s propuštenom statističkom oznakom
$ docker run --net=host --name=mtproto-proxy2 -d -p443:443 -v proxy-config:⁄data -e SECRET=vaš_prethodni_secret_hex telegrammessenger⁄proxy:latest
Provjerimo statistiku:
$ curl http:⁄⁄localhost:2398⁄statscurl: (7) Neuspjeh veze na 0.0.0.0 port 2398: Spoj je odbijen
Statistika je i dalje nedostupna .!..
Saznajmo ID docker-kontejnera:
$ docker psID KONTENJERA SLIKA NALOG STVARANO STATUS PORTOVI IMENA
f423c209cfdc telegrammessenger⁄proxy:latest «⁄bin⁄sh -c ‘⁄bin⁄ba…» Prije otprilike sat vremena Up Prije otprilike minute 0.0.0.0:443->443⁄tcp mtproto-proxy2
Idemo sa svojim pravilima unutar docker-kontejnera:
$ sudo docker exec -it f423c209cfdc ⁄bin⁄bash
$ apt-get update
$ apt-get install nano
$ nano -$ run.sh
I u posljednjem redu skripte «run.sh» dodajemo propuštenu oznaku:
«—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»
Dodajte «—http-stats», nešto ovako bi trebalo ispasti:
«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 (snimi⁄izlaz iz nano⁄izlaz iz kontejnera).
Ponovno pokrećemo naš docker-kontejner:
$ docker restart mtproto-proxy2Sve, sada uz naredbu:
$ curl http:⁄⁄localhost:2398⁄stats #dobivamo opsežnu statistiku
U statistici ima mnogo «smeća» (na ekranu 1⁄3 njezina dijela), kreiramo alias:
$ echo "alias telega='curl localhost:2398⁄stats | grep -e total_special -e load_average_total'" >> .bashrc && bashDobivamo ono zbog čega smo polirali docker-kontejner: broj veza i opterećenje:
$ telega
Docker-kontejner radi, statistika se vrti.
Potrošeni resursi
Bez obzira koliko bio dobar, Stuart Redman, i ti ostavljaš tragove na svojim gaćama. Funkcionalna Docker-slika ostavlja značajan trag.
Razgovarati o prednostima i nedostacima docker-slika nema smisla, docker-kontejner je mala virtualna mašina koja troši manje resursa od «prave» virtualne mašine, kao što je VirtualBox, ali troši.
1) Pokrenut sa statistikom docker-slike ili bez nje, dva klijenta se koriste ili deset — resursi se troše ~isti: 75% od ukupne radne sposobnosti CPU t2.micro.
2) Gledamo monitoring VPC-servera:

Na grafu iskorištenosti resursa na VPC-u vidimo da docker-kontejner stalno troši ~7,5% od ukupne max. radne sposobnosti CPU i 28. svibnja je namjerno⁄privremeno zaustavljen. (Napomena — na serveru se također vrti OpenVPN & pptp).
Zašto je 10% stalnog opterećenja CPU granica za ovaj server?
Jer postoje ograničenja od strane Amazon EC2 i ona se računaju u kreditima:

1 kredit CPU = 1 CPU koji radi s 100% opterećenjem tokom jedne minute, a imamo 6 kredita (to znači da je u pikovima 100% iskorištenje CPU moguće tokom 6 minuta, a zatim će se snaga CPU smanjiti). Druge kombinacije: na primjer, 1 kredit CPU = 1 CPU koji radi s 50%-tnim opterećenjem tokom dvije minute (to znači da možemo koristiti CPU s 50%-tnim opterećenjem tokom 12 minuta), ili, primjer, stalno 10%-tno opterećenje CPU tokom cijelog vremena itd.
Zaključci
- Mi smo dio «Digitalnog Otpora». Obezbijedili smo svojim „tata i mama“ pouzdan kanal komunikacije.
- Ako na serveru imate postavljen MtprotoProxyTelegram i OpenVPN, ali ne više, neće biti latencija/pinga/prekida, ali ako stalno eksperimentirate sa svojim t2/micro, očekujte usporenja u vezi.
- Moj ping preko oceana je ~100-250ms, u govoru se ne osjete latencije.
- Financijski troškovi za sve «to» (uključujući resurse VPC) = 0₽.
Prepisivanje vlastitog članka.
UPD: Hvala nekim korisnicima Habr-a za korisne komentare, zaista, moguće je (da li se statistika održava?), da postoje bolje alternative službenom docker imidžu Mtproto proxy Telegram.
Izvor: habr.com
