開発者ドキュメント

SOCKSトンネルを使用してVPNなしでWebトラフィックを安全にルーティングする方法

著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

ある時点で、安全でないネットワークやファイアウォールの制限が厳しすぎるネットワークにいることに気付く可能性があり、トラフィックを監視している人がいないことを確認する必要があります。 1つの解決策はVPNを使用することですが、多くのVPNでは、マシンに特別なクライアントソフトウェアが必要であり、インストールする権限がない場合があります。 ただし、セキュリティで保護する必要があるのがWebブラウジングだけである場合は、高速で無料の便利な代替手段であるSOCKS5プロキシトンネルがあります。

SOCKSプロキシはSSH暗号化トンネルであり、構成されたアプリケーションがトラフィックを転送し、サーバー側でプロキシがトラフィックを一般的なインターネットに転送します。 VPNとは異なり、SOCKSプロキシは、クライアントマシン上でアプリごとに構成する必要がありますが、アプリがSOCKSプロキシを使用できる限り、特別なクライアントソフトウェアなしでアプリをセットアップできます。 サーバー側では、構成する必要があるのはSSHだけです。

このチュートリアルでは、Ubuntu 20.04を実行しているサーバー(SSH経由でアクセスできるすべてのLinuxディストリビューションが機能します)を使用し、クライアントアプリケーションとしてFirefoxWebブラウザーを使用します。 このチュートリアルを終了すると、暗号化されたSSHトンネルを介してWebサイトを安全に閲覧できるようになります。

前提条件

PuTTYは、Windowsユーザーのプロキシトンネルを設定するために使用されます。 macOSまたはLinuxのユーザーは、トンネルをセットアップするためのツールをプリインストールしています。

ステップ1(macOS / Linux)—トンネルの設定

ドロップレットを作成していない場合は、ローカルコンピューターでSSHキーを作成します。 キーが作成されたら、SSHドロップレットの「authorized_keys」ファイルにパブリック側が追加されていることを確認してください。 次に、ターミナルアプリケーションを開いて、SOCKSプロキシが有効になっているSSHトンネルを作成します。

次のコマンドでトンネルを設定します。

  1. ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

引数の説明

必ずsammy@your_domainsudoユーザーとサーバーのIPアドレス/ドメイン名に置き換えてください。

コマンドを入力すると、成功または失敗の兆候がなく、すぐにコマンドプロンプトが再び表示されます。 それは正常です。

次のコマンドを使用して、トンネルが実行されていることを確認します。

  1. ps aux | grep ssh

次のような行が出力に表示されます。

Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

ターミナルアプリケーションを終了すると、トンネルは稼働したままになります。 これは、SSHセッションをバックグラウンドに置く-f引数を使用したためです。

注:トンネルを終了するには、psを介してPIDを取得する必要があります。 この例では、PIDは14345です。 次に、コマンドkill 14345を使用します。 手順3で終了について説明します。

ステップ1(Windows)—トンネルの設定

PuTTYを開きます。

まだインストールしていない場合は、PuTTYをダウンロードして、好きな場所に保存してください。 PuTTYをインストールするのに管理者権限は必要ありません。 .exeをダウンロードして実行するだけです。

トンネルを設定するには、次の手順を実行します。

  1. [セッション]セクションから、サーバーのホスト名(またはIPアドレス)とSSHポート(通常は22)を追加します
  2. 左側で、[接続]>[SSH]>[トンネル]に移動します。
  3. 102565536の間の任意の送信元ポート番号(1337 など)を入力します
  4. [ダイナミック]ラジオボタンを選択します
  5. [追加]ボタンをクリックします
  6. 左側のセッションに戻ります
  7. [保存されたセッション]の下に名前を追加し、[保存]ボタンをクリックします
  8. 次に、[開く]ボタンをクリックして接続します
  9. sudoのユーザー名とサーバーのパスワードを入力してログインします

