Hei Habr!
Nylig befant jeg meg i en situasjon der det var nødvendig å jobbe i et bedriftsnettverk med ufullstendig tilgang til Internett, og som du kan gjette fra tittelen, ble Telegram blokkert i det. Jeg er sikker på at denne situasjonen er kjent for mange.
Jeg kan klare meg uten instant messengers, men det var Telegram jeg trengte på jobb. Det var ikke mulig å installere klienten på en arbeidsmaskin, og det var heller ikke mulig å bruke en personlig bærbar PC. En annen løsning ser ut til å være å bruke den
Heldigvis er Webogram et åpen kildekode-prosjekt hvis kildekode er tilgjengelig i
Selve installasjonen og lanseringen er ikke vanskelig, men under driftsforhold i et nettverk med blokkert tilgang til Telegram-servere, vil du være mer sannsynlig å bli skuffet enn vellykket, siden webversjonen sender forespørsler til Telegram-servere fra brukerens maskin.
Heldigvis er dette en ganske enkel (men ikke veldig åpenbar) løsning. Jeg vil advare deg om at jeg ikke er forfatteren av denne løsningen. Jeg klarte å finne den inn
Under kuttet finner du trinn-for-trinn-oppsett av Webogram-speilet ditt og oppsett for proxying av forespørsler til Telegram-servere ved hjelp av nginx.
Som et eksempel valgte jeg en nyinstallert og oppdatert Ubuntu Server 18.04.3.
Advarsel: Denne opplæringen vil ikke inneholde instruksjoner om å sette opp et domene i nginx. Du må gjøre dette selv. Opplæringen forutsetter at du allerede har konfigurert et domene med ssl, og at selve serveren som du planlegger å konfigurere den på har tilgang til Telegram-serverne (på hvilken som helst måte du vil)
La oss anta at ip-en til denne serveren er 10.23.0.3, og domenenavnet er mywebogram.localhost
Med utgangspunkt i disse konvensjonene vil jeg gi eksempler på konfigurasjoner. Ikke glem å endre verdiene til dine egne.
Så la oss komme i gang:
For å kjøre Webogram trenger vi nodejs. Som standard, hvis vi installerer det fra Ubuntu-repositoriene, får vi nodejs versjon 8.x. Vi trenger 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Vi velger stedet hvor webprogrammet vårt skal være basert.
La oss for eksempel plassere den i roten til hjemmekatalogen. For å gjøre dette, klone det offisielle depotet til serveren vår:
cd ~ && git clone https://github.com/zhukov/webogram.git
Det neste trinnet er å installere alle avhengighetene som kreves for å kjøre applikasjonen:
cd webogram && npm install
La oss prøve en prøvekjøring. Kjør kommandoen:
npm start
Etter det prøver vi å åpne den i nettleseren
http://10.23.0.3:8000/app/index.html
Hvis du til dette punktet har gjort alt riktig, åpnes webogram-autorisasjonssiden.
Nå må vi konfigurere applikasjonen til å kjøre som en tjeneste. For å gjøre dette, la oss lage en fil
sudo touch /lib/systemd/system/webogram.service
åpne den i hvilken som helst editor og gi den følgende utseende (skriv inn banen til 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
Deretter kjører vi følgende kommandoer:
Bruker endringene
sudo systemctl daemon-reload
Aktiver autorun:
sudo systemctl enable webogram.service
La oss starte tjenesten:
sudo systemctl start webogram.service
Etter å ha fullført trinnene, vil Webogram fortsette å være tilgjengelig på port 8000.
Siden vi skal sette opp tilgang til webgrammet vårt via nginx, vil vi stenge port 8000 for forespørsler utenfra.
Vi bruker udf-verktøyet for dette (eller en hvilken som helst metode som er praktisk for deg):
sudo ufw deny 8000
I tilfelle du fortsatt bestemmer deg for å bruke udf, men den er deaktivert på serveren, legg til flere regler (slik at alt ikke faller fra hverandre) og aktiver udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
La oss deretter begynne å endre nginx-konfigurasjonen.
Som jeg advarte ovenfor, antas det at et domene med ssl allerede er konfigurert på serveren din. Jeg vil bare gjøre deg oppmerksom på hva som må legges til i domenekonfigurasjonsfilen for at den skal fungere riktig:
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;
}
}
Hva vi legger til nginx-konfigurasjonen:
- Vi endrer rotplasseringen, som vil proxy-forespørsler til port 8000, som Webogram svarer på
- Vi lukker rotplasseringen ved å bruke basic-auth. Dette er et rent symbolsk skritt for å lukke applikasjonen vår fra nysgjerrige øyne og roboter. (Og også for å unngå problemer med blokkering)
- En haug med lokasjoner med proxy_path på Telegram-serveren er nøyaktig våre endepunkter som vi vil proxy-tjene våre forespørsler gjennom
La oss også lage en fil /etc/nginx/passwd.htpasswd;
slik at nginx har noe å sjekke brukerpassord med.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Start nginx på nytt:
sudo systemctl restart nginx
Nå vil Webogram kun være tilgjengelig kl
Det er lite igjen: vi skal gjøre små endringer i selve prosjektet.
Åpne filen i et redigeringsprogram ~/webogram/app/js/lib/mtproto.js
Og bring begynnelsen til følgende 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
}
...
Etter dette må du oppdatere applikasjonssiden i nettleseren.
Åpne nettleserkonsollen og se på applikasjonens nettverksforespørsler. Hvis alt fungerer og XHR-forespørsler går til serveren din, er alt gjort riktig, og Webogram er nå proxy via nginx.
Jeg håper at denne opplæringen vil være nyttig for noen andre enn meg.
Tusen takk til alle som leser til slutt.
Hvis noen har noen problemer eller jeg har gjort noen unøyaktigheter, svarer jeg gjerne og prøver å hjelpe deg i kommentarfeltet eller i PM.
Kilde: www.habr.com