Hei Habr!
Recent m-am trezit într-o situație în care era necesar să lucrez în interiorul unei rețele corporative cu acces incomplet la Internet și, după cum poți ghici din titlu, Telegram a fost blocat în ea. Sunt sigur că această situație este familiară pentru mulți.
Mă descurc fără mesagerie instant, dar Telegram aveam nevoie pentru muncă. Nu a fost posibilă instalarea clientului pe o mașină de lucru și nici nu a fost posibilă utilizarea unui laptop personal. O altă soluție pare să fie folosirea ei
Din fericire, Webogram este un proiect open source al cărui cod sursă este disponibil în
Instalarea și lansarea în sine nu sunt dificile, totuși, în condițiile de funcționare într-o rețea cu acces blocat la serverele Telegram, veți fi mai probabil să fiți dezamăgit decât reușit, deoarece versiunea web trimite solicitări către serverele Telegram de pe computerul utilizatorului.
Din fericire, aceasta este o soluție destul de simplă (dar nu foarte evidentă). Aș dori să vă avertizez că nu eu sunt autorul acestei soluții. Am reusit sa-l gasesc in
Sub tăietură veți găsi configurarea pas cu pas a oglinzii dvs. Webogram și configurarea proxy-ului cererilor sale către serverele Telegram folosind nginx.
De exemplu, am ales un Ubuntu Server 18.04.3 proaspăt instalat și actualizat.
Atenție: Acest tutorial nu va include instrucțiuni despre configurarea unui domeniu în nginx. Trebuie să faci asta singur. Tutorialul presupune că ați configurat deja un domeniu cu ssl și că serverul însuși pe care intenționați să îl configurați are acces la serverele Telegram (în orice mod doriți)
Să presupunem că ip-ul acestui server este 10.23.0.3, iar numele domeniului este mywebogram.localhost
Pe baza acestor convenții, voi da exemple de configurații. Nu uitați să schimbați valorile cu propriile dvs.
Deci, să începem:
Pentru a rula Webogram, avem nevoie de nodejs. În mod implicit, dacă îl instalăm din depozitele Ubuntu, vom obține versiunea 8.x a nodejs. Avem nevoie de 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Alegem locul unde se va baza Webograma.
De exemplu, să-l plasăm în rădăcina directorului principal. Pentru a face acest lucru, clonați depozitul oficial pe serverul nostru:
cd ~ && git clone https://github.com/zhukov/webogram.git
Următorul pas este să instalați toate dependențele necesare pentru a rula aplicația:
cd webogram && npm install
Să încercăm un test de rulare. Rulați comanda:
npm start
După aceea, încercăm să-l deschidem în browser
http://10.23.0.3:8000/app/index.html
Dacă până în acest moment ați făcut totul corect, se va deschide pagina de autorizare Webogram.
Acum trebuie să configuram aplicația să ruleze ca serviciu. Pentru a face acest lucru, să creăm un fișier
sudo touch /lib/systemd/system/webogram.service
deschideți-l în orice editor și dați-i următorul aspect (introduceți calea către WorkDirectory)
[Unit]
Description=Webogram mirror
[Service]
WorkingDirectory=/home/tg/webogram
ExecStart=/usr/bin/npm start
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Apoi rulăm următoarele comenzi:
Aplicarea modificărilor
sudo systemctl daemon-reload
Activați rularea automată:
sudo systemctl enable webogram.service
Să începem serviciul:
sudo systemctl start webogram.service
După finalizarea pașilor, Webogram va continua să fie disponibil pe portul 8000.
Deoarece vom configura accesul la Webograma prin nginx, vom închide portul 8000 pentru solicitările din exterior.
Folosim utilitarul udf pentru aceasta (sau orice metodă convenabilă pentru dvs.):
sudo ufw deny 8000
În cazul în care tot decideți să utilizați udf, dar este dezactivat pe server, adăugați mai multe reguli (pentru ca totul să nu se destrame) și activați udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
În continuare, să începem să schimbăm configurația nginx.
După cum am avertizat mai sus, se presupune că un domeniu cu ssl este deja configurat pe serverul dumneavoastră. Vă voi atrage atenția doar asupra a ceea ce va trebui adăugat la fișierul de configurare a domeniului pentru ca acesta să funcționeze corect:
server {
...
location ^~ /pluto/apiw1/ {
proxy_pass https://pluto.web.telegram.org/apiw1/;
}
location ^~ /venus/apiw1/ {
proxy_pass https://venus.web.telegram.org/apiw1/;
}
location ^~ /aurora/apiw1/ {
proxy_pass https://aurora.web.telegram.org/apiw1/;
}
location ^~ /vesta/apiw1/ {
proxy_pass https://vesta.web.telegram.org/apiw1/;
}
location ^~ /flora/apiw1/ {
proxy_pass https://flora.web.telegram.org/apiw1/;
}
location ^~ /pluto-1/apiw1/ {
proxy_pass https://pluto-1.web.telegram.org/apiw1/;
}
location ^~ /venus-1/apiw1/ {
proxy_pass https://venus-1.web.telegram.org/apiw1/;
}
location ^~ /aurora-1/apiw1/ {
proxy_pass https://aurora-1.web.telegram.org/apiw1/;
}
location ^~ /vesta-1/apiw1/ {
proxy_pass https://vesta-1.web.telegram.org/apiw1/;
}
location ^~ /flora-1/apiw1/ {
proxy_pass https://flora-1.web.telegram.org/apiw1/;
}
location ^~ /DC1/ {
proxy_pass http://149.154.175.10:80/;
}
location ^~ /DC2/ {
proxy_pass http://149.154.167.40:80/;
}
location ^~ /DC3/ {
proxy_pass http://149.154.175.117:80/;
}
location ^~ /DC4/ {
proxy_pass http://149.154.175.50:80/;
}
location ^~ /DC5/ {
proxy_pass http://149.154.167.51:80/;
}
location ^~ /DC6/ {
proxy_pass http://149.154.175.100:80/;
}
location ^~ /DC7/ {
proxy_pass http://149.154.167.91:80/;
}
location ^~ /DC8/ {
proxy_pass http://149.154.171.5:80/;
}
location / {
auth_basic "tg";
auth_basic_user_file /etc/nginx/passwd.htpasswd;
proxy_pass http://localhost:8000/;
proxy_read_timeout 90s;
proxy_connect_timeout 90s;
proxy_send_timeout 90s;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Ce adăugăm la configurația nginx:
- Schimbăm locația rădăcină, care va trimite solicitările proxy către portul 8000, la care răspunde Webogram
- Închidem locația rădăcină folosind basic-auth. Acesta este un pas pur simbolic pentru a închide aplicația noastră de privirile indiscrete și roboții. (Și, de asemenea, pentru a evita problemele cu blocarea)
- O grămadă de locații cu proxy_path pe serverul Telegram sunt exact punctele noastre finale prin care vom trimite cererile noastre.
De asemenea, să creăm un fișier /etc/nginx/passwd.htpasswd;
astfel încât nginx să aibă cu ce să verifice parolele utilizatorilor.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Reporniți nginx:
sudo systemctl restart nginx
Acum Webogram va fi disponibil doar la
A mai rămas puțin: vom face mici modificări proiectului în sine.
Deschideți fișierul într-un editor ~/webogram/app/js/lib/mtproto.js
Și aduceți începutul său la următoarea formă:
/*!
* Webogram v0.7.0 - messaging web application for MTProto
* https://github.com/zhukov/webogram
* Copyright (C) 2014 Igor Zhukov <[email protected]>
* https://github.com/zhukov/webogram/blob/master/LICENSE
*/
angular.module('izhukov.mtproto', ['izhukov.utils'])
.factory('MtpDcConfigurator', function () {
var sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora']
var dcOptions = Config.Modes.test
? [
{id: 1, host: 'mywebogram.localhost/DC1', port: 80},
{id: 2, host: 'mywebogram.localhost/DC2', port: 80},
{id: 3, host: 'mywebogram.localhost/DC3', port: 80}
]
: [
{id: 1, host: 'mywebogram.localhost/DC4', port: 80},
{id: 2, host: 'mywebogram.localhost/DC5', port: 80},
{id: 3, host: 'mywebogram.localhost/DC6', port: 80},
{id: 4, host: 'mywebogram.localhost/DC7', port: 80},
{id: 5, host: 'mywebogram.localhost/DC8', port: 80}
]
var chosenServers = {}
function chooseServer (dcID, upload) {
if (chosenServers[dcID] === undefined) {
var chosenServer = false,
i, dcOption
if (Config.Modes.ssl || !Config.Modes.http) {
var subdomain = sslSubdomains[dcID - 1] + (upload ? '-1' : '')
var path = Config.Modes.test ? 'apiw_test1' : '/apiw1/'
chosenServer = 'https://mywebogram.localhost/' + subdomain + path
return chosenServer
}
for (i = 0; i < dcOptions.length; i++) {
dcOption = dcOptions[i]
if (dcOption.id == dcID) {
chosenServer = 'http://' + dcOption.host + '/apiw1'
break
}
}
chosenServers[dcID] = chosenServer
}
...
După aceasta, trebuie să reîmprospătați pagina aplicației în browser.
Deschideți consola browserului și uitați-vă la solicitările de rețea ale aplicației. Dacă totul funcționează și solicitările XHR ajung la serverul dvs., atunci totul este făcut corect, iar Webogram este acum trimis prin proxy prin nginx.
Sper că acest tutorial va fi de folos altcuiva în afară de mine.
Multumesc mult tuturor celor care au citit pana la sfarsit.
Dacă cineva are dificultăți sau am făcut inexactități, voi răspunde cu plăcere și voi încerca să vă ajut în comentarii sau în PM.
Sursa: www.habr.com