ユーザーがリモートで 'ssh -R
'に転送できるポートを制限する必要があります。
Authorized_keysのpermitopen
オプションについて知っていますが、manページに記載されているように、ローカルの 'ssh -L
'ポート転送のみが制限されます
議論されたように here ユーザーはnetcat
または類似のものと同じになりますが、この場合、ユーザーにはシェルアクセス権がありません
また、selinuxまたはLD_PRELOAD
の使用について説明している this thread も見つけましたが、これまでにselinuxを設定したことがなく、LD_PRELOAD
でそれを行う方法についての情報も見つかりません。
多分誰かがそれを実装するためにopensshのためのパッチを作ったのですか?
編集: このバグレポート を見つけたので、まだ実装されていないと思います
これは、2018-08-24にリリースされたOpenSSH 7.8p1に実装されています。リリースノートからの引用:
permitListenディレクティブをsshd_config(5)に追加し、対応するpermitlisten = authorized_keysオプションを追加して、リモート転送(ssh -R ...)で使用できるリスンアドレスとポート番号を制御します。
オプションがありますno-port-forwarding
使用でき、すべてのポート転送を防止します。少なくともOpenSSH 4.3p2(CentOS 5.3-私がアクセスできる最も古いマシン)以降で存在します。 permitopen
と同じ場所に置きます。
Sshを使用して制限することはできません。たぶん、selinuxやiptablesを使用することもできます。ただし、ニーズに合うかどうかに関係なく、代替戦略があります。 UNIXソケットへのバインドを使用します。これはopensshバージョン6.8以降で利用可能になるはずです。
ソケットを使用する場合、ファイルシステムACL(ソケットは* nixに依存する可能性があります)を自由に使用でき、これを使用して、あるユーザーが別のソケットにバインドするのを防ぐことができます。ただし、ポートへのバインドを妨げるものではないため、ユースケースによっては役に立たない場合がありますが、一貫してソケットのみを使用できる場合は、ポートは重要ではありません。
UNIXソケットでは、ダングリングソケットファイルを処理すると、リバースパブリッシャーが再接続しようとするときに問題が発生する場合があります。その問題について別の質問(および回答)があります。要するに、おそらくStreamLocalBindUnlink yes
も使用したいと思うでしょう。