これでPuTTYウィンドウを最小化できますが、閉じないでください。 SSH接続が開いている必要があります。

注: PuTTY SSHキーの手順に従うことで、この同じセッションのsudoユーザー名( sammy )とSSHキーを保存できます。 そうすれば、接続を開くたびにユーザー名とパスワードを入力する必要がなくなります。

ステップ2—トンネルを使用するようにFirefoxを設定する

SSHトンネルができたので、そのトンネルを使用するようにFirefoxを構成します。 SOCKS 5トンネルが機能するには、トンネルを実装できるローカルアプリケーションを使用する必要があることに注意してください。 Firefoxには次の機能があります。

この手順は、Windows、macOS、およびLinuxでも同じです。

SSHコマンドで使用したポート番号があることを確認してください。 この例では、1337を使用しました。

(以下の手順はFirefoxバージョン80で実行されましたが、オプションの場所は異なる場合がありますが、他のバージョンでも機能するはずです。)

Firefoxを開きます。

  1. 右上隅にあるハンバーガーアイコンをクリックして、Firefoxのメニューにアクセスします。
  2. 「設定」または「オプション」メニュー項目をクリックします。
  3. 一番下までスクロールし、[ネットワーク設定]で[設定…]ボタンを選択します。
  4. [インターネットへのプロキシアクセスの構成]見出しで、[手動プロキシ構成]を選択します。
  5. SOCKSホストの場合はlocalhostまたは127.0.0.1と入力し、ポートの場合はトンネルで指定されたカスタムポート1337を使用します。
  6. 下部にある[SOCKSv5を使用する場合のプロキシDNS]チェックボックスをオンにします
  7. [OK]ボタンをクリックして、構成を保存して閉じます

次に、Firefoxで別のタブを開き、Webの閲覧を開始します。 SSHトンネルを安全にブラウジングできるように準備しておく必要があります。 Webサイトから取得したデータは暗号化されています。 さらに、[プロキシDNS]オプションをオンにしたため、DNSルックアップも暗号化され、ISPは、表示されている内容や取得した場所を確認できません。

プロキシを使用していることを確認するには、Firefoxのネットワーク設定に戻り、別のポート番号を入力して設定を保存します。 Webを閲覧しようとすると、「プロキシサーバーが接続を拒否しています」というエラーメッセージが表示されるはずです。 これは、Firefoxがデフォルトの接続だけでなくプロキシを使用していることを証明しています。 または、 ipecho.net などのパブリックIPサイトにアクセスすると、SSHドロップレットがプロキシとして機能しているため、返されるIPはSSHドロップレットのIPになります。

ステップ3—Firefoxでプロキシを元に戻す

SSHトンネルのプライバシーが必要になったら、Firefoxのネットワークプロキシ設定に戻ります。 [システムプロキシ設定を使用する]のラジオボタンをクリックして、[OK]をクリックします。 FirefoxがSOCKSトンネルを使用しなくなったので、それをシャットダウンすることもできます。 Firefoxでプロキシを自由に有効または無効にできるように、トンネルを開いたままにしておくことができますが、トンネルを長時間アイドル状態にしておくと、トンネルが閉じてしまう可能性があります。

トンネルを閉じる(macOS / Linux)

以前にローカルマシンで作成したトンネルはバックグラウンドに送信されたため、トンネルを開いたときに使用したターミナルウィンドウを閉じてもトンネルは終了しません。 トンネルを終了するには、psコマンドを使用してプロセスID(PID)を識別し、killコマンドを使用してプロセスを終了する必要があります。

私たちのマシンでアクティブなsshプロセスをすべて検索してみましょう。

  1. ps aux |grep ssh

トンネルを作成するために前に入力したコマンドのような行を見つけます。 出力例は次のとおりです。

Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

行の先頭から、最初の2列の1つに、3〜5桁の数字があります。 これはPIDです。 ここでは、14345のサンプルPIDが強調表示されています。

