
Jeg arvet dette kaoset,
som startet med de samvittighetsløse Zello; LinkedIn
og sluttet med «alle de andre» på Telegram-plattformen
i min verden.Og så, etter å ha hostet,
la tjenestemannen hastig og høyt til:
men jeg skal bringe orden (her i IT)"
(…).
Durov mener med rette at det er autoritære stater som bør frykte ham, kryptopunkeren, mens Roskomnadzor og gullskjold med sine DPI-filtre ikke bekymrer ham nevneverdig"
(Politisk teknikk)
Min teknologiske politikk er enklere, jeg kan her skissere mine tanker om tankeløse blokkeringer i Runet, men jeg mener at progressive borgere i moderne Russland og brukere av Habr har kjent på sin egen kropp den mangel på profesjonalitet fra de nåværende myndighetene, derfor nøyer jeg meg med én setning: vår teknologiske politikk er «Digital Motstand». «sikring av nær og kjære med en stabil kommunikasjonskanal».
Utrulling av MTProto proxy Telegram
- Nivået av teknisk kompleksitet er «ikke vanskelig», hvis du for eksempel følger denne hurtigveiledningen.
- Pålitelighetsnivået er «over gjennomsnittet»: docker-bildet fungerer stabilt, det er ikke nødvendig å starte det på nytt hver dag, slik utviklerne har skrevet i sin offisielle Telegram-dokumentasjon, men det finnes garantert noen sårbarheter i containeren.
- Motstandsnivået / bekymringen er - 10 ISIS-folk som spinner sine konspirasjoner «familien bruker», det har ikke kommet noen bans fra Roskomnadzor på hele tiden (siden våren).
- Tillitsnivået er «offentlig baby mistillit», problemet ligger hos kundene (noen venner har mistanker mot min MtprotoProxy).
- Testosteronnivået er «ikke høyere».
- Finansielle kostnader er «0₽».
- Finansielle belønninger er «ikke avhengig av borger Durov». Belønningen er muligheten for påtrengende annonsering.
Vi skal sette opp vår TelegramProxy på «gratis / personlige» ressurser fra Amazon-ec2: t2.micro. Jeg brukte denne maskinen.
Ok, vi har rullet ut vår gratis server, vi går til den offisielle nettsiden dockerhub og laster ned docker-containeren.
Det er ikke nødvendig å lete etter noe bilde, fil, eller magisk knapp - «de finnes ikke», all magien gjøres i CLI:
$ docker pull telegrammessenger/proxy #bildet er lastet ned.Men før «dette» installer docker for CLI:
sudo apt-get install docker.io dockerDeretter foreslår den offisielle dokumentasjonen til MtprotoProxyTelegram at vi gjør omtrent slik, gjør:
$ sudo su && docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest #vi starter vår container «mtproto-proxy».
Etter denne kommandoen vil det vises en HEX-streng i terminalutdataene, men den er ikke av interesse for oss.
Skriv i CLI:
$ docker logs mtproto-proxyOg vi får de nødvendige dataene:

I utdataene fra denne loggen vises oss (tilslørt):
A) vår server IP (den eksterne server IP-en);
B) og en tilfeldig hemmelighet — en tilfeldig streng i HEX.
Før vi registrerer vår MtproProxy, må vi konfigurere hovedbrannmuren over iptables (uansett hvordan du omdirigerer trafikken på denne VPC-en, vil den være ustyrlig, siden hovedbrannmuren i Amazon-EC2 befinner seg i webgrensesnittet og har høyere prioritet enn iptables).
Gå til «konsollen Amazon-EC2» i sikkerhetsgruppen og åpne inngående port 443 (en fornuftig maskering av trafikk for nå).

Hent våre data «ip og hemmelighet» fra loggen og gå til meldingsappen Telegram, finn den offisielle MTProxy Admin Bot (@MTProxybot) og registrer vår MtproProxy: kjør kommandoen [\/newproxy] og skriv inn [vår_ip:443], og deretter vår [hemmelighet\/HEX].
Hvis du gjør feil under inntasting av data, vil boten bli sint og sende deg til...
Hvis du fyller ut to rader uten feil, vil du få godkjennelse og en fungerende lenke til din aktive MtprotoProxyTelegram, som du kan dele med hvem som helst.

