Čau Habr!
Nedávno som sa ocitol v situácii, v ktorej bolo potrebné pracovať vo vnútri podnikovej siete s neúplným prístupom na internet a ako už z názvu tušíte, bol v nej zablokovaný telegram. Som si istý, že táto situácia je mnohým známa.
Môžem sa zaobísť bez okamžitých správ, ale bol to Telegram, ktorý som potreboval na prácu. Klienta nebolo možné nainštalovať na pracovný stroj a nebolo možné použiť ani osobný notebook. Ďalším riešením sa zdá byť použitie
Našťastie je Webogram open source projekt, ktorého zdrojový kód je dostupný v
Samotná inštalácia a spustenie nie je ťažké, avšak v podmienkach prevádzky v rámci siete s zablokovaným prístupom k serverom telegramu budete skôr sklamaní ako úspešní, pretože webová verzia odosiela požiadavky na servery telegramu zo stroja používateľa.
Našťastie je to pomerne jednoduchá (ale nie príliš zrejmá) oprava. Upozorňujem, že nie som autorom tohto riešenia. Podarilo sa mi to nájsť v
Pod strihom nájdete krok za krokom nastavenie vášho zrkadla Webogramu a nastavenie proxy jeho požiadaviek na telegramové servery pomocou nginx.
Ako príklad som vybral čerstvo nainštalovaný a aktualizovaný server Ubuntu 18.04.3.
varovanie: Tento tutoriál nebude obsahovať pokyny na nastavenie domény v nginx. Musíte to urobiť sami. Výukový program predpokladá, že ste už nakonfigurovali doménu s ssl a že samotný server, na ktorom ju plánujete nakonfigurovať, má prístup k serverom telegramu (akýmkoľvek spôsobom chcete)
Predpokladajme, že ip tohto servera je 10.23.0.3 a názov domény je mywebogram.localhost
Na základe týchto konvencií uvediem príklady konfigurácií. Nezabudnite zmeniť hodnoty na svoje vlastné.
Začnime teda:
Na spustenie Webogramu potrebujeme nodejs. V predvolenom nastavení, ak ho nainštalujeme z repozitárov Ubuntu, dostaneme nodejs verziu 8.x. Potrebujeme 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Vyberáme miesto, kde bude náš Webogram založený.
Umiestnime ho napríklad do koreňového adresára domovského adresára. Ak to chcete urobiť, naklonujte oficiálne úložisko na náš server:
cd ~ && git clone https://github.com/zhukov/webogram.git
Ďalším krokom je inštalácia všetkých závislostí potrebných na spustenie aplikácie:
cd webogram && npm install
Skúsme skúšobnú prevádzku. Spustite príkaz:
npm start
Potom sa ho pokúsime otvoriť v prehliadači
http://10.23.0.3:8000/app/index.html
Ak ste až do tohto bodu urobili všetko správne, otvorí sa stránka autorizácie Webogramu.
Teraz musíme nakonfigurovať aplikáciu, aby bežala ako služba. Ak to chcete urobiť, vytvorte súbor
sudo touch /lib/systemd/system/webogram.service
otvorte ho v ľubovoľnom editore a dajte mu nasledujúci vzhľad (zadajte svoju cestu k 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
Potom spustíme nasledujúce príkazy:
Aplikovanie zmien
sudo systemctl daemon-reload
Povoliť automatické spustenie:
sudo systemctl enable webogram.service
Začnime službu:
sudo systemctl start webogram.service
Po dokončení krokov bude Webogram naďalej dostupný na porte 8000.
Keďže budeme nastavovať prístup k nášmu Webogramu cez nginx, zatvoríme port 8000 pre požiadavky zvonku.
Na tento účel používame nástroj udf (alebo akúkoľvek vhodnú metódu):
sudo ufw deny 8000
V prípade, že sa stále rozhodnete používať udf, ale je na serveri zakázané, pridajte ďalšie pravidlá (aby sa všetko nerozpadlo) a povoľte udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Ďalej začnime meniť konfiguráciu nginx.
Ako som varoval vyššie, predpokladá sa, že doména s ssl je už na vašom serveri nakonfigurovaná. Len upriamim vašu pozornosť na to, čo bude potrebné pridať do konfiguračného súboru domény, aby správne fungoval:
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;
}
}
Čo pridáme do konfigurácie nginx:
- Zmeníme koreňové umiestnenie, ktoré bude proxy požadovať port 8000, na ktorý Webogram odpovedá
- Zatvoríme koreňové umiestnenie pomocou základného overenia. Toto je čisto symbolický krok na zatvorenie našej aplikácie pred zvedavými očami a robotmi. (A tiež aby ste sa vyhli problémom s blokovaním)
- Množstvo miest s proxy_path na telegramovom serveri sú presne naše koncové body, cez ktoré budeme zastupovať naše požiadavky
Tiež si vytvoríme súbor /etc/nginx/passwd.htpasswd;
aby mal nginx niečo na kontrolu používateľských hesiel.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Reštartujte nginx:
sudo systemctl restart nginx
Teraz bude Webogram dostupný iba na
Zostáva málo: urobíme malé zmeny v samotnom projekte.
Otvorte súbor v editore ~/webogram/app/js/lib/mtproto.js
A priveďte jeho začiatok do nasledujúcej podoby:
/*!
* 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
}
...
Potom musíte obnoviť stránku aplikácie v prehliadači.
Otvorte konzolu prehliadača a pozrite sa na sieťové požiadavky aplikácie. Ak všetko funguje a požiadavky XHR idú na váš server, potom je všetko vykonané správne a Webogram je teraz proxy cez nginx.
Dúfam, že tento tutoriál bude užitočný aj pre niekoho iného okrem mňa.
Veľká vďaka všetkým, ktorí dočítali až do konca.
Ak by mal niekto nejaké ťažkosti alebo som urobil nejaké nepresnosti, rád odpoviem a pokúsim sa pomôcť v komentároch alebo v PM.
Zdroj: hab.com