Как использовать ngrok для совместного использования локального сайта разработки
В этом руководстве демонстрируется способ поделиться вашим сервером разработки localhost с кем угодно и где угодно, используя ngrok для создания безопасного туннеля на ваш локальный компьютер.
Продемонстрировать новейшие функции вашего приложения менеджерам проектов или клиентам непросто, если они не сидят за несколькими столами от них. Возможно, удастся зафиксировать изменения и развернуть их на общедоступном промежуточном сервере, но этот процесс может оказаться непрактичным, если вы просто хотите узнать мнение о цвете виджета или продемонстрировать бесполезность их нелепого предложения!
В идеале вам нужен какой-то способ предоставить общий доступ к веб-приложению, которое в настоящее время выполняется на вашем localhostсервере разработки. ngrok предлагает это решение.
Что такое ngrok?
Ваша машина для разработки может быть подключена к защищенной сети за брандмауэром. Чтобы обойти ограничения доступа, ngrok запускает на вашем компьютере небольшой клиентский процесс, который создает частный туннель подключения к облачной службе ngrok. Ваш localhostсервер разработки сопоставлен с ngrok.ioсубдоменом, к которому затем может получить доступ удаленный пользователь. Нет необходимости открывать порты, настраивать пересылку или вносить другие сетевые изменения.
Клиентское программное обеспечение ngrok доступно для Windows, macOS и Linux.
Безопасен ли ngrok?
Туннель подключения, установленный ngrok, безопасен и может передавать данные только на localhostоткрытый вами порт. Было бы сложно нанести какой-либо ущерб, но ngrok безопасен настолько, насколько безопасно приложение, которое вы тестируете.
В большинстве случаев вы будете использовать ngrok, чтобы временно предоставить кому-либо доступ, выдав ему случайно сгенерированный URL-адрес. Лучше предположить, что кто угодно может получить доступ к вашему приложению, пока туннель открыт. Вы можете отключить эту опцию «удалить все файлы», пока ngrok активен!
Сколько стоит ngrok?
Базовая услуга ngrok бесплатна и позволяет использовать до четырех туннелей и 40 подключений в минуту. Коммерческие варианты начинаются от 5 долларов в месяц, обеспечивая дополнительные подключения и пользовательские домены.
Скачать ngrok
Для начала откройте ngrok.com в своем браузере и нажмите » Зарегистрироваться», чтобы зарегистрироваться. Учетная запись Google или GitHub проще всего, но вы можете выбрать стандартную регистрацию с адресом электронной почты и паролем. Ссылка для подтверждения по электронной почте будет отправлена вам.
После входа в систему вы будете перенаправлены на панель управления ngrok, где сможете загрузить клиент для своей операционной системы.
Ngrok
Ngrok — это платформа, которая с помощью установленной утилиты, позволяет, организовать удалённый доступ на веб-сервер или какой-то другой сервис, запущенный ПК. Доступ организуется через созданный при запуске ngrok безопасный туннель. ПК, при этом, может находиться за NAT’ом, и не иметь статического IP адреса.
Совсем не обязательно тащить тестовый проект куда-то ещё, можно показать его заказчику прямо с локальной машины, или, например, с помощью Ngrok можно очень легко расшарить файлы лежащие на ПК.
Для начала, нам потребуется веб-сервер, запущенный на компьютере (конечно же, его нужно настроить при необходимости):
И непосредственно сам Ngrok. Его можно запускать от обычного пользователя, и со включенным selinux:
Сразу после запуска, можно увидеть, что сервис создал временный поддомен вида abcde123.ngrok.io для организации доступа на ПК, а локально по адресу 127.0.0.1:4040, была запущена панель, в которой отображаются данные по удалённым подключениям к туннелю. Пробуем открыть домен abcde123.ngrok.io из любого места, и получаем доступ к настроенной на веб-сервере директории.
При необходимости, мы можем указать регион, в котором будет запущен прокси:
Или защитить запущенный туннель паролем для доступа:
В случае появления ошибки вида:
Стоит проверить, запущен ли веб-сервер локально, и работает ли он на 80 порте.
Полезно знать об Ngrok.
Авторизуемся. Если вы планируете использовать сервер часто, имеет смысл зарегистрироваться на ngrok.com, забрать со страницы настроек авторизации токен, и добавить его в локальный клиент с помощью команды:
Токен будет записан в файл
/.ngrok2/ngrok.yml и теперь, клиент при работе с сервисом будет авторизовываться на нём. Это позволит получить доступ к бесплатному тарифу, но с лимитами бОльшими, чем доступны не авторизованному пользователю. На платных тарифах имеются дополнительные возможности, делающие работу с сервисом удобной (резерв поддоменов, например), но в рамках данной заметки я рассматриваю только то, что пользователь может использовать без оплаты.
Проксируем на другие ПК в локальной сети. Совсем не обязательно держать веб-сервер на той же машине, где запускается Ngrok. Если сервис в локальной сети работает на отдельной машине, мы можем проксировать трафик туда:
Работаем не только с веб-сервером. На самом деле мы можем настроить удалённый доступ к любому tcp сервису, запущенному на ПК. Например, если мы хотим получить доступ по SSH, то можем сделать вот так:
Заглядываем в документацию. Описанное в заметке — далеко не все возможности, так что всем заинтересовавшимся я настоятельно рекомендую заглянуть в документацию, где в очень доступной форме, с примерами команд, приведено описание всех возможностей данного сервиса и утилиты.
ngrok — Когда нужно прокинуть ваш сервис в Интернет

