Пропускайте весь https-трафик с сервера через удаленный сервер, чтобы обойти брандмауэр.

Вопрос или проблема

У меня есть удаленная машина, на которую я подключаюсь по 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-порт-форвардинга. Варианты настройки могут быть следующими:

  1. Использование файла конфигурации 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
  2. Использование прямой команды 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-отделом или осведомленными техническими специалистами перед применения подобных решений на практике для рабочих задач.

Оцените материал
Добавить комментарий

Капча загружается...