別のネットワーク上の別のLinuxデバイスに接続している場合は、それをパブリックインターネットに公開する必要があり、システムとファイルが危険にさらされる可能性があります。したがって、SSHトンネリングは、ソースからクライアントマシンへ、またはその逆に、高速かつ安全な方法でデータを送信するために使用されます。
SSHトンネリングは、サーバーマシンとクライアントマシンの間に安全で暗号化されたSSH接続を作成する方法であり、これを介してデータを転送したり、サービスを中継したりできます。今日の記事では、SSHトンネリングを設定し、SSHトンネルを介してトラフィックを安全にルーティングする方法を説明します。
SSHトンネリングとは何ですか?
SSHトンネリングは、暗号化されていないトラフィックまたはデータを暗号化されたチャネルを介して送信する方法です。簡単に言えば、ある場所から別の場所に安全な方法でデータを転送するためのトンネルであると言えます。ファイル送信とは別に、SSHトンネリングを使用してファイアウォールを越えてイントラネットサービスにアクセスし、VPNを実装することもできます。
SSHトンネリングはSSH転送とも呼ばれ、暗号化されたプロトコル(FTP)を使用してデータを転送し、ファイアウォールをバイパスし、地理的に制限されたコンテンツにアクセスする簡単で効果的な方法です。
SSHポートフォワーディングには次の3つのタイプがあります。
- ローカルポートフォワーディング
- リモートポートフォワーディング
- 動的ポート転送
ローカル転送
ローカル転送は、クライアントマシン(ローカルSSHクライアント)からリモートマシン(SSHサーバー)にポートを転送し、接続が宛先マシンの別のポートに転送される方法です。
SSHクライアントは、特定の特定のポートで接続を確認し、接続要求を受信すると、リモートSSHサーバーの特定のポートに接続をトンネリングします。次に、サーバーは構成されたポートで別の宛先マシンに接続します。
これは主に、データベースのように外部から内部ネットワーク上のリモートサービスに接続するために使用されます。また、インターネットやジャンプサーバーを介したリモートファイル共有にも使用されます。
ローカルポートフォワーディングを設定するにはどうすればよいですか?
ポート3000のリモートサーバーで実行されているアプリケーションにアクセスするためにファイアウォールによって制限されている例を見てみましょう。次に、ローカルポート(つまり8080)を転送してアプリケーションにローカルにアクセスします。
-L
ローカルポート転送を構成するために使用されます
ssh [email protected] -L 8080:server1.example.com:3000
または
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER
- [LOCAL_IP:] LOCAL_PORT –ローカルマシンのポート番号とIPアドレス。 1024より大きい任意のポート番号を使用できます。
- DESTINATION:DESTINATION_PORT –宛先マシンのポートとIPアドレスまたはホスト名。
- [[email protected]] SERVER_IP –リモートsshユーザーのユーザー名とサーバーIPアドレス。
-f
sshにバックグラウンドで実行するように指示します。
ssh -f -N [email protected] -L 8080:server1.example.com:3000
そして-N
リモートコマンドを実行しないように指示します。 [この場合、シェルは取得されません。]
ssh -N [email protected] -L 8080:server1.example.com:3000
ここで、ローカルマシンでブラウザを開き、アドレスserver.example.com:3000を使用してリモートアプリケーションにアクセスする代わりに、localhost:8080を使用してリモートアプリケーションにアクセスできます。
リモート転送
リモートポート転送はローカルポート転送の反対であり、リモートマシンからローカルコンピューターに接続できます。 SSHは、デフォルトではリモートポート転送をサポートしていません。したがって、ssh設定ファイルで有効にする必要があります。
編集モードでssh設定ファイルを開きます
sudo vim /etc/ssh/sshd_config
GatewayPortsを検索し、yesに設定します。
GatewayPorts yes
変更を保存し、編集モードを終了して、サーバーを再起動します。
sudo systemctl restart sshd
これで、リモートポート転送が有効になりました。オープンSSHでは、-Rコマンドを使用してリモートポート転送を設定します。
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER
- [REMOTE:] REMOTE_PORT –リモートSSHサーバーのIPアドレスとポート番号。
- DESTINATION:DESTINATION_PORT –宛先マシンのホスト名とIPアドレス。
- [[email protected]] SERVER_IP –リモートSSHユーザー名とIPアドレス。
例:
ssh -R 8080:127.0.0.1:3000 -N -f [email protected]ote.host
SSHサーバーはポート8080でリッスンし、ローカルマシンの8080からポート3000へのすべてのトラフィックをトンネリングします
または、次のコマンドを使用して、リモートマシンのポート5000をローカルマシンのポート3000に転送できます。
ssh -f -N [email protected] -R 5000:localhost:3000
リモートポートフォワーディングは、主に外部から内部サービスへのアクセスを提供するために使用されます。
動的ポートフォワーディング
3番目で最後のタイプのポートフォワーディングはダイナミックポートフォワーディングです。ローカルポートフォワーディングとリモートポートフォワーディングを使用すると、単一のポートをトンネリングして通信できますが、ダイナミックポートフォワーディングでは、さまざまなポートを実行して通信できます。
ローカルマシン上にSOCKSプロキシサーバーとして機能するソケットを作成するか、ローカルマシンをSOCKSプロキシサーバーとしてセットアップし、デフォルトでポート1080でリッスンします。サーバーがこのポートに接続すると、リモートマシンに転送された後、ダイナミックポートでダイナミックマシンに転送されます。
SOCKSとは何ですか?
これは、クライアントマシンがプロキシを介してサーバーに接続する方法を定義するインターネットプロトコルです。
-Dオプションを使用すると、動的ポート転送を有効にできます。例を挙げてポートフォワーディングを理解しましょう-
ssh -D [LOCAL_IP:]LOCAL_PORT [[email protected]]SSH_SERVER
- [LOCAL_IP:] LOCAL_PORT –ローカルマシンのIPアドレスとポート番号。
- [[email protected]] SERVER_IP –リモートサーバーのIPアドレスとユーザー名。
または、このコマンドはSOCKSプロキシを開始し、リモートホストに接続できるようにします。
ssh -f -N -D 1080 [email protected]
結論
SSHトンネリングは、暗号化されていないデータを暗号化されたトンネルを介して転送するための便利な方法です。 3つのオプションがあり、必要に応じて選択できます。