【画像解説】SOCKSプロキシをSSH経由で実現する実践的な手法を紹介

【画像解説】SOCKSプロキシをSSH経由で実現する実践的な手法を紹介 Linuxサーバ

これは、SSHの機能を利用してローカルにSOCKSプロキシを作成し、暗号化されたトンネル内で通信を中継する手法で、「ダイナミックポートフォワード」の事を指します。

ローカルポートフォワードとよく似ていますが、こちらは、特定のリモートホスト・ポートへの接続を固定的に中継するのに適しています。

一方の「ダイナミックポートフォワード」は、SOCKSプロキシとして柔軟に任意の通信先へアクセスできるため、複数のサービスやWebブラウジングなど幅広い用途に利用されます。

図1のように「端末(Windows)」が「踏台サーバ」にダイナミックポートフォワードをして、SOCKSプロキシに対応しているアプリケーション(chromeブラウザなど)で「複数のサーバ」に接続できます。
この仕組みにより、「複数のサーバ」は外部(許可無)から直接アクセスされるリスクを軽減し、かつ許可された外部(許可)の「端末」だけがアクセス可能となります。

図1(ダイナミックポートフォワード)

ダイナミックポートフォワード(Dynamic Port Forwarding)を利用したイメージ図
※SOCKプロキシ

この機能は、「踏台サーバ(SSHサーバ)」にダイナミックポートフォワードすることで、「踏台サーバ(SSHサーバ)」からのみ接続できる「複数のサーバ」の様々なサービス「HTTPS(443/tcp)、RDP(3389/tcp)、DB(1521/tcp)など」に対してアプリ通信が可能となります。



スポンサーリンク

端末(Windows)のエフェメラルポートを利用したダイナミックポートフォワード(SOCKSプロキシ)

目的

「踏台サーバ」側でSSHダイナミックポートフォワード(SOCKプロキシ)を実行、「端末(Windows)」が「踏台サーバ」を経由して「複数のサーバ」へアプリ通信をする場合に利用します。


接続イメージ図
ダイナミックポートフォワード(Dynamic Port Forwarding)を利用したイメージ図



構成概要
  • 端末(Windows):「踏台サーバ」へSSH接続をします。ループバックアドレス(localhost)のエフェメラルポートを「踏台サーバ」のSOCKSプロキシにして「複数のサーバ」にアプリ通信をします。
  • 踏台サーバ:このサーバにSSH接続してきた「端末(Windows)」を「複数のサーバ」にアプリ通信させるサーバです。
  • 複数のサーバ:「複数のサーバ」でさまざなサービスが稼働しています。「端末(Windows)」が「複数のサーバ」で稼働しているアプリ通信を利用したい目的のサーバです。



条件
  • 「端末(Windows)」にSSHコマンドを実行できる環境を用意する必要があります。
    <例>
      BashエミュレータをインストールするとWindows端末でSSHコマンドを実行することできます。
      Git Bashエミュレータ
       URL:https://gitforwindows.org/
  • 「端末(Windows)」のエフェメラルポート「1080/tcp」を使用します。
  • 「端末(Windows)」から「踏み台サーバ」の「22/tcp」ポート(SSH)にアクセスできる必要があります。



SSHポートフォワードのコマンド

※「端末(Windows)」でBashエミュレータを起動して実行します。

ssh -D localhost:1080 user@10.10.20.10

ー>実行後、「踏台サーバ」の「10.10.20.10」にSSH接続するログインID(user)のパスワードを入力する。


コマンド説明
  • -Dはダイナミックポートフォワードを指定します。-Dオプションを使用することで、「端末(Windows)」の指定したローカルポート(1080/tcp)を、「複数のサーバ」でオープンしている各ポート(443/tcp、3389/tcp、1521/tcp)に接続します。
  • localhostは「端末(Windows)」自身を指しローカルループバック(127.0.0.1)のIPアドレスです。ローカルループバックを指定する場合は省略可能です。
  • :1080は「端末(Windows)」側でLISTENするポート番号です。
  • user@10.10.20.10は「踏台サーバ」に対するログイン情報です。「user」はSSH接続利用時のログインIDです。
#  ssh  -D  端末:1080  user@踏台



「端末(Windows)」が「複数のサーバ」のWebに接続する方法

■Webブラウザ(Chrome)を利用する場合※Windows11

1.「スタート」メニュー => 「コントロールパネル」 => 「インターネットオプション」 を選択し「インターネットプロパティ」で以下のように設定します。

〈設定1〉

〈設定2〉

〈設定3〉


2.ダイナミックポートフォワード(SOCK)を利用することでWeb(10.10.20.40)サーバにアクセスできなかった「端末(Windows)」がChromeブラウザでアクセス可能となります。

〈Webアクセス結果〉

※今回の〈設定1〉〜〈設定3〉の間、「端末(Windows)」のWebブラウザ(Chrome)は、「踏み台サーバ」経由でアクセス可能なWebサイト(443/tcp)であれば、IPアドレス「10.10.20.40」以外にもアクセスできるようになります。

【注意事項】
〈設定1〉〜〈設定3〉を設定することで、普段「端末(Windows)」からアクセスできていたWebサイトへアクセス出来なくなる場合があります。
その場合は、〈設定1〉〜〈設定3〉の設定を元に戻してWebサイトへアクセスしてください。



各サーバ間の通信状況のまとめ

  • 「端末(Windows)」から「踏台サーバ」へはSSH接続が可能です。
  • 「端末(Windows)」から「複数のサーバ」へのアプリ通信(HTTPS、RDP、DBなど)はできません。
  • 「踏台サーバ」と「複数のサーバ」間では、各種アプリ通信(HTTPS、RDP、DBなど)が可能です。

上記の条件の下、「端末(Windows)」から「踏台サーバ」を経由することで、「複数のサーバ」への各種アプリ通信(HTTP、RDP、DBなど)を利用することが可能です。

コメント

タイトルとURLをコピーしました