Hej Habr!
Nedavno sam se našao u situaciji u kojoj je bilo potrebno raditi unutar korporativne mreže s nepotpunim pristupom internetu i, kao što možete pretpostaviti iz naslova, Telegram je u njoj bio blokiran. Siguran sam da je ova situacija mnogima poznata.
Mogu bez instant messengera, ali za posao mi je bio potreban Telegram. Nije bilo moguće instalirati klijenta na radnu mašinu, niti je bilo moguće koristiti lični laptop. Čini se da je još jedno rješenje koristiti ga
Srećom, Webogram je projekat otvorenog koda čiji je izvorni kod dostupan
Sama instalacija i pokretanje nije teška, međutim, u uvjetima rada unutar mreže sa blokiranim pristupom Telegram serverima, vjerojatnije je da ćete biti razočarani nego uspješni, jer web verzija šalje zahtjeve Telegram serverima sa računara korisnika.
Srećom, ovo je prilično jednostavno (ali ne baš očigledno) rješenje. Upozoravam da ja nisam autor ovog rješenja. Uspeo sam da ga nađem
Ispod reza ćete pronaći korak po korak podešavanje vašeg Webogram ogledala i podešavanje proxyja njegovih zahtjeva na Telegram servere koristeći nginx.
Kao primjer, izabrao sam svježe instalirani i ažurirani Ubuntu Server 18.04.3.
Upozorenje: Ovaj vodič neće uključivati upute o postavljanju domene u nginxu. Ovo morate sami da uradite. Tutorijal pretpostavlja da ste već konfigurisali domenu sa ssl-om i da sam server na kojem planirate da ga konfigurišete ima pristup Telegram serverima (na koji god način želite)
Pretpostavimo da je ip ovog servera 10.23.0.3, a ime domene mywebogram.localhost
Na osnovu ovih konvencija dat ću primjere konfiguracija. Ne zaboravite da promijenite vrijednosti u svoje.
Hajde da počnemo:
Za pokretanje Webograma potrebni su nam nodejs. Podrazumevano, ako ga instaliramo iz Ubuntu repozitorija, dobićemo nodejs verziju 8.x. Trebamo 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Mi biramo mjesto gdje će se nalaziti naš Webogram.
Na primjer, stavimo ga u korijen matičnog direktorija. Da biste to učinili, klonirajte službeno spremište na naš server:
cd ~ && git clone https://github.com/zhukov/webogram.git
Sljedeći korak je instaliranje svih zavisnosti potrebnih za pokretanje aplikacije:
cd webogram && npm install
Pokušajmo probno. Pokrenite naredbu:
npm start
Nakon toga pokušavamo da ga otvorimo u pretraživaču
http://10.23.0.3:8000/app/index.html
Ako ste do ovog trenutka sve uradili kako treba, otvoriće se stranica za autorizaciju Webograma.
Sada moramo konfigurirati aplikaciju da radi kao servis. Da bismo to učinili, napravimo datoteku
sudo touch /lib/systemd/system/webogram.service
otvorite ga u bilo kojem uređivaču i dajte mu sljedeći izgled (unesite svoju putanju do 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
Zatim pokrećemo sljedeće komande:
Primjena promjena
sudo systemctl daemon-reload
Omogući automatsko pokretanje:
sudo systemctl enable webogram.service
Pokrenimo uslugu:
sudo systemctl start webogram.service
Nakon dovršetka koraka, Webogram će i dalje biti dostupan na portu 8000.
Budući da ćemo podesiti pristup našem Webogramu putem nginxa, zatvorit ćemo port 8000 za zahtjeve izvana.
Za ovo koristimo udf uslužni program (ili bilo koju metodu koja vam odgovara):
sudo ufw deny 8000
U slučaju da se ipak odlučite koristiti udf, ali je na serveru onemogućen, dodajte još pravila (da se sve ne raspadne) i omogućite udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Zatim počnimo mijenjati nginx konfiguraciju.
Kao što sam prethodno upozorio, pretpostavlja se da je domen sa ssl već konfigurisan na vašem serveru. Skrenut ću vam pažnju samo na ono što je potrebno dodati u konfiguracijski fajl domene da bi ispravno funkcionisao:
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;
}
}
Šta dodajemo u nginx konfiguraciju:
- Mijenjamo korijensku lokaciju, koja će proxy zahtjeve na port 8000, na koji Webogram odgovara
- Zatvaramo korijensku lokaciju koristeći basic-auth. Ovo je čisto simboličan korak za zatvaranje naše aplikacije od znatiželjnih očiju i botova. (A i da biste izbjegli probleme sa blokiranjem)
- Gomila lokacija sa proxy_path na Telegram serveru su upravo naše krajnje tačke preko kojih ćemo proxy naše zahtjeve
Takođe, napravimo fajl /etc/nginx/passwd.htpasswd;
tako da nginx ima čime provjeriti korisničke lozinke.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Ponovo pokrenite nginx:
sudo systemctl restart nginx
Sada će Webogram biti dostupan samo na adresi
Ostalo je malo: napravićemo male izmene u samom projektu.
Otvorite datoteku u uređivaču ~/webogram/app/js/lib/mtproto.js
I dovesti njegov početak u sljedeći oblik:
/*!
* 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
}
...
Nakon toga morate osvježiti stranicu aplikacije u pretraživaču.
Otvorite konzolu pretraživača i pogledajte mrežne zahtjeve aplikacije. Ako sve radi i XHR zahtjevi idu na vaš server, onda je sve urađeno kako treba, a Webogram je sada proksi preko nginxa.
Nadam se da će ovaj tutorijal biti koristan još nekome osim meni.
Veliko hvala svima koji su pročitali do kraja.
Ako neko ima poteškoća ili sam napravio neke nepreciznosti, rado ću odgovoriti i pokušati vam pomoći u komentarima ili PM.
izvor: www.habr.com