web-dev-qa-db-ja.com

ssh * remote *ポート転送を制限するにはどうすればよいですか?

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

Authorized_keysのpermitopenオプションについて知っていますが、manページに記載されているように、ローカルの 'ssh -L'ポート転送のみが制限されます

議論されたように here ユーザーはnetcatまたは類似のものと同じになりますが、この場合、ユーザーにはシェルアクセス権がありません

また、selinuxまたはLD_PRELOADの使用について説明している this thread も見つけましたが、これまでにselinuxを設定したことがなく、LD_PRELOADでそれを行う方法についての情報も見つかりません。

多分誰かがそれを実装するためにopensshのためのパッチを作ったのですか?

編集: このバグレポート を見つけたので、まだ実装されていないと思います

22
Lluís

これは、2018-08-24にリリースされたOpenSSH 7.8p1に実装されています。リリースノートからの引用:

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

3
Frank

オプションがありますno-port-forwarding使用でき、すべてのポート転送を防止します。少なくともOpenSSH 4.3p2(CentOS 5.3-私がアクセスできる最も古いマシン)以降で存在します。 permitopenと同じ場所に置きます。

4
utopiabound

Sshを使用して制限することはできません。たぶん、selinuxやiptablesを使用することもできます。ただし、ニーズに合うかどうかに関係なく、代替戦略があります。 UNIXソケットへのバインドを使用します。これはopensshバージョン6.8以降で利用可能になるはずです。

ソケットを使用する場合、ファイルシステムACL(ソケットは* nixに依存する可能性があります)を自由に使用でき、これを使用して、あるユーザーが別のソケットにバインドするのを防ぐことができます。ただし、ポートへのバインドを妨げるものではないため、ユースケースによっては役に立たない場合がありますが、一貫してソケットのみを使用できる場合は、ポートは重要ではありません。

UNIXソケットでは、ダングリングソケットファイルを処理すると、リバースパブリッシャーが再接続しようとするときに問題が発生する場合があります。その問題について別の質問(および回答)があります。要するに、おそらくStreamLocalBindUnlink yesも使用したいと思うでしょう。

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

0
Timo