Вопрос или проблема
У меня есть удаленная машина, на которую я подключаюсь по ssh, где я запускаю код, который должен получить доступ к определенному https url (например, https://api.trustedservices.intel.com/sgx/certification/v4/qe/identity
или любой другой конечной точке с тем же api-префиксом).
Я могу выполнить curl
этого url и получить ответ на моей локальной машине, но, предположительно, из-за файрвола, за которым находится удаленная машина, та же команда curl
приводит к таймауту.
Я пытаюсь найти способ обхода ограничения файрвола, и лучший способ, который я могу придумать, это туннелировать весь https-трафик (порт 443) с удаленной машины через локальную и обратно.
Существующие статьи, которые я видел, говорят, что существуют проблемы с сертификатами для серверной машины, но запросы исходят от локальной машины.
Есть ли какие-нибудь советы по самому простому способу сделать это? Может быть, даже подделка IP-адреса для запросов, которые делает код на удаленной машине
?
Не уверен, как туннелировать весь трафик и при этом убедиться, что проблема с сертификатами не возникнет.
Вы можете использовать опцию curl
для перенаправления трафика:
curl --connect-to example.com:443:example.net:8443 https://example.com
т.е. в вашем случае
curl --connect-to api.trustedservices.intel.com:443:127.0.0.1:1234 \
https://api.trustedservices.intel.com/sgx/certification/v4/qe/identity
Прежде чем вы сделаете этот вызов, вам нужно создать SSH перенаправление порта. Самый простой способ может быть создать запись в файле ~/.ssh/config
, чтобы вы могли просто вызвать ssh remote-curl-redirect-intel
(что работает с автодополнением в оболочке):
Host remote-curl-redirect-intel
Hostname remote
User username
LocalForward 127.0.0.1:1234 api.trustedservices.intel.com:443
или без файла конфигурации SSH:
ssh -L 127.0.0.1:1234:api.trustedservices.intel.com:443 user@remote
Ответ или решение
Организация туннелирования HTTPS-трафика через SSH для обхода брандмауэра
Теоретическая часть (Theory)
Когда сервер, находящийся за строгим брандмауэром, должен получить доступ к интернет-ресурсам через HTTPS, могут возникнуть проблемы с подключением. Брандмауэры могут блокировать исходящие или входящие интернет-соединения, и особенно это касается стандартных портов, таких как порт 443 для HTTPS. Чтобы обойти эти ограничения, одним из эффективных решений является SSH-туннелирование, которое позволяет безопасно передавать зашифрованные данные между локальной и удаленной машинами через SSH-соединение.
SSH-туннелирование, также известное как порт-форвардинг, позволяет перенаправить определенный порт с одной машины на другую, тем самым позволяя обойти сетевые ограничения. В этом контексте, вместо прямого запроса из-за брандмауэра, запросы перенаправляются через локальную машину, которая неактуализирована такими ограничениями.
Практическая часть (Example)
Предположим, у вас есть сервер за брандмауэром, который не может напрямую подключиться к URL https://api.trustedservices.intel.com/sgx/certification/v4/qe/identity
. Однако ваш локальный компьютер способен это сделать. Решение заключается в создании SSH-туннеля, который будет форвардить HTTPS-трафик через ваш локальный компьютер.
Первым шагом является настройка SSH-порт-форвардинга. Варианты настройки могут быть следующими:
-
Использование файла конфигурации SSH (
~/ssh/config
):Создайте запись, которая будет указана следующим образом:
Host remote-curl-redirect-intel Hostname remote User username LocalForward 127.0.0.1:1234 api.trustedservices.intel.com:443
Это позволит вам создать туннель, просто выполнив команду:
ssh remote-curl-redirect-intel
-
Использование прямой команды SSH без файла конфигурации:
Выполните следующую команду в вашем терминале:
ssh -L 127.0.0.1:1234:api.trustedservices.intel.com:443 user@remote
Этот порт-форвардинг создаст туннель, в котором локальный порт 1234 будет связан с удаленным портом 443 на api.trustedservices.intel.com
.
Теперь, для выполнения запроса curl
, используйте следующий параметр --connect-to
, который позволяют указать через какой локальный порт на какой удаленный порт нужно пробросить трафик:
curl --connect-to api.trustedservices.intel.com:443:127.0.0.1:1234 https://api.trustedservices.intel.com/sgx/certification/v4/qe/identity
Применение (Application)
Подобное решение может значительно упростить процесс обхода сетевых блокировок для серверов, установленный за жесткими брандмауэрами. С его помощью, не только решается задача обхода ограничений, но также обеспечивается дополнительный уровень безопасности при передаче данных благодаря использованию SSH-протокола.
Любопытной особенностью этого метода является то, что он не влияет на процесс валидации SSL-сертификатов, используемых целевым HTTPS-сервером, так как фактические запросы к серверу производятся вашей локальной машиной, которая имеет корректированный доступ.
Данный подход подходит не только для единичного случая, но и для постоянного использования в целях автоматизации через скрипты, что особенно полезно для DevOps-инженеров и системных администраторов. Подобного рода практики помогают избегать трудоемких процессов изменения сетевой инфраструктуры или согласования её изменений.
Однако важно учитывать, что такие манипуляции должны выполняться с осторожностью и следовать политике безопасности компании, так как часто они могут нарушать принятую практику и правила использования корпоративной сети. Всегда необходимо консультироваться с IT-отделом или осведомленными техническими специалистами перед применения подобных решений на практике для рабочих задач.