pwnat とSSHを使用して、2つの別々のファイアウォール/ NATの背後にある2台のマシン間で「ピアツーピア」SSH接続を確立することは可能ですか?
これが可能な場合、OpenSSHサーバーを実行しているNAT)内のLinuxマシンでこの機能をセットアップするために実行する必要のある手順と、背後にあるクライアントはどのようになりますか別のNAT接続しますか?
また、これが可能な場合、この設定は主要なセキュリティリスクですか?任意のSSHクライアントがpwnatを実行しているサーバーに接続できますか?
はい。ネットワークが次のようになっているとします。
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は、ICMP時間が超過したパケットを104.16.111.208に送信します。このパケットのペイロードは、NAT Bからの発信ICMPエコー要求と一致します。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パケットを転送します。 udp://151.101.193.69:2022(udp://104.16.111.208:2022)からudp://192.168.2.10:2022に受信します。多くのNATが異なるポートを割り当てることに注意してください。外部インターフェイス上。この場合、 pwnatは機能しません 。
aのpwnatは、送信元ポート2022を使用してUDPパケットをudp://104.16.111.208:2022に送信します。NAT Aはテーブルにエントリを追加するため、将来、UDPパケットを転送します。 udp://104.16.111.208:2022(udp://151.101.193.69:2022)からudp://192.168.1.10:2022に受信します。
NAT Aは、Bが送信したUDPパケットを受信し、テーブルで照合してAに転送します。NAT Bは、Aが送信したUDPパケットを受信し、テーブルで照合して転送します。 AとBはUDPを介して自由に通信できるようになりました。
A$ ssh -p 3022 127.0.0.1
tcp://127.0.0.1:3022でリッスンしているAのpwnatは、sshからの接続を受け入れます。 Aのpwnatは、Bのpwnatに(UDP経由で)要求を送信して、tcp://127.0.0.1:22へのトンネルを開きます。これは、Bのpwnatが開始されたときに許可されたホスト/ポートのペアとしてリストされていたため、接続を確立します。これでトンネルが完成しました。
ssh on A --[tcp]--> pwnat on A --[udp]--> pwnat on B --[tcp]--> sshd on B
Pwnatにバグがない場合、これは、NATの背後にないサーバー上でsshdを世界に公開することとセキュリティ面で違いはありません。ただし、ソースコードを一瞥すると、pwnatは一種のハッキングされているように見え、安全であることに依存しません。最悪のシナリオは、pwnatを実行しているユーザーとしてAとBで任意のコードが実行されることです。