
J'ai hérité de ce désordre,
commençant par les sans scrupules Zello ; LinkedIn
et finissant par « tous les autres » sur la plateforme Telegram
dans mon monde.Puis, en hoquetant,
le fonctionnaire a rapidement et bruyamment ajouté :
mais je mettrai de l'ordre ici (dans le secteur IT)"
(…).
Durov pense à juste titre que ce sont les États autoritaires qui devraient craindre son chiffré, tandis que les Roskomnadzor et les boucliers dorés avec leurs filtres DPI ne l'inquiètent pas vraiment"
(Technique politique)
Ma politique technique est plus simple ; je pourrais ici exposer mes réflexions sur les blocages imprudents dans le Runet, mais je pense que les citoyens progressistes de la Russie moderne et les utilisateurs de Habr ont ressenti eux-mêmes l'incompétence des autorités en place, donc je vais me limiter à une seule phrase : notre politique technique est le "Résistance numérique". "assurer un canal de communication stable à nos proches".
Déploiement du proxy MTProto Telegram
- Niveau de difficulté technique - "pas compliqué", si par exemple, on suit ce guide.
- Niveau de fiabilité - "au-dessus de la moyenne" : l'image Docker fonctionne de manière stable, il n'est pas nécessaire de la redémarrer chaque jour, comme les développeurs l'ont indiqué dans leur documentation officielle Telegram, mais le conteneur contient sûrement certaines vulnérabilités.
- Niveau de résistance/inquiétude - 10 membres de l'IGIL tissent leurs conspirations "la famille utilise", aucune interdiction n'est tombée de la RKN depuis tout ce temps (depuis le printemps).
- Niveau de confiance - "public baby distrust", le problème est du côté des clients (certains amis se montrent méfiants envers mon MtprotoProxy).
- Niveau de testostérone - "n'a pas augmenté".
- Coûts financiers - "0₽".
- Récompense financière - "ne dépend pas du citoyen Durov". Incitation - possibilité d'imposer de la publicité.
Nous allons lancer notre TelegramProxy sur les capacités "gratuites/personnelles" d'Amazon EC2 : t2.micro. J'ai utilisé cet une machine.
D'accord, une fois notre gratuit déployé, serveurnous allons sur le site officiel dockerhub et téléchargeons le conteneur Docker.
Pas besoin de chercher une image, un fichier, ou un bouton magique - "il n'y en a pas", toute la magie se fait dans le CLI :
$ docker pull telegrammessenger/proxy #image téléchargée.Mais avant "cela", installez Docker pour le CLI :
sudo apt-get install docker.io dockerEnsuite, dans la documentation officielle de MtprotoProxyTelegram, on nous propose de faire à peu près ce qui suit :
$ sudo su && docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest #nous lançons notre conteneur "mtproto-proxy".
Après cette commande, une chaîne HEX apparaîtra dans la sortie du terminal, mais cela ne nous intéresse pas.
Nous écrivons dans le CLI :
$ docker logs mtproto-proxyEt nous obtenons les données nécessaires :