В процессе разработки бывают ситуации, когда вам необходимо показать результат другому человеку. Самое первое, что приходит на ум — это купить дешевый хост и развернуть там, но это дополнительные затраты денег и времени. Другой пример — когда вы делаете свой локальный проект и вам нужно получать запросы от внешних сервисов при интеграции.
Для данных случаев вы можете воспользоваться сервисами создания туннелей до вашего компьютера. Одним из популярных сервисов для построения туннелей до вашего компьютера является ngrok. Он безумно простой и одновременно функциональный в бесплатной версии. Сам я наткнулся на него, когда отлаживал работу платежки на PayPal.
Как работать с ngrok
Для работы нам необходимо:
скачать бинарный файл для вашей системы — ngrok;
зарегистрировать аккаунт на ngrok для получения токена;
удостовериться, что ваш локальный сервис запущен и ожидает HTTP запросов;
Эти 5 шагов позволят получить временный домен для проверки вашего сервиса. Но давайте попробуем разобрать на примере запуска локального сервиса. Я буду запускать Nginx сервер в docker контейнере.
Таким образом, я ожидаю подключения на адрес 127.0.0.1:8080 и получу стандартное сообщение от Nginx.
Где 8080 — ваш локальный порт, где запущен сервис.
В терминале будет примерно следующая картина:
Теперь, обратившись по адресу http://870eb390.ngrok.io или https://870eb390.ngrok.io, мы увидим стандартный ответ от Nginx как видели и раньше. А если открыть в браузере адрес http://localhost:4040, то можно получить доступ сервисной странице со статистикой и логом запросов.
Таким образом, небольшой инструмент позволил получить временный домен и https адрес (иногда критично для платежных систем) для разработки. Полный набор ключей для параметризации можно почитать на странице https://ngrok.com/docs#http.
В бесплатной версии вы также можете строить TCP тоннели, если вам необходимо работать с TCP сервисами. С платными функциями вы можете познакомится на странице https://ngrok.com/pricing.
Открытые альтернативы
Если же вам ближе opensource решения, то советую взглянуть на localtunnel. Localtunnel написан на JS и очень прост в использовании.
Вам необходимо поставить npm пакет и запустить:
Из коробки данный сервис предлагает поддомены и https соединение. Более полную информацию можете почитать на главной странице проекта localtunnel.
А если хотите узнать о других интересных инструментах из мира разработки и желаете прокачаться в JVM стеке — приходите ко мне на обучение.
Нанять Рината своим индивидуальным наставником — это сюда: Записаться к Ринату
Мы рассказываем, как стать более лучшим разработчиком, как поддерживать и эффективно применять свои навыки. Информация о вакансиях и акциях эксклюзивно для более чем 8000 подписчиков. Присоединяйся!
Русские Блоги
Введение в Ngrok
содержание
Введение в Ngrok
Сценарий применения
Веб-разработка
WeChat разработка
Перенаправление TCP-порта
Переадресация порта TCP, что означает, что вы можете использовать SSH на машине во внешней сети, конечно, порт внешней сети назначается случайным образом.
Простой в использовании
Экспериментальная среда: Windows7, Ngrok 2.1.3
Шаг 1. Сначала перейдите на официальный сайт Ngrok, чтобы загрузить последнюю версию клиента. После загрузки и распаковки версии для Windows остается только один файл ngrok.exe, временно поместите его в корневой каталог диска D.
Шаг 2: Чтобы использовать службу Ngrok в первый раз, вам необходимо установить маркер аутентификации для этого компьютера. На официальном сайте Ngrok зарегистрированный Аккаунт, получите официальный токен авторизации в меню Auth. (Этот шаг можно пропустить, но у незарегистрированных пользователей нет дополнительных функций, таких как пользовательские доменные имена)
Шаг 4: После вышеуказанных шагов теперь вы можете создать безопасный туннель для сопоставления IP-адреса локальной службы с общедоступной сетью. Выполните следующую команду, чтобы назначить случайное доменное имя второго уровня на официальном веб-сайте Ngrok адресу `localhost: 8080` этого компьютера.
Шаг 6. Откройте веб-интерфейс, чтобы проверить и повторить запросы по адресу http: // localhost: 4040, а также отслеживать сообщения HTTP.
Внутренний сервис Ngrok
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как без белого IP локальный веб-сервер сделать доступным из Интернета
Выполнение атак социальной инженерии требует наличие веб-сервера, на котором запущен сайт или размещена страница, которая пытается перехитрить пользователя и сделать так, чтобы он ввёл определённые данные или совершил какое-либо действие.
Это фишинговый веб-сервер должен быть доступен из Интернета, а для этого требуется публичный IP. Многие клиенты Интернет-провайдеров выходят в Интернет через NAT, а это означает, что они никак не могут сделать свой веб-сервер публичным.
В данной статье я покажу, как с помощью программы ngrok можно обойтись без внешнего IP адреса.
Программа ngrok работает следующим образом:
Чтобы было понятно, посмотрим как работает ngrok на конкретном примере:
У меня на компьютере с Windows установлен веб-сервер. Кстати, программа ngrok работает на Windows, Linux, Linux ARM и некоторые других операционных системах. Мой компьютер находится как минимум на одним NAT’ом — в моём роутере не настроена проброска портов на компьютер. Но, скорее всего, мой Интернет-провайдер также использует NAT, чтобы сразу большое количество пользователей могли выходить в Интернет через 1 IP адрес. В таких условиях я никак не смогу сделать свой веб-сервер публичным, даже если настрою форвардинг портов от роутера.
Так вот, в такой безвыходной ситуации и поможет ngrok. Чтобы мой веб-сервер стал доступным из Интернета, мне достаточно запустить такую команду:
На экране следующая информация:

Интересующие меня данные заключается в строках:
Она означает, что подключение к http://4b348924.ngrok.io и https://4b348924.ngrok.io (протоколы HTTP и HTTPS соответственно) будет перенаправлено на http://localhost:80. Проверим это: с другого компьютера (Linux), я открою ссылку https://4b348924.ngrok.io. Выведен список файлов в корневой директории веб сервера Windows:

Отрою файл i.php (у меня он имеет адрес https://4b348924.ngrok.io/i.php):

Как видим, файл выполнился на локальном сервере и показаны результаты его работы.
Вернёмся на компьютер Windows где запущены ngrok и веб-сервер:

После «HTTP Requests» показаны строки, которые запрашивал удалённый пользователь. Более подробную информацию можно просмотреть по ссылке http://127.0.0.1:4040 на которой запущен веб-интерфейс ngrok. Там можно анализировать отдельные запросы:

Или просматривать статус ngrok в целом:

Как установить ngrok
Установка ngrok в Kali Linux и в любой другой дистрибутив Linux
Установка в ngrok BlackArch
Установка ngrok в Windows
Перейдите на страницу официального сайта и скачайте ngrok для Windows: https://ngrok.com/download
Распакуйте скаченный архив, отройте командную строку и перейдите в папку с исполнимым файлом с помощью cd, например, у меня программа помещена в папку C:\Users\MiAl\Downloads\:
Для проверки выведите справку командой:
Как получить токен аутентификации ngrok (authtoken)
Программа ngrok является бесплатной, но предусматривает платные тарифы. Бесплатных состояний может быть два:
Без регистрации вы можете использовать ngrok сразу после скачивания исполнимого файла. Без регистрации вы сможете выполнить только простейшие действия, например, как приведённое выше — создать тоннель от домена третьего уровня до своего локального сервера. На самом деле, для многих этого достаточно.
С регистрацией открываются дополнительные возможности, например, можно перенаправлять трафик на 443 порт (используется протоколом HTTPS) локального или удалённого сервера.
После регистрации на странице https://dashboard.ngrok.com/auth вы найдёте свой токен аутентификации. Этот токен можно указывать при каждом запуске ngrok, но намного удобнее сохранить его в системе командой вида:
После этого токен ngrok будет сохранён в файле, и ngrok будет автоматически считывать его оттуда при каждом запуске.
Как узнать чужой IP
В качестве демонстрации применения ngrok рассмотрим пару примеров. Предположим, мне нужно узнать IP адрес пользователя, с которым я общаюсь, например, по чату или через email. Для этого мне достаточно, чтобы он зашёл на любую страницу моего веб-сервера.
На веб-сервере я делаю следующую подготовку:
1. Создаю папку hacked-accounts (допустим, предлог — ссылка в Интернете на базу данных утёкших учётных данных).
2. Создаю файл index.php с примерно следующим содержимым:
Суть работы скрипта очень проста — берутся все значения массива $_SERVER и сохраняются в файл со сгенерированным именем. Массив $_SERVER содержи HTTP заголовки и IP клиента, сделавшего запрос.
3. Дальше я просто отсылаю ссылку https://4b348924.ngrok.io/hacked-accounts/, можно добавить разные финтифлюшки в виде значений параметров https://4b348924.ngrok.io/hacked-accounts/?users=admin&sort=newest (эти «шашечки» ни на что не влияют).
При открытии этой ссылки пользователь увидит что-то вроде такого:

Но при каждой попытке открыть ссылку на веб-сервере будут создаваться новые файлы с информацией:

Пример содержимого файла:

Особый интерес представляют следующие строки:
Что касается REMOTE_ADDR, то значением там всегда будет примерно «::1». В REMOTE_ADDR содержится IP адрес программы, сделавшей запрос, в данном случае запрос сделала программа ngrok, которая запущена на том же самом компьютере поэтому её IP адресом является loopback.
Как отправить файл без файлообменников и почты
Предположим, нужно переслать другому пользователю файл, но при этом не использовать файлообменники, почту или аналогичные сервисы. Это можно сделать с помощью ngrok.
Теперь выдуманная ситуация следующая — мне действительно нужно быстро и без файлообменников передать пользователю другой файл. Для этого на локальном компьютере даже не нужен веб-сервер — функции простого веб-сервера будет выполнять сам ngrok.
Для выполнения задуманного, мне нужно предоставить доступ к папке hacked-accounts-real, расположенной по пути C:\Server\data\htdocs\hacked-accounts-real\, тогда достаточно запустить следующую команду:
Обратите внимание, что перед папкой стоит строка «file:///».
При открытии вновь сгенерированной ссылки будет получен доступ ко всем файлам в указанной папке:

Прокси с ngrok
ngrok может создавать туннели не только до локальных сетевых служб, но и до любых других адресов в Интернете. При этом получается прокси.
Если нужно создать туннель до веб-сайта, то если на одном IP адресе работают много сайтов, то нужно заменять присылаемый заголовок на правильный, это можно сделать опцией -host-header. В следующем примере будет создана ссылка, при переходе на которую будет открываться сайт HackWare.ru:

Команды и опции ngrok
У ngrok много других примеров использования, в том числе на бесплатном пакете. Дополнительную информацию о командах и опциях вы найдёте на странице https://kali.tools/?p=5489.
Заключение
Итак, ngrok может использоваться как замена хостингу для разовых задач. Например, если на удалённом сервере обнаружена уязвимость Удалённое выполнение кода и есть возможность запустить команду для скачивания шелла, то этот шелл нужно где-то разместить на доступном публично сервере. В качестве очень быстрого решения можно использовать ngrok + ОС, настроенная для работы через Tor.
В следующей статье будет показан более интересный пример использования ngrok в социальной инженерии.













