6 ポイント 投稿者 GN⁺ 2024-09-20 | 1件のコメント | WhatsAppで共有

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 15
    • ClientAliveCountMax 3
制限事項
  • UDP:

    • SSHは信頼できる転送を必要とするため、UDPはサポートされない
  • TCP-over-TCP:

    • オーバーヘッドの増加によりスループットが低下し、レイテンシが増加する
  • VPNの代替ではない:

    • SSHトンネリングはVPNの代替として使える場合もあるが、性能面ではVPNのほうが適している
  • 潜在的なセキュリティリスク:

    • 必要のない機能は無効化するのが望ましい

GN⁺のまとめ

  • この記事は、SSHトンネリングとポートフォワーディングのさまざまなユースケースと設定方法を説明しています
  • SSHトンネリングは、安全な接続を提供し、ファイアウォールを回避するのに有用です
  • ただしVPNを置き換えるものではなく、性能低下などの制限事項があります
  • 関連する他のプロジェクトとして、OpenVPNのようなVPNソリューションがあります

1件のコメント

 
GN⁺ 2024-09-20
Hacker Newsの意見
  • 2024年には、SSHコマンドを直接書く代わりに、~/.ssh/config ファイルを使って LocalForward、RemoteForward、ProxyJump を設定するのがよい

    • 設定例を使えば、複数の中継 SSH 接続を経由してデータを転送する際に時間を節約できる
    • 設定後は、エイリアス経由で target-server に SSH、SCP、RSYNC を使える
    • LocalForward と RemoteForward の設定によって、ポートフォワーディングを簡単に行える
  • SSH トンネリングは、複雑な企業環境では不可欠である

    • 多くの官僚的な手続きや待ち時間のため、必要なアクセス権を得るまでに時間がかかる
    • ssh -D 8888 someserver コマンドを使い、ブラウザの SOCKS プロキシを localhost:8888 に設定すると、ブラウザのトラフィックはそのサーバー経由でルーティングされる
  • ファイアウォールの背後にあり固定 IP を持たない Linux サーバーや IoT デバイスに SSH 接続したい場合は、トンネリングサービスを利用できる

  • 最も複雑な SSH トンネリングのハック経験は、データセンター間の接続で発生した

    • A から B へ、B から C へデータを移動する必要があった
    • rsync、SSH トンネル、鍵、ルーティングを組み合わせて、データの移動に成功した
    • 当時は大きな達成感があり、今でもその記憶は鮮明である
  • ネットワーキングの可視化がもっと進むことを望む

    • 特に低レベル接続におけるトラフィックの可視化が必要である
  • TCP-over-TCP はオーバーヘッドが増え、レイテンシが高くなって性能が低下する可能性がある

    • SSH トンネルでは、TAP/TUN を使わない限り問題にならない
    • しかし、複数チャネルを使う場合は性能低下が発生することがある
  • SSH トンネルは優れたツールだが、最近では TLS とリバースプロキシ機能が組み込まれたツールをより多く使っている

  • sshuttle はトンネリングにより適したツールである

    • sshuttle -r user@host 10.0.0.0/8 コマンドを使うことで、VPN のように利用できる
  • 15年前、大学ネットワークのファイアウォールを回避するために SSH トンネルを使い始めた

    • デフォルトポートを 443 に変更して使っていた
    • それ以降、ファイアウォール回避以外にもさまざまな用途で使っている
  • SSH 自体にリダイレクト機能があるのか気になる

    • A が B に SSH 接続を試みると、B が C に接続するよう指示し、A が透過的に C に直接接続する機能
    • B はもはや重要なデータ経路の一部ではない
    • そのような機能が存在するのか気になる