おい、ハブル!
最近、インターネットへのアクセスが不完全な企業ネットワーク内で作業する必要がある状況に陥りました。タイトルから推測できるように、Telegram がネットワーク内でブロックされました。 この状況は多くの人によく知られていると思います。
インスタント メッセンジャーがなくても大丈夫ですが、仕事で必要だったのは Telegram でした。 クライアントを仕事用マシンにインストールしたり、個人のラップトップを使用したりすることはできませんでした。 別の解決策はそれを使用することのようです
幸いなことに、Webogram はオープン ソース プロジェクトであり、そのソース コードは次の場所で入手できます。
インストールと起動自体は難しくありませんが、Telegram サーバーへのアクセスがブロックされたネットワーク内での操作状況では、Web バージョンはユーザーのマシンから Telegram サーバーにリクエストを送信するため、成功するよりも失望する可能性が高くなります。
幸いなことに、これは非常に簡単な (ただし、それほど明白ではない) 修正です。 私がこのソリューションの作成者ではないことを警告しておきます。 でなんとか見つけました
このカットの下には、Webogram ミラーの段階的なセットアップと、nginx を使用してそのリクエストを Telegram サーバーにプロキシするセットアップが表示されます。
例として、新しくインストールされ更新された Ubuntu Server 18.04.3 を選択しました。
警告: このチュートリアルには、nginx でドメインを設定する手順は含まれません。 これは自分で行う必要があります。 このチュートリアルでは、SSL を使用してドメインがすでに構成されており、ドメインを構成する予定のサーバー自体が Telegram サーバーに (任意の方法で) アクセスできることを前提としています。
このサーバーの IP が 10.23.0.3、ドメイン名が mywebogram.localhost であると仮定します。
これらの規則に基づいて、構成の例を示します。 値を自分のものに変更することを忘れないでください。
それでは始めましょう。
Webogram を実行するには、nodejs が必要です。 デフォルトでは、Ubuntu リポジトリからインストールすると、nodejs バージョン 8.x が取得されます。 12.x が必要です。
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
ウェボグラムの拠点となる場所を選択します。
たとえば、ホームディレクトリのルートに配置してみましょう。 これを行うには、公式リポジトリのクローンをサーバーに作成します。
cd ~ && git clone https://github.com/zhukov/webogram.git
次のステップでは、アプリケーションの実行に必要なすべての依存関係をインストールします。
cd webogram && npm install
試運転してみましょう。 次のコマンドを実行します。
npm start
その後、ブラウザで開いてみます
http://10.23.0.3:8000/app/index.html
ここまでの作業がすべて正しく完了していれば、Webogram の認証ページが開きます。
次に、アプリケーションをサービスとして実行するように構成する必要があります。 これを行うには、ファイルを作成しましょう
sudo touch /lib/systemd/system/webogram.service
任意のエディタで開き、次のような外観にします (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
次に、次のコマンドを実行します。
変更を適用する
sudo systemctl daemon-reload
自動実行を有効にする:
sudo systemctl enable webogram.service
サービスを開始しましょう:
sudo systemctl start webogram.service
手順を完了すると、Webogram はポート 8000 で引き続き使用できるようになります。
nginx 経由で Webogram へのアクセスを設定するため、外部からのリクエストに対してポート 8000 を閉じます。
これには udf ユーティリティを使用します (または便利な方法)。
sudo ufw deny 8000
それでも udf を使用することにしたものの、サーバーで無効になっている場合は、ルールを追加して (すべてがバラバラにならないように)、udf を有効にします。
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
次に、nginx 構成の変更を開始しましょう。
上で警告したように、SSL を使用したドメインがサーバー上ですでに構成されていることを前提としています。 ここでは、ドメイン構成ファイルが正しく動作するために、ドメイン構成ファイルに何を追加する必要があるかについてのみ説明します。
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;
}
}
nginx 設定に追加するもの:
- ルートの場所を変更し、リクエストをポート 8000 にプロキシし、Webogram が応答するようにします。
- 基本認証を使用してルートの場所を閉じます。 これは、覗き見やボットからアプリケーションを閉じるための純粋に象徴的な手順です。 (ブロックの問題を避けるためでもあります)
- Telegram サーバー上の proxy_path を持つ多数の場所は、まさにリクエストをプロキシするエンドポイントです。
また、ファイルを作成しましょう /etc/nginx/passwd.htpasswd;
そのため、nginx にはユーザーのパスワードをチェックする手段が備わっています。
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
nginx を再起動します。
sudo systemctl restart nginx
現在、Webogram は次の場所でのみ利用可能です。
残りはほとんどありません。プロジェクト自体に小さな変更を加えます。
エディタでファイルを開きます ~/webogram/app/js/lib/mtproto.js
そして、その始まりを次の形式にします。
/*!
* 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
}
...
この後、ブラウザでアプリケーション ページを更新する必要があります。
ブラウザ コンソールを開いて、アプリケーションのネットワーク リクエストを確認します。 すべてが機能し、XHR リクエストがサーバーに送信されれば、すべてが正しく行われ、Webogram は nginx 経由でプロキシされます。
このチュートリアルが私以外の人にも役立つことを願っています。
最後まで読んでくださった皆様、本当にありがとうございました。
誰かが何か問題を抱えている場合、または私が不正確な点を犯した場合は、コメントまたは PM で喜んで回答し、お手伝いさせていただきます。
出所: habr.com