書類 計算する
SSHポートフォーワーディングの基本: ローカル、リモート、ダイナミック #portforward

SSHポートフォーワーディングの基本: ローカル、リモート、ダイナミック #portforward

2024-11-22 概要 SSHポートフォーワーディングは、セキュアなネットワーク通信のための強力なツールです。この機能を使うことで、ファイアウォールやNATを越えて、安全にデータを送受信することが可能になります。ここでは、SSHポートフォーワーディングの三つの基本形態(ローカルフォーワーディング、リモートフォーワー

Related articles

VPNを使った航空券の安い買い方│+10の裏ワザ 2024年 openvpnを初めから 〜OTP(google autenticator)認証へ〜 #Ubuntu22.04 HP製パソコンにExpressVPNが勝手にインストールされていた!アンインストール方法は? VPNの導入方法とは?導入メリットや環境構築に必要な機器も紹介!|ITトレンド リモートデスクトップとVPNの通信量は? テレワーク一日にかかる通信量や減らすためのコツ 「ZTNA」で実現するゼロトラストとそのサービス

概要

SSHポートフォーワーディングは、セキュアなネットワーク通信のための強力なツールです。この機能を使うことで、ファイアウォールやNATを越えて、安全にデータを送受信することが可能になります。ここでは、SSHポートフォーワーディングの三つの基本形態(ローカルフォーワーディング、リモートフォーワーディング、ダイナミックフォーワーディング)を、それぞれの使用 シチュエーションとともに解説し、覚える 方を提供します。

ローカル フォー ワーディング ( Local forwarding )

使用 シチュエーション

企業 の 内部 ネットワーク 内 に ある データベース サーバー に 、 自宅 や 外出 先 から 安全 に アクセス し たい 場合 に 使用 し ます 。 直接 アクセス は セキュリティ リスク が ある ため 、 ssh ポート フォー ワーディング を 利用 し て セキュア な 接続 を 確立 し ます 。

ssh -L 3306:db.internal.network:3306 user@ssh.example.com

このコマンドは、ローカルマシン上のポート3306をリモートのdb.internal.network上のポート3306に転送します。

覚える 方

「 l 」 は Local ( ローカル ) の 「 l 」 で 、 " Local to remote " ( ローカル から リモート へ ) を 意味 し ます 。

ssh Config例

. ssh / config

Host db - tunnel is user 
     hostname ssh . example . com 
     User user 
     localforward 3306 DB . internal . Network : 3306 

この設定で、以下のコマンドでローカルフォワーディングを実行できます。

リモートフォーワーディング (Remote Forwarding)

使用 シチュエーション

自宅やオフィスのPC上で動いているウェブサーバーやアプリケーションサーバーに、インターネット経由でアクセスしたいけれども、直接公開することができない場合に使用します。リモートフォーワードを利用して、公開サーバーを経由して安全にアクセスを提供します。

SSHポートフォーワーディングの基本: ローカル、リモート、ダイナミック #portforward

ssh - r  9090 : localhost : 3000 User @ ssh . example . com 

このコマンドは、SSHサーバー上のポート9090をローカルマシンのポート3000に転送します。

覚える 方

「 r 」 は remote ( リモート ) の 「 r 」 で 、 " remote to Local " ( リモート から ローカル へ ) を 意味 し ます 。

ssh config の 例

. ssh / config

Host app-demo
    HostName ssh.example.com
    User user
    RemoteForward 9090 localhost:3000

この 設定 で 、 以下 の コマンド で リモート フォワーディング を 実行 でき ます 。

ダイナミックフォーワーディング (Dynamic Forwarding)

使用 シチュエーション

安全なインターネットブラウジングが必要な場合や、企業ネットワーク内のリソースへのアクセスにVPNの代わりとして使用します。一つの設定で複数のリモートサービスへの動的なアクセスが必要な場合に便利です。

SSHポートフォーワーディングの基本: ローカル、リモート、ダイナミック #portforward

ssh -D  1080 User @ ssh . example . com 

このコマンドは、ローカルマシンのポート1080でSOCKSプロキシを開始し、すべてのトラフィックをSSHサーバー経由で転送します。

覚える 方

「D」はDynamic(ダイナミック)の「D」で、動的に多様なリモートエンドポイントへのアクセスを可能にします。

ssh config の 例

. ssh / config

Host secure-proxy
    HostName ssh.example.com
    User user
    DynamicForward 1080

この 設定 で 、 以下 の コマンド で ダイナミック フォワーディング を 実行 でき ます 。

ダイナミックフォワーディングの実際の使い方

ダイナミックフォワーディングを実行して、Chrome ExtensionのProxy SwitchyOmegaを使って

  • Protocol: SOCKS4
  • Server : localhost
  • Port: 1080

と設定することで、サーバ経由でブラウジングができるようになる。

SSHポートフォーワーディングの基本: ローカル、リモート、ダイナミック #portforward

おまけ: リモートフォワーディングとダイナミックフォワーディングを組み合わせて多段SSHをやってみる

かなり特殊な環境の例なので、同じような状況はなかなかないですが、過去に実際にあった事例を紹介します。SSHを組み合わせることで色んなことできるということを理解していただければと思います。

「やりたいこと」と「制約」

  • やる たい こと : リモート 環境 ( machine x ) から 社内 リソース に アクセス し たい
  • 制約
    • SSHサーバー (ssh.example.com) は踏み台として利用し、社内リソースにはアクセスできない
    • 踏み台用SSHサーバーには秘密鍵を置かせない
    • 社内 リソース に アクセス できる マシン ( machine y ) に は ssh サーバー が 起動 し て いる が 、 外部 の ネットワーク から は 接続 でき ない ( 直接 多段 ssh で ログイン is でき が でき ない )

実現した仕組み

  • 前 準備
    • Machine XとMachine YでそれぞれSSHの鍵を作成し、公開鍵を踏み台サーバー (ssh.example.com) に置く
    • Machine YにもMachine Xで作成したSSHの公開鍵を置く
  • フォワーディング
    • Machine Yから踏み台サーバー (ssh.example.com) へリモートフォワーディングの接続を確立
    • Machine Xから踏み台サーバー (ssh.example.com) を多段SSHで経由して、Machine Yへダイナミックフォワーディングの接続を確立

SSHポートフォーワーディングの基本: ローカル、リモート、ダイナミック #portforward

ssh Config

Machine Xのssh Config

. ssh / config@machine-x

Host bastion 
      hostname ssh . example . com 
      User user 

 Host Secure - proxy 
      hostname localhost 
      User user 
      Port 10022 
      dynamicforward 1080 
      proxycommand ssh - W % H : % p bastion 

Machine Yのssh Config

. ssh / config@machine-y

Host bastion
     HostName ssh.example.com
     User user
     RemoteForward 10022 localhost:22

多段SSHをするためには、以下のステップで接続を確立する。

  1. Machine Yでリモートフォワーディング
  2. Machine x で 多段 ssh

これで、Webブラウザのproxyの設定を使って、Machine Yのネットワークにあるリソースにアクセスできます。

どんな シナリオ で 使える か

  1. リモートワーク中の安全なインターネットアクセス:
    リモートワーク従業員が自宅から企業内ネットワークに安全に接続する必要がある場合、ダイナミックフォワーディングを使ってSOCKSプロキシ経由でインターネットにアクセスし、リモートフォワーディングを使用して企業内の特定のサービスにアクセスすることができます。
  2. セキュアなリソース共有:
    特定 の リソース を 外部 の パートナー 企業 と 共有 する 必要 が ある 場合 、 リモート フォワーディング を 用いる て 外部 の パートナー が アクセス できる サーバ 上 に リソース へ の 安全 な アクセス ポイント を 作成 し 、 ダイナミック フォワーディング を 利用 し て その パートナー 企業 から の アクセス を セキュア な 通信 経路 で 転送 し ます 。
  3. 複数地点間の安全なネットワーク構築:
    企業が複数の地理的に分散した拠点を持つ場合、ダイナミックフォワーディングとリモートフォワーディングを組み合わせることで、各拠点間の安全な通信ネットワークを構築できます。これにより、どの拠点からも中央のサーバや他の拠点のリソースに安全にアクセスできるようになります。