概要
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 - 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 -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をやってみる
かなり特殊な環境の例なので、同じような状況はなかなかないですが、過去に実際にあった事例を紹介します。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 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をするためには、以下のステップで接続を確立する。
- Machine Yでリモートフォワーディング
- Machine x で 多段 ssh
これで、Webブラウザのproxyの設定を使って、Machine Yのネットワークにあるリソースにアクセスできます。
どんな シナリオ で 使える か
- リモートワーク中の安全なインターネットアクセス:
リモートワーク従業員が自宅から企業内ネットワークに安全に接続する必要がある場合、ダイナミックフォワーディングを使ってSOCKSプロキシ経由でインターネットにアクセスし、リモートフォワーディングを使用して企業内の特定のサービスにアクセスすることができます。 - セキュアなリソース共有:
特定 の リソース を 外部 の パートナー 企業 と 共有 する 必要 が ある 場合 、 リモート フォワーディング を 用いる て 外部 の パートナー が アクセス できる サーバ 上 に リソース へ の 安全 な アクセス ポイント を 作成 し 、 ダイナミック フォワーディング を 利用 し て その パートナー 企業 から の アクセス を セキュア な 通信 経路 で 転送 し ます 。 - 複数地点間の安全なネットワーク構築:
企業が複数の地理的に分散した拠点を持つ場合、ダイナミックフォワーディングとリモートフォワーディングを組み合わせることで、各拠点間の安全な通信ネットワークを構築できます。これにより、どの拠点からも中央のサーバや他の拠点のリソースに安全にアクセスできるようになります。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...