Szia Habr!
Nemrég olyan helyzetbe kerültem, hogy egy vállalati hálózaton belül kellett dolgozni, hiányos internet-hozzáféréssel, és ahogy a címből sejthető, a Telegram blokkolva volt benne. Biztos vagyok benne, hogy ez a helyzet sokak számára ismerős.
Megteszem az azonnali üzenetküldőket, de a Telegramra volt szükségem a munkához. Nem lehetett munkagépre telepíteni a klienst, és nem lehetett személyes laptopot sem használni. Egy másik megoldásnak tűnik a használata
Szerencsére a Webogram egy nyílt forráskódú projekt, amelynek forráskódja elérhető
Maga a telepítés és az indítás nem nehéz, azonban a Telegram-szerverekhez való blokkolt hozzáférésű hálózaton belüli működési feltételek mellett nagyobb valószínűséggel lesz csalódott, mint sikeres, mivel a webes verzió kéréseket küld a Telegram-kiszolgálóknak a felhasználó gépéről.
Szerencsére ez egy meglehetősen egyszerű (de nem túl nyilvánvaló) javítás. Szeretném figyelmeztetni, hogy ennek a megoldásnak nem én vagyok a szerzője. Sikerült megtalálnom benne
A kivágás alatt a Webogram tükör lépésről lépésre történő beállítását és a kérések Telegram szerverekhez történő proxyjának beállítását találja az nginx használatával.
Példaként egy frissen telepített és frissített Ubuntu Server 18.04.3-at választottam.
Megjegyzés: Ez az oktatóanyag nem tartalmaz utasításokat a domain beállításához az nginxben. Ezt magának kell megtennie. Az oktatóanyag feltételezi, hogy már konfigurált egy tartományt az ssl-lel, és maga a kiszolgáló, amelyen konfigurálni szeretné, hozzáfér a Telegram-szerverekhez (bármilyen módon).
Tegyük fel, hogy ennek a szervernek az ip-je 10.23.0.3, a domain neve pedig mywebogram.localhost
Ezen konvenciók alapján adok példákat a konfigurációkra. Ne felejtse el megváltoztatni az értékeket a sajátjára.
Tehát kezdjük:
A Webogram futtatásához nodejs-ekre van szükségünk. Alapértelmezés szerint, ha az Ubuntu tárolókból telepítjük, akkor a nodejs 8.x verzióját kapjuk. Szükségünk van a 12.x-re:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Webogramunk székhelyét mi választjuk ki.
Például helyezzük el a saját könyvtár gyökerébe. Ehhez klónozza a hivatalos adattárat a szerverünkre:
cd ~ && git clone https://github.com/zhukov/webogram.git
A következő lépés az alkalmazás futtatásához szükséges összes függőség telepítése:
cd webogram && npm install
Próbáljunk meg egy próbaüzemet. Futtassa a parancsot:
npm start
Ezt követően megpróbáljuk megnyitni a böngészőben
http://10.23.0.3:8000/app/index.html
Ha eddig a pontig mindent helyesen csinált, megnyílik a Webogram engedélyezési oldal.
Most be kell állítanunk az alkalmazást, hogy szolgáltatásként fusson. Ehhez hozzunk létre egy fájlt
sudo touch /lib/systemd/system/webogram.service
nyissa meg bármelyik szerkesztőben, és adja meg a következő megjelenést (adja meg a WorkDirectory elérési útját)
[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
Ezután a következő parancsokat futtatjuk:
A változtatások alkalmazása
sudo systemctl daemon-reload
Automatikus indítás engedélyezése:
sudo systemctl enable webogram.service
Kezdjük a szolgáltatással:
sudo systemctl start webogram.service
A lépések elvégzése után a Webogram továbbra is elérhető lesz a 8000-es porton.
Mivel a Webogramunkhoz való hozzáférést az nginx-en keresztül fogjuk beállítani, a 8000-es portot lezárjuk a külső kérések számára.
Ehhez az udf segédprogramot használjuk (vagy bármely Önnek megfelelő módszert):
sudo ufw deny 8000
Abban az esetben, ha továbbra is az udf használata mellett dönt, de az le van tiltva a szerveren, adjon hozzá további szabályokat (hogy minden ne essen szét), és engedélyezze az udf-et:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Ezután kezdjük el módosítani az nginx konfigurációját.
Ahogy fentebb figyelmeztettem, feltételezzük, hogy az ssl-t használó tartomány már be van állítva a szerveren. Csak arra hívom fel a figyelmet, hogy mit kell hozzáadni a tartománykonfigurációs fájlhoz, hogy megfelelően működjön:
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;
}
}
Amit hozzáadunk az nginx konfigurációhoz:
- Megváltoztatjuk a gyökér helyét, amely proxy kéréseket küld a 8000-es portra, amelyen a Webogram válaszol
- Bezárjuk a gyökér helyét a basic-auth használatával. Ez pusztán szimbolikus lépés az alkalmazásunk bezárásához a kíváncsiskodó szemek és botok elől. (És a blokkolással kapcsolatos problémák elkerülése érdekében)
- A Telegram szerveren lévő proxy_path azonosítójú helyek egy csomó pontja pontosan a végpontjaink, amelyeken keresztül proxyzni fogjuk kéréseinket
Ezenkívül hozzunk létre egy fájlt /etc/nginx/passwd.htpasswd;
hogy az nginxnek legyen mivel ellenőriznie a felhasználói jelszavakat.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Indítsa újra az nginxet:
sudo systemctl restart nginx
A Webogram mostantól csak a címen lesz elérhető
Már alig van hátra: apró változtatásokat hajtunk végre magán a projekten.
Nyissa meg a fájlt egy szerkesztőben ~/webogram/app/js/lib/mtproto.js
És hozza az elejét a következő formába:
/*!
* 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
}
...
Ezt követően frissítenie kell az alkalmazás oldalát a böngészőben.
Nyissa meg a böngészőkonzolt, és nézze meg az alkalmazás hálózati kéréseit. Ha minden működik, és az XHR-kérések a kiszolgálóra érkeznek, akkor minden megfelelően történik, és a Webogram most az nginx-en keresztül proxyzik.
Remélem, hogy ez az oktatóanyag másnak is hasznos lesz rajtam kívül.
Nagyon köszönöm mindenkinek, aki a végéig elolvasta.
Ha valakinek nehézségei vannak, vagy pontatlanságot követtem el, szívesen válaszolok és próbálok segíteni kommentben vagy PM-ben.
Forrás: will.com