PIDがわかったので、killコマンドを使用してトンネルを停止できます。 プロセスを強制終了するときは、PIDを使用してください。

  1. kill 14345

トンネルを閉じる(Windows)

トンネルの作成に使用したPuTTYウィンドウを閉じます。 それでおしまい。

ステップ4(macOS / Linux)—繰り返し使用するためのショートカットの作成

macOSまたはLinuxシステムの場合、エイリアスを作成するか、スクリプトを作成して、トンネルをすばやく作成できます。 トンネルプロセスを自動化する2つの方法は次のとおりです。

これらのショートカット方法は両方とも、サーバーへのパスワードなし/パスフレーズなしのSSHキー認証を必要とします。

クリック可能なBASHスクリプト

クリックするとトンネルを開始するアイコンが必要な場合は、小さなBASHスクリプトを作成してその作業を実行できます。 スクリプトはトンネルを設定してからFirefoxを起動しますが、Firefoxで初めてプロキシ設定を手動で追加する必要があります。

macOSでは、コマンドラインから起動できるFirefoxバイナリはFirefox.app内にあります。 アプリがApplicationsフォルダーにあるとすると、バイナリは/Applications/Firefox.app/Contents/MacOS/firefoxにあります。

Linuxシステムでは、Firefoxをリポジトリ経由でインストールした場合、またはFirefoxがプリインストールされている場合、その場所は/usr/bin/firefoxである必要があります。 コマンドwhich firefoxをいつでも使用して、Firefoxが標準の場所にない場合に、システム上のFirefoxの場所を見つけることができます。

このスクリプトでは、Firefoxへのパスをシステムに適したパスに置き換えます。 また、トンネルを立ち上げるために以前に使用したコマンドの成功を反映するようにSSH回線を調整する必要がある場合もあります。

nanoなどのテキストエディタを使用して、新しいファイルを作成します。

  1. nano ~/socks.sh

次の行を追加します。

socks.sh
#!/bin/bash -e
ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@`your_domain`
/Applications/Firefox.app/Contents/MacOS/firefox &

スクリプトを保存します。 nanoの場合は、CONTROL + oと入力し、終了するにはCONTROL + xと入力します。

スクリプトを実行可能にして、ダブルクリックすると実行されるようにします。 コマンドラインから、chmodコマンドを使用して、実行権限を追加します。

  1. chmod +x /path/to/socks.sh

macOSでは、.shファイルをプログラムのように実行し、エディターで開かないようにする必要があることをmacOSに通知するために追加の手順を実行する必要がある場合があります。 これを行うには、socks.shファイルを右クリックして、[情報を見る]を選択します。

[Open with:]セクションを見つけ、開示三角形が下を向いていない場合は、それをクリックしてドロップダウンメニューを表示します。 Xcodeがデフォルトのアプリとして設定されている可能性があります。

Terminal.appに変更します。 Terminal.appがリストにない場合は、「その他」を選択し、「アプリケーション」>「ユーティリティ」>「Terminal.app」に移動します(「推奨アプリケーション」から「すべてのアプリケーション」へのプルダウンメニュー「有効」を設定する必要がある場合があります)。

今すぐSOCKSプロキシを開くには、socks.shファイルをダブルクリックします。 スクリプトはターミナルウィンドウを開き、SSH接続を開始し、Firefoxを起動します。 この時点で、ターミナルウィンドウを自由に閉じてください。 Firefoxでプロキシ設定を保持している限り、安全な接続を介してブラウジングを開始できます。

このスクリプトは、プロキシをすばやく立ち上げるのに役立ちますが、sshプロセスを見つけて終了したら、上記の手動手順を実行して強制終了する必要があります。

コマンドラインエイリアス

コマンドラインを頻繁に使用していて、トンネルを起動したい場合は、コマンドラインエイリアスを作成して作業を行うことができます。

エイリアスを作成する上で最も難しいのは、aliasコマンドを保存する場所を見つけることです。

