「sshポートフォワーディング」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の2版が非表示)
行1: 行1:
<!--
 
vim: filetype=mediawiki
 
-->
 
 
[[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。
 
[[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。
 
[[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。
 
[[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。
行13: 行10:
  
 
== 概要 ==
 
== 概要 ==
 
 
[[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。
 
[[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。
 
[[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。
 
[[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。
 
環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。
 
環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。
 
 
 
== ポートフォワーディング ==
 
== ポートフォワーディング ==
 
 
ポートフォワーディングには、以下の種類があります。
 
ポートフォワーディングには、以下の種類があります。
 
* ローカル
 
* ローカル
 
* リモート
 
* リモート
 
* ダイナミック
 
* ダイナミック
 
 
=== ローカルポートフォワーディングの例 ===
 
=== ローカルポートフォワーディングの例 ===
 
 
ローカルポートフォワーディングは、 -L オプションを利用します。
 
ローカルポートフォワーディングは、 -L オプションを利用します。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行46: 行37:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
hoge のアドレスにアクセスできるプロセス、ユーザからhoge:8080を利用できます。
 
hoge のアドレスにアクセスできるプロセス、ユーザからhoge:8080を利用できます。
 
 
=== リモートポートフォワーディング ===
 
=== リモートポートフォワーディング ===
 
 
サーバからクライアントにポートフォワーディングします。
 
サーバからクライアントにポートフォワーディングします。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行54: 行43:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
リモートの [[syslog]] をローカルに飛ばしてくる、といったことができます。
 
リモートの [[syslog]] をローカルに飛ばしてくる、といったことができます。
 
 
=== ダイナミックアプリケーションレベルポートフォワーディング ===
 
=== ダイナミックアプリケーションレベルポートフォワーディング ===
 
 
[[ssh]] は、SOCKS4, SCOKS5 プロトコルをサポートしています。
 
[[ssh]] は、SOCKS4, SCOKS5 プロトコルをサポートしています。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
-D [bind_address:]port
 
-D [bind_address:]port
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== ゲートウェイポート ===
 
=== ゲートウェイポート ===
 
 
ポートフォワーディングは、デフォルトでは、別のホストから接続できません。
 
ポートフォワーディングは、デフォルトでは、別のホストから接続できません。
 
[[ssh]] に -g オプションをつけることで、0.0.0.0 でバインドするため、リモートからでも接続可能になります。
 
[[ssh]] に -g オプションをつけることで、0.0.0.0 でバインドするため、リモートからでも接続可能になります。
  
 
リモートポートフォワーディングは、サーバ側で許可が必要です。[[sshd_config]] で GatewayPorts yes  と設定します。
 
リモートポートフォワーディングは、サーバ側で許可が必要です。[[sshd_config]] で GatewayPorts yes  と設定します。
 
 
 
== 利用例 ==
 
== 利用例 ==
 
 
=== ホームネットワークのsshd に外部から接続する ===
 
=== ホームネットワークのsshd に外部から接続する ===
 
 
フレッツなどでインターネットに接続している環境に [[Unix]] マシンがあります。
 
フレッツなどでインターネットに接続している環境に [[Unix]] マシンがあります。
 
レンタルサーバを借りていて、レンタルサーバから [[Unix]] マシンに接続する例です。
 
レンタルサーバを借りていて、レンタルサーバから [[Unix]] マシンに接続する例です。
行86: 行67:
  
 
# [[Unix]] マシンで下記コマンドを実行します。
 
# [[Unix]] マシンで下記コマンドを実行します。
#: <syntaxhighlight lang="bash">% ssh -l foo 4444:192.168.0.2:22 rental.com</syntaxhighlight>
+
#: <syntaxhighlight lang="bash">% ssh -l foo -R 4444:192.168.0.2:22 rental.com</syntaxhighlight>
 
# レンタルサーバで 4444 ポートが利用できるようになります。
 
# レンタルサーバで 4444 ポートが利用できるようになります。
 
# レンタルサーバで [[ssh]] を実行します。
 
# レンタルサーバで [[ssh]] を実行します。
 
#: <syntaxhighlight lang="bash"> % ssh -l foo localhost -p 4444</syntaxhighlight>
 
#: <syntaxhighlight lang="bash"> % ssh -l foo localhost -p 4444</syntaxhighlight>
 
 
=== 多段リモートポートフォワーディング ===
 
=== 多段リモートポートフォワーディング ===
 
 
host1 から host2 にリモートポートフォワーディングし、host2 から host3 にリモートポートフォワーディングをします。
 
host1 から host2 にリモートポートフォワーディングし、host2 から host3 にリモートポートフォワーディングをします。
 
host3 に作成したポートに接続して、host2 を経由して、 host1 の [[sshd]] に接続する例です。
 
host3 に作成したポートに接続して、host2 を経由して、 host1 の [[sshd]] に接続する例です。
行104: 行83:
  
 
== 関連項目 ==
 
== 関連項目 ==
 
 
* [[ssh]]
 
* [[ssh]]
 
* [[ポートフォワーディング]]
 
* [[ポートフォワーディング]]
 +
* [[トンネリング]]
 +
<!-- vim: filetype=mediawiki
 +
-->

2015年6月10日 (水) 23:24時点における最新版

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

関連項目