Product SiteDocumentation Site

9.4.2. ポート転送

SSH はポート転送経由で他のセキュアではない TCP/IP プロトコルをセキュアにできます。この技術を使用するとき、SSH サーバーは SSH クライアントへの暗号化されたパイプになります。
ポート転送はクライアントにあるローカルポートをサーバーにあるリモートポートに対応付けることにより機能します。SSH はサーバーのあらゆるポートをクライアントのあらゆるポートに対応付けられます。この機能がうまく動作するために、ポート番号が一致する必要はありません。

予約済みポート番号の使用

1024 以下のポートをリスンする為のポート転送をセットするには、 root レベルのアクセスが必要です。
localhost におけるコネクションのみをリッスンする TCP/IP ポート転送チャネルを作成するには、以下の形式でコマンドを使用します:
ssh -L local-port:remote-hostname:remote-port username@hostname
たとえば、暗号化された接続を通した POP3 を用いて mail.example.com というサーバーにある電子メールを確認するには、以下のコマンドを使用します:
~]$ ssh -L 1100:mail.example.com:110 mail.example.com
ポート転送チャネルがクライアントマシンとメールサーバーの間に置かれると、POP3 メールクライアントが新しいメールを確認するために localhost のポート 1100 を使用するよう指示します。ポート 1100 に送られるリクエストはすべて、セキュアに mail.example.com サーバーに送られます。
mail.example.com が SSH サーバーを実行していなくても、同じネットワークにある他のサーバーが実行しているならば、SSH はコネクションの一部をセキュアにするために使用できます。しかしながら、わずかに異なるコマンドが必要になります:
~]$ ssh -L 1100:mail.example.com:110 other.example.com
この例では、クライアントマシンのポート 1100 からの POP3 リクエストは、ポート 22 における SSH コネクションを通して SSH サーバー other.example.com に転送されます。そして、other.example.com は、新しいメールをチェックするために mail.example.com のポート 110 に接続します。この技術を使用するとき、クライアントシステムと other.example.com SSH サーバーの間のコネクションはセキュアです。
ポート転送はネットワークのファイアウォールを経由して情報をセキュアに取得するためにも使用できます。もしファイアウォールが、標準的なポート(つまり、ポート22)を通して SSH 通信を許可するよう設定しているが、他のすべてのポートにアクセスを禁止しているならば、ブロックされているポートを使用する2つのホスト間のコネクションは、確立された SSH コネクション上でコミュニケーションをリダイレクトすることにより可能になります。

コネクションはクライアントシステムと同程度しかセキュアではありません。

この方法でポート転送を使って、接続を転送すると、そのクライアントシステム上のユーザーはいずれもそのサーバーに接続できるようになります。但し、クライアントシステムが侵略された場合、攻撃者は転送サービスにまでもアクセスが出来るようになります。
ポート転送について心配のあるシステム管理者は、/etc/ssh/sshd_config において AllowTcpForwarding 行に No パラメーターを指定して、sshd サービスを再起動するにより、この機能を無効にできます。