さまざまなLinuxディストリビューションとmacOSリリースは、さまざまな場所にエイリアスを保存します。 最善の策は、次のファイルのいずれかを検索し、aliasを検索して、他のエイリアスが現在保存されている場所を確認することです。 可能性は次のとおりです。

正しいファイルを見つけたら、以下のエイリアスを既存のファイルに追加するか、ファイルの最後に追加します。 以下の例では、エイリアス「firesox」を使用してSOCKSトンネルを起動していますが、エイリアスとして任意の単語を使用できます。

.bashrc
alias firesox='ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain && /Applications/Firefox.app/Contents/MacOS/firefox &'

エイリアスは新しいシェルを開始したときにのみロードされるため、ターミナルセッションを閉じて新しいシェルを開始します。 ここで入力すると:

  1. firesox

このエイリアスはトンネルを設定し、Firefoxを起動して、コマンドプロンプトに戻ります。 Firefoxがプロキシを使用するように設定されていることを確認してください。 これで、安全に閲覧できます。

ステップ5(オプション)—トラブルシューティング:ファイアウォールを通過する

接続が機能している場合は、準備ができており、読むのをやめることができます。 ただし、ファイアウォールが制限されているためにSSH接続を確立できないことがわかった場合は、トンネルの作成に必要なポート22がブロックされている可能性があります。 プロキシサーバーのSSH設定を制御できる場合(DigitalOcean Dropletへのrootアクセスで、これを行うことができます)、22以外のポートでリッスンするようにSSHを設定できます。

ブロックされていないポートを使用できますか?

多くの場合開いているポートには、80(一般的なWebトラフィック)と443(TLS、安全なWebトラフィック)があります。

SSHサーバーがWebコンテンツを提供していない場合は、デフォルトのポート22の代わりに、これらのWebポートのいずれかを使用して通信するようにSSHに指示できます。 443は、このポートで暗号化されたトラフィックが予想されるため、最良の選択です。SSHトラフィックは暗号化されます。

ファイアウォールのない場所から、プロキシに使用しているDigitalOcean DropletにSSHで接続するか、DigitalOceanコントロールパネルから組み込みのコンソールを使用します。

サーバーのSSH設定を編集します。

  1. sudo nano /etc/ssh/sshd_config

Port 22という行を探します。

’22’を完全に置き換えるか、SSHがリッスンするための2番目のポートを追加することができます。 SSHが複数のポートでリッスンするように選択するので、Port 22の下にPort 443という新しい行を追加します。 次に例を示します。

sshd_config
. . .

Port 22
Port 443

. . .

SSHを再起動して、編集したSSH構成を再読み込みします。 ディストリビューションによっては、SSHサーバーデーモンの名前が異なる場合がありますが、sshまたはsshdである可能性があります。 一方が機能しない場合は、もう一方を試してください。

  1. sudo service ssh restart

新しいSSHポートが機能することを確認するには、新しいシェルを開き(誤ってロックアウトした場合に備えて、現在のシェルをまだ閉じないでください)、新しいポートを使用してSSHで接続します。

  1. ssh sammy@your_domain -p 443

成功すると、両方のシェルからログアウトし、新しいポートを使用してSSHトンネルを開くことができます。

  1. ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain -p 443

Firefoxの設定は、SSHポートに依存せず、トンネルポート(上記の1337)のみに依存するため、同じになります。

結論

この現代では、コーヒーショップの公共Wi-Fiなど、潜在的に敵対的なネットワークを使用しているときに安全に閲覧する方法は多数あります。 ほとんどの場合、VPNを使用してすべてのトラフィックを保護および保護できる場合は、VPNを使用することをお勧めします。 ただし、SOCKSトンネルを使用すると、VPNを使用または信頼できない場合に、Webブラウジング中に必要なセキュリティが提供されます。 SOCKSトンネルは、ピンチですばやくセットアップして使用でき、完全に制御できます。 これらは、安全なブラウジングのための優れたオプションです。

モバイルバージョンを終了