SSH *リモート*ポート転送を制限する方法は?

SSH *リモート*ポート転送を制限する方法は?

ssh -Rユーザーがリモートで転送できるポートを制限する必要があります。

permitopenAuthorized_keysオプションについては知っていますが、マニュアルページによると、ローカルのポート転送のみを制限していますssh -L

議論ここユーザーは同じ結果netcatまたは類似の結果を取得しますが、この場合、ユーザーはシェルにアクセスできません。

私も見つけました。このスレッドselinuxまたはを使用する方法について話していますが、LD_PRELOAD以前はselinuxを設定したことがなく、使用方法に関する情報が見つかりませんLD_PRELOAD

たぶん誰かがこれを達成するためにopensshのパッチを作成したのでしょうか?

編集:見つかりましたこのバグレポートだからまだ実装されていないと思います。

答え1

これは、2018年8月24日にリリースされたOpenSSH 7.8p1で実装されました。リリースノートの引用:

PermitListenディレクティブをsshd_config(5)に追加し、対応するPermitListen = authorized_keysオプションを追加して、リモート転送(ssh -R ...)で使用できる受信アドレスとポート番号を制御します。

答え2

no-port-forwardingすべてのポート転送をブロックするオプションがあります。少なくともOpenSSH 4.3p2(CentOS 5.3 - 私がアクセスできる最も古いシステム)以降です。元の意図した位置に置きますpermitopen

答え3

SSHを使用して制限することはできません。おそらくこの目的のためにselinuxやiptablesを使うことができます。ただし、お客様のニーズに合ったり合わない可能性がある代替戦略があります。 UNIXソケットへのバインディングを使用します。 openssh バージョン 6.8 から使用できます。

ソケットを使用するときにファイルシステムACLを使用できます(ソケットがそれに準拠しているかどうかは* nixによって異なります)、これを使用して、あるユーザーが別のユーザーのソケットにバインドするのを防ぎます。ただし、どのような方法でもポートバインディングを妨げないため、ユースケースによっては役に立たない可能性がありますが、常にソケットしか使用できない場合、ポートは重要ではない可能性があります。

リバースパブリッシャは再接続を試みるため、UNIXソケットを使用してぶら下がっているソケットファイルを処理できない場合があります。この問題には別の質問(および回答)があります。つまり、次のものを使用することもできますStreamLocalBindUnlink yes

接続が閉じた後にSSHリバーストンネルソケットをクリーンアップする方法は?

答え4

コピー:https://superuser.com/questions/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

以下を使ってもいいと思いますか?

サーバー構成ファイルにライセンスオープンオプション。このオプションを使用して、転送を設定できるホストとポートを指定できます。このオプションはMatchブロック内で使用できるため、ユーザー、グループ、ホスト名、またはIPアドレスパターンによって制限される可能性があります。

編集:したがって、サーバー構成に以下を追加します。

ホスト:ポートを開くことを許可する

IPv4_addr:portを開くことを許可する

許可オープン[IPv6_addr]:ポート

関連情報