Hej Habr!
For nylig befandt jeg mig i en situation, hvor det var nødvendigt at arbejde i et virksomhedsnetværk med ufuldstændig adgang til internettet, og som du kan gætte fra titlen, blev Telegram blokeret i det. Jeg er sikker på, at denne situation er kendt for mange.
Jeg kan undvære instant messengers, men det var Telegram, jeg havde brug for til arbejdet. Det var ikke muligt at installere klienten på en arbejdsmaskine, og det var heller ikke muligt at bruge en personlig bærbar computer. En anden løsning ser ud til at være at bruge den
Heldigvis er Webogram et open source-projekt, hvis kildekode er tilgængelig i
Selve installationen og lanceringen er ikke vanskelig, men under driftsforhold inden for et netværk med blokeret adgang til Telegram-servere vil du være mere tilbøjelig til at blive skuffet end vellykket, da webversionen sender anmodninger til Telegram-servere fra brugerens maskine.
Heldigvis er dette en ret simpel (men ikke særlig indlysende) løsning. Jeg vil gerne advare dig om, at jeg ikke er forfatteren til denne løsning. Det lykkedes mig at finde den
Under klippet finder du trin-for-trin opsætning af dit Webogram-spejl og opsætning af proxy-forespørgsler til Telegram-servere ved hjælp af nginx.
Som et eksempel valgte jeg en nyinstalleret og opdateret Ubuntu Server 18.04.3.
Advarsel: Denne vejledning indeholder ikke instruktioner om opsætning af et domæne i nginx. Du skal selv gøre dette. Selvstudiet forudsætter, at du allerede har konfigureret et domæne med ssl, og at selve serveren, som du planlægger at konfigurere den på, har adgang til Telegram-serverne (på hvilken som helst måde du vil)
Lad os antage, at denne servers ip er 10.23.0.3, og domænenavnet er mywebogram.localhost
Med udgangspunkt i disse konventioner vil jeg give eksempler på konfigurationer. Glem ikke at ændre værdierne til dine egne.
Så lad os komme i gang:
For at køre Webogram har vi brug for nodejs. Som standard, hvis vi installerer det fra Ubuntu-lagrene, får vi nodejs version 8.x. Vi skal bruge 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Vi vælger det sted, hvor vores webogram vil være baseret.
Lad os f.eks. placere det i roden af hjemmemappen. For at gøre dette skal du klone det officielle lager til vores server:
cd ~ && git clone https://github.com/zhukov/webogram.git
Det næste trin er at installere alle de afhængigheder, der kræves for at køre programmet:
cd webogram && npm install
Lad os prøve en testkørsel. Kør kommandoen:
npm start
Derefter forsøger vi at åbne den i browseren
http://10.23.0.3:8000/app/index.html
Hvis du indtil dette tidspunkt har gjort alt korrekt, åbnes Webogram-autorisationssiden.
Nu skal vi konfigurere applikationen til at køre som en tjeneste. For at gøre dette, lad os oprette en fil
sudo touch /lib/systemd/system/webogram.service
åbn den i en hvilken som helst editor og giv den følgende udseende (indtast din sti 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
Derefter kører vi følgende kommandoer:
Anvendelse af ændringerne
sudo systemctl daemon-reload
Aktiver autorun:
sudo systemctl enable webogram.service
Lad os starte tjenesten:
sudo systemctl start webogram.service
Efter at have gennemført trinene, vil Webogram fortsat være tilgængelig på port 8000.
Da vi vil konfigurere adgang til vores webogram via nginx, lukker vi port 8000 for anmodninger udefra.
Vi bruger udf-værktøjet til dette (eller en hvilken som helst metode, der er praktisk for dig):
sudo ufw deny 8000
Hvis du stadig beslutter dig for at bruge udf, men det er deaktiveret på serveren, skal du tilføje flere regler (så alt ikke falder fra hinanden) og aktivere udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Lad os derefter begynde at ændre nginx-konfigurationen.
Som jeg advarede ovenfor, antages det, at et domæne med ssl allerede er konfigureret på din server. Jeg vil kun henlede din opmærksomhed på, hvad der skal tilføjes til domænekonfigurationsfilen, for at den fungerer korrekt:
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;
}
}
Hvad vi tilføjer til nginx-konfigurationen:
- Vi ændrer rodplaceringen, som vil proxy-anmodninger til port 8000, som Webogram svarer på
- Vi lukker rodplaceringen ved hjælp af basic-auth. Dette er et rent symbolsk skridt til at lukke vores applikation fra nysgerrige øjne og bots. (Og også for at undgå problemer med blokering)
- En masse lokationer med proxy_path på Telegram-serveren er præcis vores endepunkter, hvorigennem vi vil proxy for vores anmodninger
Lad os også oprette en fil /etc/nginx/passwd.htpasswd;
så nginx har noget at tjekke brugeradgangskoder med.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Genstart nginx:
sudo systemctl restart nginx
Nu vil Webogram kun være tilgængeligt kl
Der er lidt tilbage: vi vil lave små ændringer i selve projektet.
Åbn filen i en editor ~/webogram/app/js/lib/mtproto.js
Og bring dens begyndelse 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
}
...
Herefter skal du opdatere applikationssiden i browseren.
Åbn din browserkonsol og se på applikationens netværksanmodninger. Hvis alt fungerer, og XHR-anmodninger går til din server, så er alt gjort korrekt, og Webogram er nu proxy via nginx.
Jeg håber, at denne tutorial vil være nyttig for en anden end mig.
Tusind tak til alle, der læste til slutningen.
Hvis nogen har problemer, eller jeg har lavet nogle unøjagtigheder, vil jeg med glæde svare og forsøge at hjælpe dig i kommentarerne eller i PM.
Kilde: www.habr.com