SSHローカルポート転送を無効にする方法


20

UbuntuとOpenSSHデーモンを実行しているサーバーがあります。それをS1と呼びましょう。

クライアントマシンからこのサーバーを使用して(C1の1つを呼び出しましょう)、リモートポート転送を使用してSSHリバーストンネルを実行します。

ssh -R 1234:localhost:23 login@S1

S1では、デフォルトのsshd_configファイルを使用します。私が見ることができることから、S1で正しい資格情報{login、pwd}を持っている人は誰でもS1にログインでき、リモートポート転送ローカルポート転送を行うことができます。このような資格情報は将来的に証明書になる可能性があるため、証明書を取得した人はどこからでも(必ずしもC1ではない)S1にログインできるため、ローカルポート転送を作成できます。

私にとって、ローカルポートフォワーディングを許可すると、ある種のパブリックプロキシを作成できるため、あまりにも危険です。-L転送のみを無効にする方法を探しています。

私は次のことを試しましたが、これはローカルとリモートの両方の転送を無効にします:

AllowTcpForwarding No

また、次のことも試してみました。これにより、-LからSX:1のみが許可されます。何もないよりはましですが、それでも私が必要とするものではありません。これは「なし」オプションです。

PermitOpen SX:1

だから、方法があるかどうか疑問に思っているので、すべてのローカルポート転送を禁止して次のようなものを書くことができます:

PermitOpen none:none

次はいいアイデアですか?

PermitOpen localhost:1

だから、いつものように、これの根源をつかむことができます:あなたの本当の問題は何ですか、なぜあなたはモバイル/組み込みデバイス用にこのようなものをセットアップしたいのですか、何を解決したいのですか?
アキラ

ここで解決すべき問題は、インターネットから接続されたモバイル/組み込みデバイスへのTelnetセッションを、デバイスがNATまたはファイアウォールで接続されている可能性があることを考慮して開くことができるようにすることです。インターネットから。
SCO

telnet ..何のため?「スタン」のファイアウォールのGoogleへのパンチ穴用
アキラ

回答:


16

ログイン資格情報を持つ人は誰でも、sshdの独自のインスタンスを起動し、ランダムポートで実行し、-Lローカルフォワーディングを含め、何でも許可できます。

% /usr/sbin/sshd -d -f mysshd.config -p 12345

ユーザーがマシンで何かをすることを信頼していない場合は、そもそもログインを許可しないでください。

(ところで、-Dフラグは一種の「プロキシー問題」でもあります)


まあ、私はこの目的のために非常に制限的なアカウントをセットアップできると思います(例えば、ユーザーを自宅に置き、リストなし、ファイルシステムブラウジングなし)、それは起動してsshd(またはsshdバイナリをインストールして起動)できません。ポイントは、クライアントが組み込みデバイスであることになっているということです。ただし、おそらく証明書が埋め込まれ、フラッシュメモリがダンプされる可能性があるため、証明書が漏えいして、だれでもS1にログインできる可能性があります。
SCO

その特定のユーザーにChrootDirectoryを使用すると、トリックが実行されます。
SCO

1
authorized_keysに設定しcommand="/sbin/nologin"ます。これにより、サーバーでコマンドを実行できなくなります。
-Justis

「ログイン資格情報を持っている人なら誰でも自分の<whatever>を呼び出すことができます」という文は偽です。sshこれを許可しないログインシェルを厳しく制限したアカウントに接続するために使用できます。ポート転送は、このような制限されたシェルのセキュリティホールです。許可されたコマンドの実行に加えて、ユーザーはトンネルを作成できます。
カズ

3
sshd_configmanページからの引用:ユーザーがシェルアクセスを拒否されない限り、 TCP転送を無効にしてもセキュリティは向上しないことに注意してください(エンファシス鉱山)。
カズ

17

別の解決策は、特定のユーザーにのみポート転送を許可することです。

SSHから:決定的なガイド