Gjennom denne boten kan du også legge til din sponsor kanal (men ikke chat), hvor du vil pålegge dine meninger på brukerne som kobler seg til din server, eller du kan la være å «spammes», og ikke forstyrrere potensielle kunder ved å ikke vise kanalen i den festede listen i meldingsappen.
Et par ord til om boten, der kan du be om statistikk, men «også en bagel». Det virker som «statistikken» er tilgjengelig når du har en gruppe av «nyter» fra Makhachkala bak deg.
Overvåkning
Og hvor mange brukere kan vi koble til serveren vår? Og generelt, hvem/hva er det der? Hva? Og hvor mange?
La oss se hva som står i den offisielle dokumentasjonen... Aha, slik skal det gjøres:
$ curl http:\/\/localhost:2398\/stats eller slik $ docker exec mtproto-proxy curl http:\/\/localhost:2398\/stats # og vi får statistikken direkte i CLI.«Hold lommen bredere» Ved de foreslåtte kommandoene vil vi alltid få en lignende feil:
«curl: (7) Mislyktes i å koble til localhost-port 2398: Tilkoblingen ble nektet»
Proxyen vår vil fungere. Men! En bagel, ikke statistikk, får vi.
Vi kan gjøre noe for de røde øynene: sjekk
$ netstat -an | grep 2398 og...Først trodde jeg det var enda en feil fra Telegram-utviklerne (og jeg tror fortsatt det), men deretter fant jeg en midlertidig god løsning: slippe Docker-beholderen med en fil.
Senere fant jeg informasjon som
gjelder de statlige dansene til Roskomnadzor rundt «statistikken».
«Vi har blokkert en del offentlige proxyer på serverne våre, ved å bruke databasene fra prosjektet firehol. Dette prosjektet overvåker lister med offentlige proxyer og lager databaser med dem.
Fra det øyeblikket (som har vært nesten to døgn nå) har ingen IP-adresser til vår russiske proxy blitt blokkert.
3. Vi forklarer hvordan man lager en nesten uforstyrrelig proxy for Roskomnadzor og deler et skript for blokkering av offentlige proxyer.
— Oppdater docker-containeren (eller demon) MTProto proxy til den nyeste versjonen: RKN oppdager gamle versjoner ved hjelp av statistikkporten, som ble bundet til 0.0.0.0 og entydig identifiserte seg for hele internett. Bedre å åpne nødvendige porter med iptables, og stenge de andre (huske at når du bruker docker-container, må du følge FORWARD-regelen).
— Roskomnadzor har lært å dump trafikk: de ser henvendelser innen HTTP- og SOCKS5-proxyer, og de ser også gamle versjoner av obfuskering for MTProto proxy.
Når kunder fra enkelte tilbydere, hvor slike dumpere er installert, henvender seg til Telegram gjennom slike proxyer, ser RKN slike henvendelser og blokkerer umiddelbart disse proxyene. Det samme gjelder MTProto proxy med gammel obfuskering.
Løsningen: gi kunder som kobler til proxy, en hemmelighet som bare begynner med dd (det er ikke nødvendig å angi ekstra bokstaver dd i innstillingene til selve mtproto proxy). Dette vil aktivere en versjon av obfuskering som ikke kan identifiseres av dumpere.
Og ingen HTTP- og SOCKS5-proxyer.
— En tweaks som hver eier av Telegram-proxy, som regelmessig blir blokkert av RKN, kan bruke for å helt (eller nesten helt) stoppe blokkeringene (og samtidig bekrefte at RKN lyver).
Et skript som blokkerer offentlige proxyer og en liten manual for det.
→ Kilde
Vår proxy er pro-vestlig, jeg har ikke opplevd noen problemer/blokkeringer i løpet av de våraktige og kjølige sommerdagene, så jeg jobbet ikke med å opprettholde tempot og la ikke til prefikset dd* til nøkkelen.
Manual om «innhenting av statistikk/overvåking» ifølge den offisielle instruksjonen for MtprotoProxyTelegram er ikke fungerende/utdatert, så vi må fikse docker-bildet.
Vi fikser.
Containeren vår kjører fortsatt:
$ docker stop mtproto-proxy #stop our running docker container and start a new image with the missed statistics flag
$ docker run --net=host --name=mtproto-proxy2 -d -p443:443 -v proxy-config:/data -e SECRET=your_previous_secret_hex telegrammessenger/proxy:latest
Let's check the statistics:
$ curl http://localhost:2398/statscurl: (7) Failed to connect to 0.0.0.0 port 2398: Connection refused
Statistics are still not available .!..
Let's find out the docker container ID:
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f423c209cfdc telegrammessenger/proxy:latest '/bin/sh -c '/bin/ba…' About an hour ago Up About a minute 0.0.0.0:443->443/tcp mtproto-proxy2
Let's go inside the docker container with our rules:
$ sudo docker exec -it f423c209cfdc /bin/bash
$ apt-get update
$ apt-get install nano
$ nano -$ run.sh
And in the very last line of the script 'run.sh', we add the missed flag:
«--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'
You add '--http-stats', something like this should result:
'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 (save/exit nano/exit the container).
We restart our docker container:
$ docker restart mtproto-proxy2That's it, now with the command:
$ curl http://localhost:2398/stats #get comprehensive statistics
The statistics show a lot of 'garbage' (in the screenshot 1/3 of its part), we create an alias:
$ echo "alias telega='curl localhost:2398/stats | grep -e total_special -e load_average_total'" >> .bashrc && bashWe get what we polished the docker container for: the number of connections and load:
$ telega
The docker container is working, the statistics are rolling.
Resources consumed
No matter how cool you are, Stuart Redman, even you leave a trace of poop on your underwear. A running Docker image leaves a significant trace.
Describing the advantages and disadvantages of docker images makes no sense; a docker container is a mini-virtual machine consuming resources less than a 'real' virtual machine like VirtualBox, but consuming nonetheless.
1) Whether started with or without statistics, two clients are having fun or ten — resources are utilized similarly: 75% of the total CPU performance of t2.micro.
2) Let's look at the VPC server monitoring:

From the resource utilization graph on the VPC, we see that the docker container constantly consumes ~7.5% of the total max. CPU performance, and on May 28, it was intentionally/temporarily stopped by me. (Merk — på serveren kjører også OpenVPN & pptp).
Hvorfor er 10% konstant CPU-bruk grensen for denne serveren?
Fordi det er begrensninger fra Amazon EC2, og de er målt i kreditter:

1 CPU-kreditt = 1 CPU som kjører med 100% belastning i løpet av ett minutt, og vi har 6 kreditter (det betyr at ved topper er 100% CPU-utnyttelse mulig i 6 minutter, og deretter vil CPU-kraften reduseres). Andre kombinasjoner: for eksempel, 1 CPU-kreditt = 1 CPU som kjører med 50% belastning i løpet av to minutter (det betyr at vi kan bruke CPU med 50% belastning i 12 minutter), eller for eksempel, konstant 10% CPU-belastning hele tiden og så videre.
Konklusjoner
- Vi er en del av «Digital Motstand». Vi har gitt våre «foreldre» en pålitelig kommunikasjonskanal.
- Hvis du har deployert MtprotoProxyTelegram og OpenVPN på serveren, men ikke mer, vil det ikke være noen forsinkelser/pinger/feil, men hvis du stadig eksperimenterer med din t2/micro, så vent på forbindelsesproblemer.
- Min ping over havet er ~100-250 ms, forsinkelser i taleanrop merkes ikke.
- Kostnader for alt «dette» (inkludert VPC-ressurser) = 0₽.
Reproduksjon av sin egen artikkel.
UPD: Takk til noen Habr-brukere for nyttige kommentarer, det er faktisk mulig (statisikk opprettholdes?), at det er bedre alternativer til den offisielle docker-image Mtproto proxy Telegram.
Kilde: habr.com