Dans la sortie de ce journal, nous voyons (masqué) :
A) notre ip serveur (l'ip externe du serveur);
B) et un secret aléatoire — une chaîne aléatoire en HEX.
Avant de enregistrer notre MtproProxy, il faut configurer le pare-feu principal au-dessus des iptables (quelle que soit la manière dont vous redirigez le trafic sur cette VPC, il sera indocile, car le pare-feu principal dans Amazon-EC2 se trouve dans l'interface web et a une priorité plus élevée que les iptables).
Accédez à «console Amazon-EC2 » dans le groupe de sécurité et ouvrez le port entrant 443 (un camouflage logique du trafic pour un certain temps).

Prenons dans le journal nos données «ip et secret» et allons dans le messager Telegram, trouvons le bot officiel MTProxy Admin (@MTProxybot) et enregistrons notre MtproProxy : lançons la commande [\/newproxy] et entrons [notre_ip:443], puis notre [secret\/HEX].
Si vous faites des erreurs en entrant les données, le bot sera fâché et vous renverra à…
Si vous remplissez deux lignes sans erreurs, vous obtiendrez une approbation et un lien fonctionnel vers votre MtprotoProxyTelegram actif, que vous pourrez partager avec qui vous voulez.

Avec ce bot, vous pouvez également ajouter votre chaîne sponsorisée (mais pas de chat), où vous imposerez vos opinions aux utilisateurs qui se sont connectés à votre serveur, ou vous pouvez ne pas «spammer» et ne pas déranger vos futurs clients, sans afficher la chaîne dans la liste épinglée du messager.
Encore quelques mots sur le bot, vous pouvez demander des statistiques, mais "cliquez encore". Il semble que les "statistiques" soient disponibles quand vous êtes entouré d’une "foule de profiteurs".
Surveillance
Combien d'utilisateurs pouvons-nous connecter à notre serveur ? Et en fait, qui/quoi est là ? Quoi ? Et combien ?
Voyons ce qui se dit dans la documentation officielle… Ah, voilà, faites ceci :
$ curl http:\/\/localhost:2398\/stats ou comme ça $ docker exec mtproto-proxy curl http:\/\/localhost:2398\/stats # et nous obtiendrons les statistiques directement dans le CLI."Tiens, prends le large" Selon les commandes proposées, nous recevrons toujours une erreur de ce type :
«curl: (7) Échec de la connexion au port localhost 2398 : La connexion a été refusée»
Notre proxy fonctionnera. Mais ! Nous obtiendrons un "cliquez ici", pas des statistiques.
Nous pouvons nous occuper des détails pour les rouges à yeux : vérifier
$ netstat -an | grep 2398 et...Au départ, je pensais que c'était encore une erreur des développeurs de Telegram (et je le pense encore), puis j'ai trouvé une solution temporaire pas mal : polir le conteneur Docker avec une lime.
Plus tard, j'ai trouvé des informations :
sur les danses gouvernementales de Roskomnadzor autour des « statistiques ».
« Nous avons bloqué sur nos serveurs une partie des proxy publics en utilisant les bases du projet firehol. Ce projet surveille les listes de proxy publics et crée des bases de données à leur sujet.
Depuis ce moment (cela fait donc presque deux jours), aucune adresse IP de notre proxy russe n'a été bloquée.
3. Nous expliquons comment créer un proxy presque invulnérable à Roskomnadzor et partageons un script pour bloquer les proxies publics.
— Mettez à jour le conteneur Docker (ou le démon) du proxy MTProto à la dernière version : le RKN détecte les anciennes versions par le port de statistiques, qui se liait à 0.0.0.0 et s'identifiait clairement pour tout Internet. Mieux vaut ouvrir les ports nécessaires avec iptables et fermer les autres (rappelez-vous que dans le cas d'un conteneur Docker, il faut utiliser la règle FORWARD).
— Roskomnadzor a depuis longtemps appris à intercepter le trafic : ils voient les demandes à l'intérieur des proxies HTTP et SOCKS5, et ils voient aussi l'ancienne version d'obfuscation du proxy MTProto.
Lorsque les clients de certains fournisseurs qui ont de tels interceptors se connectent à Telegram via de tels proxies, le RKN voit ces demandes et bloque immédiatement ces proxies. Il en va de même pour les proxies MTProto avec une ancienne obfuscation.
Solution : donnez aux clients qui se connectent au proxy un secret ne commençant que par dd (il n'est pas nécessaire d'indiquer des lettres supplémentaires dd dans les paramètres du proxy mtproto). Cela activera la version d'obfuscation que les interceptors ne peuvent pas détecter.
Et pas de proxies HTTP ou SOCKS5.
— Un ajustement grâce auquel chaque propriétaire de proxy Telegram, qui est régulièrement bloqué par le RKN, peut complètement (ou presque complètement) cesser les blocages (et en même temps s'assurer que le RKN ment).
Un script qui bloque les proxies publics et un petit manuel à ce sujet.
→ Source
Notre proxy est pro-occidental, je n'ai rencontré aucun problème/bloque durant les jours printaniers et frais de l'été, cela n'a pas été une tâche créative, donc je ne me suis pas occupé de la perte de rythme et n'ai pas ajouté le préfixe dd* à la clé.
Le manuel « récupération des statistiques/monitoring » selon les instructions officielles de MtprotoProxyTelegram est non fonctionnel/obsolète, il faudra réparer l'image Docker.
Nous réparons.
Le conteneur est toujours en cours d'exécution :
$ docker stop mtproto-proxy #arrête le conteneur docker en cours et démarre une nouvelle image avec le drapeau de statistique omis
$ docker run --net=host --name=mtproto-proxy2 -d -p443:443 -v proxy-config:/$data -e SECRET=votre_précédent_secret_hex telegrammessenger/proxy:latest
Vérifions les statistiques :
$ curl http://localhost:2398/statscurl: (7) Échec de la connexion à 0.0.0.0 port 2398 : Connexion refusée
Les statistiques sont toujours indisponibles .!..
Découvrons l'identifiant du conteneur docker :
$ docker psID CONTENEUR IMAGE COMMANDE CRÉÉ ÉTAT PORTS NOMS
f423c209cfdc telegrammessenger/proxy:latest '/bin/sh -c '/bin/ba…' Il y a environ une heure En cours Il y a environ une minute 0.0.0.0:443->443/tcp mtproto-proxy2
Entrons dans le conteneur docker avec notre propre politique :
$ sudo docker exec -it f423c209cfdc /bin/bash
$ apt-get update
$ apt-get install nano
$ nano -$ run.sh
Et à la toute dernière ligne du script « run.sh », ajoutons le drapeau omis :
«—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»
Ajoutez « —http-stats », cela devrait ressembler à peu près à ceci :
«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 (sauvegarder/quitter nano/quitter le conteneur).
Redémarrons notre conteneur docker :
$ docker restart mtproto-proxy2C'est bon, maintenant avec la commande :
$ curl http://localhost:2398/stats #obtenez des statistiques détaillées
Il y a beaucoup de « déchets » dans les statistiques (sur l'écran 1/3 de celle-ci), créons un alias :
$ echo "alias telega='curl localhost:2398/stats | grep -e total_special -e load_average_total'" >> .bashrc && bashObtenons ce pour quoi nous avons affiné le conteneur docker : le nombre de connexions et la charge :
$ telega
Le conteneur Docker fonctionne, les statistiques déroulent.
Ressources consommées
Peu importe à quel point tu es impressionnant, Stuart Redman, même toi tu laisses une trace de **merde** sur tes sous-vêtements. Une image Docker fonctionnelle laisse une empreinte plutôt importante.
Il n'est pas nécessaire de détailler les avantages et les inconvénients des images docker, un conteneur docker est une mini-machine virtuelle, consommant moins de ressources qu'une « vraie » machine virtuelle, comme VirtualBox, mais consommant.
1) Qu'il soit lancé avec des statistiques ou sans, que deux clients se battent ou dix, les ressources sont utilisées à peu près de la même manière : 75 % de la performance totale du CPU t2.micro.
2) Regardons la surveillance du serveur VPC :

