ウェブ上でのフットプリントを保護することに関して言えば、おそらく耳にしたことがあるでしょう、VPNについて。VPNは、コンピュータとインターネットの間の仲介者として機能します。すべてのトラフィックはVPNサーバーを通過するため、IPアドレスと位置情報が効果的にマスクされます。
しかし、VPNだけが唯一のプロキシサーバーの形態ではありません。SOCKS(Socket Secure)は、クライアントに代わってネットワークトラフィックをルーティングすることにより、ファイアウォールを介してサーバーと通信できるようにする同様のネットワークプロトコルです。VPNと比較して、SOCKSはネットワーク構成の柔軟性と制御性が高くなります。VPNクライアントをインストールできない場合や、VPNプロバイダーを信頼できない場合に便利です。
このガイドでは、SSH SOCKS 5プロキシトンネルを確立し、ウェブトラフィックをそのトンネル経由でルーティングする方法を説明します。
前提条件
デモンストレーションでは、Ubuntuデスクトップを実行しているローカルマシンと、Ubuntuサーバーを実行しているリモートマシンを使用しました。スムーズに動作させるには、事前にSSHが設定されている必要があります。SOCKSプロキシを使用しているため、接続をテストするにはそれを使用できるアプリが必要です。Firefoxは最適な例です。これは、SOCKS 5プロキシトンネルをサポートする現代のウェブブラウザです。
Windowsを使用している場合は、WSL (Windows Subsystem for Linux)を使用してローカルのLinux環境をセットアップするか、PuTTY(Telnetやrloginなどのさまざまなネットワークプロトコルを実装できるオープンソースアプリ)を使用します。
SOCKSトンネルの設定
-
SOCKSトンネルのセットアップ (macOS/Linux)
ローカルコンピュータでは、安全な接続を確保するためにSSHキーを設定する必要があります。SSHキーはリモートシステムにも登録されている必要があります。このガイド(SSHキーベースの認証の設定)で、そのプロセスを詳しく説明しています。
次のSSHコマンドは、リモートサーバーへのSOCKSトンネルを確立します:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> |

コマンドを分解してみましょう:
-
-i: 接続に使用するSSHキーをSSHに指示します。
-
-D: SOCKSトンネルを確立したいことをSSHに指示します。ポートについては、ポート 1024を使用しています。これは固定値ではありません。以下の間の任意のポートを選択できます: 1024 から 65536.
-
-f: SSHプロセスがバックグラウンドでフォークされます。
-
-C: SSHはリモートサーバーに送信する前にデータを圧縮します。これにより、データ消費量を節約し、実効帯域幅を増やすことができます。
-
-q: ツールをクワイエットモードで実行します。
-
-N: トンネル確立後にコマンドを送信しないことをSSHに指示します。
実行したら、プロセスが正常に開始されたかどうかを確認できます。次のコマンドは、実行中のすべてのSSHプロセスに関する情報を出力します:
|
1 |
ps aux | grep ssh |

これで、ターミナルウィンドウを安全に閉じることができます。SSHプロセスはバックグラウンドから意図した通りに機能します。
-
SOCKSトンネルのセットアップ (Windows)
Windowsユーザーの場合、PuTTYを使用するのがより簡単な解決策です。まず、PuTTYをダウンロードする:

インストールしたら、PuTTYを起動します:

左側のパネルのSessionタブから、サーバーのHost Name (or IP address)を入力します。Connection typeについては、SSHを選択します。次に、Connection >> SSH >> Tunnelsに移動します。ここで、Destinationフィールドの下で、スクリーンショットに示すオプションを選択します:

次に、Openをクリックします。SSH経由でリモートサーバーに接続するためのターミナルウィンドウがポップアップ表示されます。リモートサーバーにログインします:

SOCKSトンネルの実装
これでトンネルが設定されました。SOCKSをサポートするすべてのアプリがこのトンネルを使用できます。デモンストレーションとして、Firefoxは素晴らしい例です。
まず、Firefoxを開きます。右上隅からメニューアイコンをクリックします。設定:

