sshポートフォワーディング

提供: セキュリティ
2015年6月10日 (水) 23:24時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

sshコマンドでは、ポートフォワーディングをサポートしています。 ssh でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。

読み方

sshポートフォワーディング
えす えす えいち ぽーと ふぉわーでぃんぐ
ssh port forwarding
えす えす えいち ぽーと ふぉわーでぃんぐ

概要

sshコマンドでは、ポートフォワーディングをサポートしています。 ssh でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。

ポートフォワーディング

ポートフォワーディングには、以下の種類があります。

  • ローカル
  • リモート
  • ダイナミック

ローカルポートフォワーディングの例

ローカルポートフォワーディングは、 -L オプションを利用します。

-L [bind_address:]local_port:remote_hostname:remote_port

クライアントからサーバに対して、sshトンネルを作成します。

localhost:8080 と foo:80 をつなぐ。

% ssh -L 8080:foo:80 foo

8080には、ローカルホストからしか接続ができません。 ローカルホストにログインできるユーザやプロセスが8080に接続できます。

ローカルホストが hoge だとして hoge:8080 と foo:80 をつなぐ。

% ssh -L hoge:8080:foo:80 foo

hoge のアドレスにアクセスできるプロセス、ユーザからhoge:8080を利用できます。

リモートポートフォワーディング

サーバからクライアントにポートフォワーディングします。

-R [bind_address:]in_port:hostname:goal_port

リモートの syslog をローカルに飛ばしてくる、といったことができます。

ダイナミックアプリケーションレベルポートフォワーディング

ssh は、SOCKS4, SCOKS5 プロトコルをサポートしています。

-D [bind_address:]port

ゲートウェイポート

ポートフォワーディングは、デフォルトでは、別のホストから接続できません。 ssh に -g オプションをつけることで、0.0.0.0 でバインドするため、リモートからでも接続可能になります。

リモートポートフォワーディングは、サーバ側で許可が必要です。sshd_config で GatewayPorts yes と設定します。

利用例

ホームネットワークのsshd に外部から接続する

フレッツなどでインターネットに接続している環境に Unix マシンがあります。 レンタルサーバを借りていて、レンタルサーバから Unix マシンに接続する例です。 ルーターのポートフォワーディングの設定をすればいいだけですが、ここでは、ssh のリモートポートフォワーディングを利用して実現します。

  • Unix マシンのアドレスは、 192.168.0.2 とします。
  • レンタルサーバは、 rental.com とします。
  • 両方のホストのアカウントは、foo とします。

レンタルサーバ上の 4444 ポートを開き、そこに対する接続を 192.168.0.22 の 22 番ポートにフォワードします。 ssh の接続は、192.168.0.2 から レンタルサーバに対して行います。

  1. Unix マシンで下記コマンドを実行します。
    % ssh -l foo -R 4444:192.168.0.2:22 rental.com
  2. レンタルサーバで 4444 ポートが利用できるようになります。
  3. レンタルサーバで ssh を実行します。
     % ssh -l foo localhost -p 4444

多段リモートポートフォワーディング

host1 から host2 にリモートポートフォワーディングし、host2 から host3 にリモートポートフォワーディングをします。 host3 に作成したポートに接続して、host2 を経由して、 host1 の sshd に接続する例です。

  1. host2 の 1111 を localhost(host1) の 22に接続します。
    host1% ssh -l foo 1111:localhost:22 host2
  2. host3 の 2222 を localhost(host2) の 1111に接続します。 1111 のポートは、 host1 の 22 に接続されています。
    host2% ssh -l foo 2222:localhost:1111 host3
  3. host3 の 2222 に ssh コマンドで接続します。これは、最終的に host1 の 22 の sshd に接続されます。
    host3% ssh -l foo localhost -p 2222

関連項目




スポンサーリンク