web-dev-qa-db-ja.com

ssh -Rはリモートでのみ127.0.0.1にバインドします

私は実行していますssh -N -f -R127.0.2.3:23000:127.1.2.3:23000 user@remote、そしてリモートのトンネルが127.0.2.3:23000、ただし127.0.0.1:23000、そしてリモートでいくつかのトンネルを開く必要があるので不便ですが、同じtcpポートをリッスンします。

ローカルマシンでは、トンネルは正しいIPアドレス(127.1.2.3:23000)を指しています。

リモートでいくつかのループバックデバイスを作成しようとしましたが、役に立ちませんでした。

LinuxおよびFreebsdサーバー(openbsd-ssh)も同様です。

では、ssh -Rが127.0.0.1以外のリモートのループバックIPにバインドしないのはなぜですか?

ありがとうございました。

(不適切な編集のため申し訳ありません:)

3
Auxorro

localオプションのバインドアドレスがSSHのクライアント側の制御下にある間(-L/ LocalForward で指定または変更-g/ GatewayPortsclientの構成)、remote-R/ RemoteForward を使用してクライアントが指定したオプションのバインドアドレスは、SSHのserverの制御下にありますserver設定 GatewayPorts を使用します。デフォルトではnoです。 clientspecifiedに設定して、クライアントがバインドするアドレスを選択できるようにする必要があります。

GatewayPorts
リモートホストがクライアントに転送されたポートに接続できるかどうかを指定します。 デフォルトでは、sshd(8)はリモートポート転送をループバックアドレスにバインドします。これにより、他のリモートホストが転送ポートに接続できなくなります。 GatewayPortsを使用して、sshdがリモートポート転送を非ループバックアドレスにバインドできるように指定し、他のホストが接続できるようにすることができます。引数はnoにして、ローカルホストのみがリモートポート転送を利用できるようにするか、yesにしてリモートポート転送をワイルドカードアドレスにバインドするか、またはclientspecifiedを指定すると、クライアントは転送がバインドされるアドレスを選択できます。 デフォルトはnoです。

さらに、クライアントの RemoteForward エントリも同様に示しています。

[...]
bind_addressが指定されていない場合、デフォルトではループバックアドレスにのみバインドされます。 bind_addressが ‘*’または空の文字列の場合、すべてのインターフェースでリッスンするように転送が要求されます。 リモートbind_addressの指定は、サーバーの GatewayPorts オプションが有効な場合にのみ成功します(sshd_config(5)を参照)

そのため、サーバー上のsshのサーバー構成を変更し(通常はルートアクセスで)、このエントリをsshd_configファイルに追加(または編集)できるようにする必要があります。

GatewayPorts clientspecified

できない場合は、サーバー側に他の利用可能なツールがあれば(またはローカルにインストール可能)、この(非常に弱い)セキュリティ制限を克服できます。たとえば socat 、またはssh自体をサーバーからそれ自体にLocalForwardを使用して(暗号化の層を無用に追加していても)。

5
A.B