に移動します。次に、プロキシを検索します。設定(Firefoxのインターネット接続方法の設定:

内)をクリックします。その後、手動プロキシ設定を選択します。SOCKSホストには、 localhostまたは 127.0.0.1を使用します。次に、ポートには、SOCKSトンネル専用に設定したポートを入力します。SOCKS_v5:

を選択するのを忘れないでください。最後に、SOCKS v5の接続時にはDNSもプロキシを使用するオプションにチェックを入れます。OKをクリックして続行します。
次に、新しいタブを開いて任意のウェブページにアクセスしてみてください。たとえば、CheckMyIP.
からIPアドレスを確認できます。
SSHトンネルへのプロキシ接続が不要になったら、Firefoxのプロキシ設定から安全に無効化できます。

ウィンドウから、システムのプロキシ設定を使用するを選択し、OKをクリックします.
SOCKSトンネルの終了
-
macOS/Linuxでのトンネルの終了
トンネルを終了するには、SSHプロセスを手動で強制終了(kill)する必要があります。SSHプロセスのPID(プロセスID)が必要です。次のコマンドを実行すると、実行中のすべてのSSHプロセスのPIDが表示されます。
|
1 |
ps aux | grep ssh |
トンネルを作成したコマンドで実行されているSSHプロセスを確認します。そのプロセスを強制終了します。
|
1 |
kill <tunnel_ssh_pid> |
オプションが定義されていない場合、 killコマンドは、ターゲットプロセスに一般的な SIGTERM シグナルを送信します。詳細については、こちらのチュートリアルでLinuxのプロセス管理について学ぶことができます.
-
Windowsでのトンネルの終了
PuTTYのウィンドウを閉じると、トンネル接続が終了します。
トラブルシューティング
SOCKSを使用してトラフィックをルーティングする際に発生する可能性のある、一般的な問題は以下の通りです。
-
ファイアウォール
ファイアウォールの制限により接続を確立できない場合、ファイアウォールがポート 22への接続をブロックするように設定されている可能性があります。これは、SSHがリモートシステムへの接続に使用するデフォルトのポートです。一部のポートはデフォルトで開いたままになっています。たとえば、ポート 80(一般的なウェブトラフィック)やポート 443 (TLS、セキュアなウェブトラフィック)などです。
SSHサーバーがウェブコンテンツを提供していない場合は、デフォルトポートのいずれか( 80 または 443 )を、ポート 22 の代わりに使用できます。ポート 443 はデフォルトで暗号化されたトラフィックを想定しているため、これを使用することをお勧めします。また、送信トラフィックも暗号化されます。変更を行うには、SSH設定ファイルを修正する必要があります。テキストエディタでファイルを開きます。
|
1 |
sudo nano /etc/ssh/sshd_config |
SSHはその目的に応じて複数のポートを使用できます。設定ファイルを下にスクロールして、ポートのセクションを見つけます。

変更が完了したら、ファイルを保存してエディタを閉じます。変更を適用するためにSSHサービスを再起動します。
|
1 |
sudo service ssh restart |
新しいポートが機能しているか確認するために、新しいポートを使用してリモートサーバーへの接続を試みます。
|
1 |
ssh <remote_username>@<remote_server> -p 443 |
接続に成功した場合は、SSHトンネリングにポート 443 を安全に使用できます。SOCKSトンネルを確立するための修正されたコマンドは以下の通りです。
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> -p 443 |
ここで、フラグ -pは、SSHにポート 443.
最後に
現代において、プライバシーとセキュリティは最大の懸念事項の一部です。安全でないネットワーク上にいる場合でも、安全にブラウジングする方法はたくさんあります。ほとんどの場合、VPNを使用すればネットワークトラフィックに対して十分なセキュリティが得られます。一方で、VPNを使用できない場合や信頼できない場合、SOCKSトンネルが必要なセキュリティを提供してくれます。また、SOCKSトンネルを使用することで、セットアップを完全にコントロールすることができます。
ハッピー・コンピューティング!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。