Linux で SSH トンネリングまたはポート転送を作成する方法
SSH トンネリング (SSH ポート転送とも呼ばれます) は、ローカル ネットワーク トラフィックを SSH 経由でリモート ホストにルーティングするだけです。これは、すべての接続が暗号化を使用して保護されていることを意味します。基本的なVPN (仮想プライベート ネットワーク) を簡単に設定する方法を提供し、インターネットなどの安全でないパブリック ネットワークを介してプライベート ネットワークに接続する場合に便利です。
また、ngrok で実装されているように、NAT やファイアウォールの背後にあるローカル サーバーを安全なトンネル経由でインターネットに公開するために使用されることもあります。
SSH セッションでは、デフォルトでトンネリング ネットワーク接続が許可されており、SSH ポート転送にはローカル、リモート、動的の 3 種類があります。 > ポートフォワーディング。
この記事では、Linux で SSH トンネリングやさまざまなタイプのポート転送を迅速かつ簡単にセットアップする方法を説明します。
テスト環境:
この記事では、次の設定を使用します。
- ローカルホスト: 192.168.43.31
- リモート ホスト: ホスト名が server1.example.com の Linode CentOS 7 VPS。
通常、次のように SSH を使用してリモート サーバーに安全に接続できます。この例では、ローカル ホストとリモート ホスト間にパスワードなしの SSH ログインを設定しているため、ユーザー管理者のパスワードは要求されません。
ssh [email
ローカル SSH ポート転送
このタイプのポート転送を使用すると、ローカル コンピュータからリモート サーバーに接続できます。制限の厳しいファイアウォールの内側にいるか、送信ファイアウォールによってリモート サーバーのポート 3000 で実行されているアプリケーションへのアクセスがブロックされていると仮定します。
次のように、ローカル ポート (8080 など) を転送して、それを使用してアプリケーションにローカルにアクセスできます。 -L
フラグは、リモート ホストに転送されるポートとリモート ポートを定義します。
ssh [email -L 8080:server1.example.com:3000
-N
フラグを追加すると、リモート コマンドを実行しないことになります。この場合、シェルは取得されません。
ssh -N [email -L 8080:server1.example.com:3000
-f
スイッチは、ssh がバックグラウンドで実行されるように指示します。
ssh -f -N [email -L 8080:server1.example.com:3000
次に、ローカル マシンでブラウザを開き、アドレス server1.example.com:3000 を使用してリモート アプリケーションにアクセスする代わりに、単純に localhost:8080
を使用するか、 192.168.43.31:8080
(以下のスクリーンショットに示すように)。
リモート SSH ポート転送
リモート ポート転送を使用すると、リモート マシンからローカル コンピュータに接続できます。デフォルトでは、SSH はリモート ポート転送を許可しません。これを有効にするには、リモート ホスト上の SSHD メイン構成ファイル /etc/ssh/sshd_config の GatewayPorts ディレクティブを使用します。
お気に入りのコマンドライン エディタを使用して、編集するファイルを開きます。
sudo vim /etc/ssh/sshd_config
スクリーンショットに示すように、必要なディレクティブを探してコメントを解除し、その値を yes
に設定します。
GatewayPorts yes
変更を保存して終了します。次に、sshd を再起動して、最近行った変更を適用する必要があります。
sudo systemctl restart sshd
OR
sudo service sshd restart
次に、次のコマンドを実行して、リモート マシンのポート 5000 をローカル マシンのポート 3000 に転送します。
ssh -f -N [email -R 5000:localhost:3000
このトンネリング方法を理解すると、特に NAT やファイアウォールの背後にあるローカル開発サーバーを、安全なトンネルを介してインターネットに簡単かつ安全に公開できます。 Ngrok、pagekite、localtunnel などのトンネルも同様に機能します。
動的SSHポート転送
これは 3 番目のタイプのポート転送です。単一ポートとの通信を可能にするローカルおよびリモートのポート転送とは異なり、さまざまなポートにわたるあらゆる種類の TCP 通信が可能になります。動的ポート転送は、デフォルトでポート 1080 をリッスンするSOCKS プロキシ サーバーとしてマシンを設定します。
まず、SOCKS は、クライアントがプロキシ サーバー (この場合は SSH) 経由でサーバーに接続する方法を定義するインターネット プロトコルです。 -D オプションを使用して、動的ポート転送を有効にできます。
次のコマンドは、ポート 1080 で SOCKS プロキシを開始し、リモート ホストに接続できるようにします。
ssh -f -N -D 1080 [email
今後は、設定を編集してこの SSH プロキシ サーバーを使用するように構成することで、マシン上のアプリケーションがこの SSH プロキシ サーバーを使用し、リモート サーバーに接続できるようになります。 SSH セッションを閉じると、SOCKS プロキシが動作を停止することに注意してください。
こちらもお読みください: SSH を閉じた後もリモート SSH セッションを実行し続ける 5 つの方法
まとめ
この記事では、安全な SSH 接続を介してトラフィックをトンネリングするための、あるマシンから別のマシンへのさまざまなタイプのポート転送について説明しました。これは、SSH の非常に多くの使用法の 1 つです。以下のフィードバック フォームからこのガイドにあなたの意見を追加できます。
注意: SSH ポート転送には重大な欠点がいくつかあり、悪用される可能性があります。ネットワーク監視やトラフィック フィルタリング プログラム (またはファイアウォール) をバイパスするために使用される可能性があります。攻撃者はこれを悪意のある活動に使用する可能性があります。次回の記事では、SSH ローカル ポート転送を無効にする方法を説明します。つながりを保ちましょう!