SSHトンネリングおよびポートフォワーディングのビジュアルガイド (2023)
(ittavern.com)SSHトンネリングおよびポートフォワーディングのビジュアルガイド
- 要約: このブログ記事は、SSHトンネリングおよびポートフォワーディングの理解を助けるために書かれたものです。テーマには、ユースケース、設定、SSHジャンプホスト、ローカル/リモート/動的ポートフォワーディング、そして制限事項が含まれます。
ユースケース
-
セキュリティ:
- FTPのような安全でない接続の暗号化
- SSHトンネル経由でのWeb管理パネルへのアクセス(公開鍵認証)
- 公開されるポート数の削減(22番ポートのみを公開)
-
問題解決:
- ファイアウォール/コンテンツフィルターの回避
- 別の経路の選択
-
接続:
- NATの背後にあるサーバーへのアクセス
- ジャンプホストを使用してインターネット経由で内部サーバーへアクセス
- ローカルポートをインターネットに公開
ポートフォワーディング
- 設定/準備:
- ローカルおよびリモートのユーザーは、ポートを開くための権限が必要
- 0-1024番ポートにはroot権限が必要
- クライアントとネットワークのファイアウォールを適切に設定
- SSHサーバーでポートフォワーディングを有効にする必要あり:
AllowTcpForwarding yes - 別のインターフェースでポートをフォワードするには
GatewayPorts yesを有効にする必要あり
SSHジャンプホスト / SSHトンネル
-
ジャンプホスト経由での接続:
ssh -J user@REMOTE-MACHINE:22 -p 22 user@10.99.99.1 -
複数のジャンプホストを使用:
ssh -J user@REMOTE-MACHINE:22,user@ANOTHER-REMOTE-MACHINE:22 -p 22 user@10.99.99.1
ローカルポートフォワーディング
-
例 1:
ssh -L 10.10.10.1:8001:localhost:8000 user@REMOTE-MACHINE -
例 2:
ssh -L 8001:10.99.99.1:8000 user@REMOTE-MACHINE
リモートポートフォワーディング
-
例 1+2:
ssh -R 8000:localhost:8001 user@REMOTE-MACHINE ssh -R 8000:10.10.10.2:8001 user@REMOTE-MACHINE -
例 3:
ssh -R 10.99.99.2:8000:10.10.10.2:8001 user@REMOTE-MACHINE
動的ポートフォワーディング
- SOCKSプロトコルの使用:
ssh -D 10.10.10.1:5555 user@REMOTE-MACHINE
SSH TUN/TAPトンネリング
- 双方向TCPトンネルの作成:
ssh -w local_tun[:remote_tun]
バックグラウンドでSSHを実行
-
バックグラウンド実行:
ssh -fN -L 8001:127.0.0.1:8000 user@REMOTE-MACHINE -
バックグラウンドSSHの停止:
ps -ef | grep ssh kill <PID>
SSH接続の維持
- タイムアウト対策:
ClientAliveInterval 15ClientAliveCountMax 3
制限事項
-
UDP:
- SSHは信頼できる転送を必要とするため、UDPはサポートされない
-
TCP-over-TCP:
- オーバーヘッドの増加によりスループットが低下し、レイテンシが増加する
-
VPNの代替ではない:
- SSHトンネリングはVPNの代替として使える場合もあるが、性能面ではVPNのほうが適している
-
潜在的なセキュリティリスク:
- 必要のない機能は無効化するのが望ましい
GN⁺のまとめ
- この記事は、SSHトンネリングとポートフォワーディングのさまざまなユースケースと設定方法を説明しています
- SSHトンネリングは、安全な接続を提供し、ファイアウォールを回避するのに有用です
- ただしVPNを置き換えるものではなく、性能低下などの制限事項があります
- 関連する他のプロジェクトとして、OpenVPNのようなVPNソリューションがあります
1件のコメント
Hacker Newsの意見
2024年には、SSHコマンドを直接書く代わりに、
~/.ssh/configファイルを使って LocalForward、RemoteForward、ProxyJump を設定するのがよいSSH トンネリングは、複雑な企業環境では不可欠である
ssh -D 8888 someserverコマンドを使い、ブラウザの SOCKS プロキシを localhost:8888 に設定すると、ブラウザのトラフィックはそのサーバー経由でルーティングされるファイアウォールの背後にあり固定 IP を持たない Linux サーバーや IoT デバイスに SSH 接続したい場合は、トンネリングサービスを利用できる
最も複雑な SSH トンネリングのハック経験は、データセンター間の接続で発生した
ネットワーキングの可視化がもっと進むことを望む
TCP-over-TCP はオーバーヘッドが増え、レイテンシが高くなって性能が低下する可能性がある
SSH トンネルは優れたツールだが、最近では TLS とリバースプロキシ機能が組み込まれたツールをより多く使っている
sshuttle はトンネリングにより適したツールである
sshuttle -r user@host 10.0.0.0/8コマンドを使うことで、VPN のように利用できる15年前、大学ネットワークのファイアウォールを回避するために SSH トンネルを使い始めた
SSH 自体にリダイレクト機能があるのか気になる