ポート転送は、sshdでグローバルに有効または無効にできます。これは、/ etc / sshd_configのサーバー全体の構成キーワードAllowTcpForwardingを使用して行われます。キーワードの値はyes(デフォルト、転送を有効化)またはno(転送を無効化)にすることができます。

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

さらに、SSH2には次のオプションがあります。

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

これらの構文は、AllowUsersおよびAllowGroupsオプションと同じです。[セクション5.5.2.1、「アカウントアクセス制御」]ポート転送の使用を許可されているユーザーまたはグループのリストを指定します。サーバーは、他の人へのポート転送要求を拒否します。これらは、クライアントのユーザー名ではなく、SSHセッションのターゲットアカウントを参照することに注意してください(多くの場合、不明です)。

...

インタラクティブなログインを無効にし、リモート側で実行できるプログラムを制限しない限り、このセクションのディレクティブは実際にポート転送を妨げないことを認識することが重要です。それ以外の場合、知識のあるユーザーは、SSHセッションで独自のポート転送アプリケーションを実行するだけで済みます。これらの設定だけでも非技術的なコミュニティでは十分な抑止力になりますが、彼女が何をしているかを知っている人を止めることはありません。


1
基本的に、S1でプロビジョニングされるユーザーは1人だけです。この特定の場合、AFAIUはAllowTcpForwardingForUsers / AllowTcpForwardingForGroupsを使用してもうまくいかないでしょう?対話型ログインを禁止すると、ユーザーがバイナリを起動できなくなるため、良いアイデアです。ただし、-L構文を使用することにより、クライアントは引き続き許可されます。したがって、現時点では、最適なオプションは次のとおりです。1 /対話型ログインを無効にする、2 /偽のhostname:portを使用したPermitOpen。私は何か見落としてますか ?
SCO

これを確認する最良の方法は、セットアップを試すことです。
クリスチャン

無料のOpenSSHソフトウェアにはこれらのオプションがありません。google for AllowTcpForwardingForUserssshd2_config、一部の商用プログラムで使用されているで構成されていることを示しています。:への回答の1を参照してくださいsuperuser.com/questions/384643/...
カズ

^ OpenSSH Matchの構成にはブロックがあります。あなたはMatchユーザーとグループに対して、そしてAllowTcpForwarding内部を囲むことができます。
カズ

2

ローカル/リモート転送のみを許可するオプションがあります。

AllowTcpForwarding TCP転送を許可するかどうかを指定します。使用可能なオプションは、TCP転送を許可する「yes」または「all」、すべてのTCP転送を禁止する「no」、ローカル(ssh(1)の観点から)転送のみを許可する「local」、または リモートを許可する「remote」です。転送のみ。デフォルトは「yes」です。TCP転送を無効にしても、ユーザーがシェルアクセスを拒否されない限り、セキュリティは向上しません。ユーザーは常に独自のフォワーダーをインストールできるためです。

したがって、すでに述べたように、シェルもnologinに設定する必要があります。


0

この問題に対する私の解決策は、sshd_configのメインセクションにPermitOpen fo.local:80を追加することでした 。

これは、fo.local:80以外のローカル転送の要求を単に拒否します。


0

-L転送のみを無効にする方法を探しています

私があなたを正しく理解していれば、あなたのユーザーは完全なシェルアクセスを持っていますが、ネットの残りの部分への接続を開かせたくありません。

SSHで許可される「ローカルポート転送」は、そのための可能な方法の1つにすぎません。その他は、のインスタンスを起動する含みsocatnetcatまたはツール他の任意の数。

Linuxで発信接続と着信接続を制御する最良の方法は、IPfiltersとも呼ばれるNetfilterです。

ipt_ownerローカルに生成されたパケットに対して、所有者()と呼ばれる特別なモジュールを使用して、パケット作成者のさまざまな特性に一致させることができます。OUTPUTおよびPOSTROUTINGチェーンで有効です。

これを使用して、特定のユーザーグループによって生成された発信パケットを拒否し-L、SSH のオプションだけでなく、あらゆる種類のポート転送を禁止できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.