S1、S2、S3という3つのサーバーがあります。 S2は要塞サーバーであり、私が制御する唯一のサーバー、S1は保護されたネットワーク上のサーバー、S3はパブリックインターネットからアクセスできるサーバーです。 S1 と S3 のユーザーは、S2 へのシェルアクセス権を持っていません。 S1のユーザーがS3のローカルポート転送を実行できるようにしたいが、リモートポート転送は許可されません。したがって、S1ではssh -J user@S2 -L <lport>:S3:<rport> user@S3
動作する必要がありますが、ssh -J user@S2 -R <rport>:localhost:<lport> user@S3
動作しないでください。 S2のsshd_configにはどのような設定が必要ですか?
答え1
ssh -J S2 S3
S1では、S1からS2に接続してからS1からS3に接続するのと同じです(S2を介して転送されたパケットを使用)。コマンドに-L
および/またはコマンドを追加すると、-R
トンネルは後者の接続に属します。
sshd_config
S2 値は、S1 から S2 への接続にのみ関連します。 S2のSSHサーバーの観点から、-J
S1の使用法はS1の使用法と非常によく似ています-L
。つまり、S2のサーバーは、要求に応じてどこか(あなたの場合はS3)へのTCP接続を確立する必要があります。一般に、すべてのデータはこれらのトンネルを介して配信でき、S2のSSHサーバーはそれを確認することに興味がなく、ストリームのみを配信します。ストリームが別のSSH接続(S1がS3と通信する)であることを知っていて、どういうわけかそれを検閲したい場合でも、別々の暗号化を使用する別のSSH接続であるため、そうすることはできません。この接続を検閲するには、S2は中間者攻撃を実行する必要があります。 SSH(安全シェル)は攻撃に対して脆弱でないように細心の注意を払って設計されています。
S1からS3への接続(S2を介して転送されたパケットを使用)の場合、sshd_config
S3は重要です。
ユーザーが(を使用する代わりに-J
)S1からS2に接続することを選択した場合それから以下を実行してS2からS3にssh
S2から-L
次に、S1からS2へ、S2からS3への2つのトンネル(またはS3からS2へ、S2から-R
S1への2つのトンネル)を接続して、S1からS3へ(またはS3からS1へ)パスを確立しようとします。できます。 ))トンネル。 )。これはS2になります。正当な中間の人。この場合、sshd_config
S2はS1からS2へ(またはS2からS1へ)トンネルを無効にする正しい位置です。
ユーザーがこのように接続することを強制できるとしましょう。-L
S3以上のすべてのポートにトンネリングできるようにすることで、トンネルを介してS1からS3へのSSH接続を作成できます。この方法でS3に到達できる場合、-R
このトンネル接続ではS1とS3の間に合意があります。ただ。
興味があるかどうか自分に尋ねてください。 S2のみ制御できます。 S1から呼び出されると、ssh -J S2 S3
ユーザーが制御するサーバーは自分のSSH接続を受け入れ、S3への接続を確立します(双方向フローを中継する場合のみ)。作業にはssh -J S2 S3
両方の機能が必要です。ユーザーおよび-L
/または-R
同じこと。ただし、S3は接続を開始するか(の場合-L
)リスニングを開始します(の場合-R
)。なぜそれがあなたに興味を持たなければならないのですか? S3管理者にこれを処理させます。つまり、sshd_config
S3に適切なツールがあります。