Čau Habr!
Nedávno jsem se dostal do situace, kdy bylo nutné pracovat uvnitř podnikové sítě s neúplným přístupem k internetu a jak už z názvu tušíte, byl v ní zablokován Telegram. Jsem si jist, že tato situace je mnohým známá.
Bez instant messengerů se obejdu, ale byl to Telegram, který jsem potřeboval k práci. Klienta nebylo možné nainstalovat na pracovní stroj a nebylo možné použít ani osobní notebook. Dalším řešením se zdá být použití
Naštěstí je Webogram open source projekt, jehož zdrojový kód je dostupný v
Samotná instalace a spuštění není obtížné, nicméně v podmínkách provozu v síti s blokovaným přístupem k serverům telegramu budete spíše zklamáni než úspěšní, protože webová verze odesílá požadavky na servery telegramu ze stroje uživatele.
Naštěstí se jedná o poměrně jednoduchou (ale ne příliš zřejmou) opravu. Upozorňuji, že nejsem autorem tohoto řešení. Podařilo se mi to najít v
Pod řezem najdete krok za krokem nastavení vašeho zrcadla Webogramu a nastavení proxy jeho požadavků na telegramové servery pomocí nginx.
Jako příklad jsem zvolil čerstvě nainstalovaný a aktualizovaný Ubuntu Server 18.04.3.
Poznámka: Tento tutoriál nebude obsahovat pokyny pro nastavení domény v nginx. Musíte to udělat sami. Výukový program předpokládá, že jste již nakonfigurovali doménu s ssl a že samotný server, na kterém ji plánujete nakonfigurovat, má přístup k serverům telegramu (jakýmkoli způsobem).
Předpokládejme, že ip tohoto serveru je 10.23.0.3 a název domény je mywebogram.localhost
Na základě těchto konvencí uvedu příklady konfigurací. Nezapomeňte změnit hodnoty na své vlastní.
Začněme tedy:
Ke spuštění Webogramu potřebujeme nodejs. Ve výchozím nastavení, pokud jej nainstalujeme z repozitářů Ubuntu, získáme nodejs verze 8.x. Potřebujeme 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Vybíráme místo, kde bude náš Webogram založen.
Umístíme jej například do kořenového adresáře domovského adresáře. Chcete-li to provést, naklonujte oficiální úložiště na náš server:
cd ~ && git clone https://github.com/zhukov/webogram.git
Dalším krokem je instalace všech závislostí potřebných ke spuštění aplikace:
cd webogram && npm install
Zkusíme zkušební provoz. Spusťte příkaz:
npm start
Poté se jej pokusíme otevřít v prohlížeči
http://10.23.0.3:8000/app/index.html
Pokud jste do této chvíle udělali vše správně, otevře se stránka autorizace Webogramu.
Nyní musíme nakonfigurovat aplikaci, aby běžela jako služba. Chcete-li to provést, vytvořte soubor
sudo touch /lib/systemd/system/webogram.service
otevřete jej v libovolném editoru a dejte mu následující vzhled (zadejte svou 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
Poté spustíme následující příkazy:
Uplatnění změn
sudo systemctl daemon-reload
Povolit automatické spouštění:
sudo systemctl enable webogram.service
Začněme službu:
sudo systemctl start webogram.service
Po dokončení kroků bude Webogram nadále dostupný na portu 8000.
Vzhledem k tomu, že budeme nastavovat přístup k našemu Webogramu přes nginx, uzavřeme port 8000 pro požadavky zvenčí.
K tomu používáme nástroj udf (nebo jakoukoli vhodnou metodu):
sudo ufw deny 8000
V případě, že se přesto rozhodnete používat udf, ale na serveru je zakázáno, přidejte další pravidla (aby se vše nerozpadlo) a povolte udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Dále začněme měnit konfiguraci nginx.
Jak jsem varoval výše, předpokládá se, že doména s ssl je již na vašem serveru nakonfigurována. Upozorňuji pouze na to, co bude potřeba přidat do konfiguračního souboru domény, aby správně 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;
}
}
Co přidáme do konfigurace nginx:
- Změníme kořenové umístění, které bude proxy požadavky na port 8000, na který Webogram odpovídá
- Uzavřeme kořenové umístění pomocí základního ověření. Toto je čistě symbolický krok k uzavření naší aplikace před zvědavýma očima a roboty. (A také abyste se vyhnuli problémům s blokováním)
- Spousta míst s proxy_path na serveru Telegram jsou přesně naše koncové body, přes které budeme zastupovat naše požadavky
Pojďme také vytvořit soubor /etc/nginx/passwd.htpasswd;
aby měl nginx čím kontrolovat uživatelská hesla.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Restartujte nginx:
sudo systemctl restart nginx
Nyní bude Webogram dostupný pouze na
Zbývá málo: provedeme malé změny v samotném projektu.
Otevřete soubor v editoru ~/webogram/app/js/lib/mtproto.js
A převeďte jeho začátek do následující 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
}
...
Poté musíte obnovit stránku aplikace v prohlížeči.
Otevřete konzolu prohlížeče a podívejte se na síťové požadavky aplikace. Pokud vše funguje a požadavky XHR jdou na váš server, pak je vše provedeno správně a Webogram je nyní proxy přes nginx.
Doufám, že tento tutoriál bude užitečný i pro někoho dalšího kromě mě.
Moc děkuji všem, kteří dočetli až do konce.
Pokud by měl někdo nějaké potíže nebo jsem udělal nějaké nepřesnosti, rád odpovím a pokusím se pomoci v komentářích nebo v PM.
Zdroj: www.habr.com