D'après le graphique d'utilisation des ressources sur le VPC, nous voyons que le conteneur docker consomme en permanence environ 7,5 % de la performance maximale totale du CPU et le 28 mai, il a été arrêté par mes soins intentionnellement/temporairement (Remarque — OpenVPN & pptp sont également en cours d'exécution sur le serveur).
Pourquoi 10 % de charge CPU constante est-il la limite pour ce serveur ?
Parce qu'il existe des restrictions du côté d'Amazon EC2, et elles se mesurent en crédits :

1 crédit CPU = 1 CPU fonctionnant à 100 % de charge pendant une minute, et nous avons 6 crédits (c'est-à-dire qu'une utilisation maximale de 100 % du CPU est possible pendant 6 minutes, après quoi la puissance du CPU sera réduite). D'autres combinaisons : par exemple, 1 crédit CPU = 1 CPU fonctionnant à 50 % de charge pendant deux minutes (c'est-à-dire que nous pouvons utiliser le CPU avec une charge de 50 % pendant 12 minutes), ou, comme exemple, une charge CPU constante de 10 % pendant tout le temps, etc.
Conclusions
- Nous sommes une partie de la « Résistance Numérique ». Nous avons assuré à nos « parents » un canal de communication fiable.
- Si vous avez déployé MtprotoProxyTelegram et OpenVPN sur le serveur, mais pas plus, il n’y aura pas de latence/pings/coupures, mais si vous expérimentez constamment avec votre t2/micro, attendez-vous à des ralentissements de la connexion.
- Mon ping transatlantique est d'environ 100-250 ms, aucune latence n'est ressentie dans la communication vocale.
- Les coûts financiers pour tout cela (y compris les ressources VPC) = 0₽.
Reimpression de son propre article.
UPD : Merci à certains utilisateurs de Habr pour leurs commentaires utiles, il est vraiment possible (les statistiques sont-elles maintenues ?) qu'il existe de meilleures alternatives à l'image Docker officielle du proxy Mtproto de Telegram.
Source : habr.com
