ローカルサービスの暗号化と認証としての SSH トンネリング

ローカルサービスの暗号化と認証としての SSH トンネリング

背景:

私のサーバーでは、ドメイン ソケットで着信接続をリッスンし、接続したユーザーと対話するサービスが稼働しています/srv/socket。このサービスは私が作成したもの (C++ で) なので、サービスの動作を簡単に変更できます。現在、このサービスでは認証や権限のチェックは行われません (すぐにわかるように、これは変更する必要があります)。一緒に仕事をしている数人の開発者 (5 人から 10 人くらい) は、インターネット上の別の場所にあるコンピューターからこのサービス (このサービスのみ) にアクセスする必要があります。このサービスでは開発者にかなりの権限が与えられるため、認証をできるだけ強力にして、接続を暗号化する必要があります。根本的な疑問は (XY 問題を回避するために)、これをどのように設定するかです。

アイデアとそれに関する質問:

当初の私のアイデアは、独自の認証を提供し、暗号化に TLS を使用するというものでした (もちろん、サービスを外部ポートに公開します)。ただし、独自の認証を作成すると、セキュリティ上の欠陥が生じる可能性が高く、TLS 経由で接続を動作するように設定するのは面倒です。

2 つ目のアイデアは、SSH を使用するというものでした。SSH にはすでに非常に強力な認証と暗号化機能があり、基本的に必要な機能を果たします。残念ながら、これをどのように設定すればよいかよくわかりません。まず、開発者に完全なシェル アクセスを与えたくないので、デフォルトのシェルを/bin/false(このサイトや関連サイトの他の回答に従って) に変更します。ただし、関連するソケットに接続できるようにする必要があります。SSH トンネリングについて調べましたが、必要なものではないようです。また、「プロキシとしての SSH」に似た他の検索では、すべて関連しているが同じではない問題が見つかります。この場合、何をするのが正しいのでしょうか。もちろん、「シェル」として機能するカスタム実行可能ファイルを作成し、それらのユーザーを自分のサービスに接続するだけで済みますが、このコードはセキュリティ上重要なので、可能であれば自分で作成することは避けたいと思います。

最良のシナリオ:

理想的には、次のようになることを望みます。

  1. ユーザーはクライアント上で何らかのコマンドを実行します。
  2. サーバー上のプロキシ サービスへの暗号化された接続が作成され、ユーザーはこのサービスに対して自分自身を認証します (理想的には、これは十分に安全であることがわかっている、十分に確立されたサービスです)。
  3. プロキシ サービスはサービスへの接続を開き、ユーザー名 (または何らかのユーザー識別子) を転送し、クライアントに接続します。

これを実行する最善の方法は何でしょうか?

答え1

質問されてからしばらく経っていると思いますが、もしまだ興味があれば、私の役職Server Fault で。そこでの問題はあなたの要件とは関係ありませんが、私が提案する解決策は直接関係があるかもしれません。セキュリティの影響について私よりもよく理解している専門家からその投稿に対する反応を引き出せることを期待していましたが、それは実現しませんでした。

この投稿をここで再現するには少し長いですが、簡単に言えば、コンセプトは次のようになります。

  • 必要な/許容できる認証メカニズム (パスワード + キー + OTP など) を要求するように SSH を設定します。
  • ユーザーシェルを に設定する/sbin/nologin(/sbin/nologinが より優先されます/bin/false)
  • ユーザーがSSH経由で接続(認証)したときにスクリプトを呼び出すためにサーバー上のsshrcを利用すると、スクリプトは必要なこと(たとえばサービスの開始)を実行できます。

上記の設定では、ユーザーは SSH 経由で認証し、認証されると、/etc/ssh/sshrcサービスに関して必要な処理を実行し、/sbin/nologin認証が不要になったため、認証後に SSH セッションを適切に切断します。

sshrc のスクリプトは自由に使用できます。たとえば、サービスに対してポートが開かれていない状態で開始することを検討してください。ユーザーが認証されると、sshrc スクリプトはファイアウォール内でユーザーの IP のポートを即座に開くことができます。

ご注意ください:上記は、SSH 設定に関して、あなたが本当によく理解していることを前提としています。よくテストされた SSH 実装はいくつかありますが、その多くは簡単に誤って設定され、セキュリティに重大な影響を及ぼす可能性があります。また、SSH 認証では、常にキー + (ユーザーが知っている少なくとも 1 つの情報、たとえばパスワードまたは OTP、理想的には両方) を使用することを強くお勧めします。

関連情報