4

Можно ли использовать pwnat и SSH для установления однорангового SSH-соединения между двумя компьютерами, которые находятся за двумя отдельными брандмауэрами /NAT?

Если это возможно, какие шаги необходимо предпринять для настройки этой функциональности на компьютере с Linux внутри NAT, на котором работает сервер OpenSSH, и как будет подключаться клиент за отдельным NAT?

Кроме того, если это возможно, является ли эта установка серьезной угрозой безопасности? Может ли любой произвольный SSH-клиент подключиться к серверу, на котором запущен pwnat?

2 ответа2

2

Да. Предположим, что ваша сеть выглядит так:

Диаграмма сети

Вы хотите SSH от A до B. У вас sshd работает на B; он прослушивает tcp://127.0.0.1:22.

B$ pwnat -s 0.0.0.0 2022 127.0.0.1:22

Теперь pwnat на B прослушивает 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

pwnat on A теперь слушает tcp://127.0.0.1:3022.

pwnat on A отправляет пакет с превышенным временем ICMP на 104.16.111.208, чья полезная нагрузка соответствует исходящим эхо-запросам ICMP, поступающим от NAT B. NAT B видит, что полезная нагрузка совпадает с исходящими эхо-запросами ICMP, и пересылает пакет с превышенным временем ICMP на B. Обратите внимание, что заголовок IP для пакета превышения времени ICMP содержит IP-адрес NAT A, 151.101.193.69, в качестве адреса источника.

pwnat на B отправляет пакет UDP на udp://151.101.193.69:2022 с портом источника 2022. NAT B добавляет запись в свою таблицу, поэтому в будущем он будет пересылать любые пакеты UDP, которые он получает от udp://151.101.193.69:2022 по адресу udp://104.16.111.208:2022, по адресу udp://192.168.2.10:2022 , Обратите внимание, что многие NAT назначают другой порт на внешнем интерфейсе. Если это так, pwnat не работает.

pwnat на A отправляет UDP-пакет на адрес udp://104.16.111.208:2022 с портом источника 2022. NAT A добавляет запись в свою таблицу, поэтому в будущем он будет пересылать все UDP-пакеты, которые он получает от udp://104.16.111.208:2022 по адресу udp://151.101.193.69:2022, по адресу udp://192.168.1.10:2022 ,

NAT A получает пакет UDP, который отправил B, сопоставляет его в своей таблице и пересылает его в A. NAT B принимает пакет UDP, который отправил A, сопоставляет его в своей таблице и пересылает его в B. A и B теперь могут связываться свободно по UDP.

A$ ssh -p 3022 127.0.0.1

pwnat на A, который прослушивает tcp://127.0.0.1:3022, принимает соединение от ssh. pwnat на A отправляет запрос на pwnat на B (через UDP), чтобы открыть туннель для tcp://127.0.0.1:22. Поскольку это было указано как разрешенная пара хост / порт, когда pwnat на B был запущен, он устанавливает соединение. Туннель завершен:

ssh on A --[tcp]--> pwnat on A --[udp]--> pwnat on B --[tcp]--> sshd on B

Если в pwnat нет ошибок, то с точки зрения безопасности это ничем не отличается от показа sshd миру на сервере, который не находится за NAT. Тем не менее, просматривая исходный код, pwnat кажется взломанным вместе, и я бы не стал полагаться на его безопасность. В худшем случае будет выполнение произвольного кода на A и B от имени пользователя, который запускает pwnat.

-1

Похоже, что Pwnat не прошел проверку подлинности, что я считаю серьезной угрозой безопасности. Если вы управляете хотя бы одним из двух NAT/Firewall, просто настройте переадресацию / трансляцию портов для гораздо более безопасной настройки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .