使用できますかプナット2 つの異なるファイアウォール/NAT の背後にある 2 台のマシン間で「ピアツーピア」SSH 接続を確立するには、SSH を使用する必要がありますか?
これが可能であれば、OpenSSH サーバーを実行している NAT 内の Linux マシンでこの機能を設定するために必要な手順は何ですか。また、別の NAT の背後にあるクライアントはどのように接続するのでしょうか。
また、これが可能であれば、この設定は大きなセキュリティ リスクになりますか? 任意の SSH クライアントが pwnat を実行しているサーバーに接続できるでしょうか?
答え1
はい。ネットワークが次のようになっているとします。
A から B に SSH で接続したいとします。B で sshd が実行されており、tcp://127.0.0.1:22 でリッスンしています。
B$ pwnat -s 0.0.0.0 2022 127.0.0.1:22
B の pwnat は現在 udp://0.0.0.0:2022 をリッスンしており、tcp://127.0.0.1:22 への接続を許可するように構成されています。また、定期的に ICMP エコー要求を 3.3.3.3 (ハードコードされた IP) に送信しています。
A$ pwnat -c 127.0.0.1 3022 104.16.111.208 2022 127.0.0.1 22
A 上の pwnat は現在 tcp://127.0.0.1:3022 をリッスンしています。
A の pwnat は、ペイロードが NAT B から送信される ICMP エコー要求と一致する ICMP 時間超過パケットを 104.16.111.208 に送信します。NAT B は、ペイロードが送信される ICMP エコー要求と一致することを確認し、ICMP 時間超過パケットを B に転送します。ICMP 時間超過パケットの IP ヘッダーには、送信元アドレスとして NAT A の IP 151.101.193.69 が含まれていることに注意してください。
B の pwnat は、送信元ポート 2022 で UDP パケットを udp://151.101.193.69:2022 に送信します。NAT B はテーブルにエントリを追加し、今後は udp://104.16.111.208:2022 の udp://151.101.193.69:2022 から受信したすべての UDP パケットを udp://192.168.2.10:2022 に転送します。多くのNATは外部インターフェースに異なるポートを割り当てることに注意してください。この場合、pwnatは動作しません。
A の pwnat は、送信元ポート 2022 を使用して UDP パケットを udp://104.16.111.208:2022 に送信します。NAT A はテーブルにエントリを追加し、今後は udp://104.16.111.208:2022 から udp://151.101.193.69:2022 で受信したすべての UDP パケットを udp://192.168.1.10:2022 に転送します。
NAT A は B が送信した UDP パケットを受信し、それをテーブルで照合し、A に転送します。NAT B は A が送信した UDP パケットを受信し、それをテーブルで照合し、B に転送します。これで、A と B は UDP 経由で自由に通信できるようになります。
A$ ssh -p 3022 127.0.0.1
tcp://127.0.0.1:3022 をリッスンしている A の pwnat は、ssh からの接続を受け入れます。A の pwnat は、tcp://127.0.0.1:22 へのトンネルを開くために、B の pwnat に (UDP 経由で) 要求を送信します。B の pwnat が起動されたときに、これが許可されたホスト/ポートのペアとしてリストされていたため、接続が確立されます。これでトンネルが完成しました。
ssh on A --[tcp]--> pwnat on A --[udp]--> pwnat on B --[tcp]--> sshd on B
pwnat にバグがないのであれば、これはセキュリティの面では、NAT の背後にないサーバーで sshd を世界に公開することと変わりません。ただし、ソース コードをざっと見たところ、pwnat はハッキングされたような感じで、安全だとは期待できません。最悪のシナリオは、pwnat を実行しているユーザーとして A と B で任意のコードが実行されることです。
答え2
Pwnat は認証されていないようで、大きなセキュリティ リスクがあると考えられます。2 つの NAT/ファイアウォールのうち少なくとも 1 つを制御している場合は、ポート転送/変換を設定するだけで、より安全な設定になります。