Предновогодний розыгрыш с использованием SSH-туннеля

image


В преддверии Нового Года хотелось бы поделиться с сообществом Хабрахабр простым розыгрышем, который случайно пришёл в голову при работе с SSH-туннелями.

Разыграть можно друзей, коллег, создателей веб-сайтов, дизайнеров, которые ещё не закончили работу над своими проектами в компаниях соответствующего профиля.

В частности, если веб-студия работает с веб-сервером XAMPP, то все сайты, находящиеся в стадии разработки и отображающиеся в строке браузера на компьютере веб-мастера как http://localhost/new_cool_site, можно оформить, как поддиректории произвольного домена http://mydomain.ru/new_cool_site. Особенно забавно это будет выглядеть, если в качестве mydomain.ru вы выберете, например, kremlin.ru. Демонстрация сайта президента с вашими работами в каком-нибудь кафе или даже дома с параллельным рассказом о том, как глубоко администрация главы государства заинтересовалась вашим творчеством, может произвести неизгладимое впечатление на неискушённых в этом собеседников.

Если же вы являетесь системным администратором, то то же самое можно показать вашим веб-мастерам и дизайнерам, которые будут ломать голову, как это их незаконченные работы вдруг оказались выложены в интернет на чужом домене.

Идея состоит в следующем.

Имеется некий компьютер, с которого мы будем морочить голову собеседнику. Допустим, это ноутбук с доступом по Wi-Fi.

На этом компьютере создаётся и поднимается виртуальный интерфейс с помощью пакета OpenVPN, на котором прописывается IP-адрес (как правило, серый) удалённого веб-сервера с 24-битной маской.

image

image

image

image

Далее, в файле %WINDIR%\system32\drivers\etc\hosts задаётся соответствие этого IP-адреса (172.16.0.10) произвольному доменному имени, которое придёт вам в голову, например kremlin.ru.

Кроме этого, нам потребуется рутовый SSH-доступ к маршрутизатору компании, с которого по локальной сети виден рабочий компьютер с внутренним веб-сервером студии. Рутовый потому, что мы будем пробрасывать привелигированный 80-й порт.

Остаётся запустить на нашем ноутбуке SSH-клиент, например PuTTY, и создать прямой туннель, подключившись к маршрутизатору со следующими настройками:

image

Всё. Теперь открывайте сайт с прописанного в hosts доменного имени и зовите кого-нибудь посмотреть.

image

Поднятый нами туннель — довольно редкая разновидность туннеля по расширенной схеме, которая отписана в этой статье. В 99% случаев Source address является адресом локальной петли и не указывается явно, поэтому под него даже не выделено место в настройках туннеля в Putty. Но в данном случае он отличается от localhost, поэтому приходится впихивать его вместе с Source port.

Должен предупредить, что фокус пройдёт только для таких сайтов, для которых не настроена переадресация с IP в доменное имя, что как раз и бывает на серверах типа XAMPP.

Таким образом, результат достигается без VPN и манипуляций с DNS-серверами — просто ловкость рук и никакого мошенничества.

Postscriptum

Господа,
С момента опубликования этой статьи я отметил крайне негативное отношение к ней со стороны профессионалов.
Я прошу с пониманием отнестись к тому, что аудитория читателей хабра существенно шире, чем сообщество хабражителей.
И далеко не всем из читателей приходилось решать подобные задачи или делать это регулярно.
Поэтому, вы уж, пожалуйста, не лютуйте.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 18

    +1
    Полезнее было придумать для студии что-то более подходящее, чем xampp вместо «розыгрыша».
      –1
      Я не сомневаюсь, что здесь собрались серьёзные люди. И серьёзные проекты у меня тоже есть. Например, «Виртуальные классы» (viclass.ru), описание которого Хабр отклонил под предлогом того, что это реклама.
      А этот пост из категории «Айтишники шутят» без претензии на серьёзность.
      Только суровые админы почему-то считают этот юмор чёрным.
      +4
      Немного не догнал, а что мешает поднять туннель до офиса и прописать в hosts:

      IP-веб_сервера_в_офисе kremlin.ru

      ??
        –1
        Я тоже не совсем понимаю, что вы имеете в виду.
        Вы, очевидно, попадёте на сайт президента, которому я грешным делом, обеспечил сегодня повышенную популярность :)
          +1
          Вы шутите? :)
          Если цель это открыть ваш сайт на любом домене, то именно так можно и поступить, имея доступ во внутреннюю сеть. Если внутренняя сеть имеет публичный айпи — еще проще…
            0
            Нет, я совршенно серьёзно.
            Вот вы сидите в кафе и открываете в браузере kremlin.ru/бла-бла-бла
            И что происходит дальше?
              +2
              Если я предварительно в /etc/hosts (да, я на линуксе работаю и мне не нужен костыль в виде PuTTy) внес IP офисного компа (на котором по легенде висит некий тестовый сайт) и если у меня установлен VPN к офису (т.е. IP офисных компов доступны мне на локали), то откроется «левый» сайт на известном домене.

              Но так я могу любой сайт «открывать»… А если не требуется открывать именно сайт для разработчика, то и VPN не нужен — на 127.0.0.1 завести нужный домен и все — готово представление…

              P.S. Вообще, у вас условие надуманное. Как и аргументация. Ведь и кафе может иметь ограниченный Wi-Fi, где только 80-й и 443-й порты открыты (и тут SSH не поможет, хорошо если вы предусмотрительно повесили OpenVPN на 443-й порт, а если нет?), и «целевой» сайт может иметь сертификат, который вместо «зеленого замочка» покажет перечеркнутый красным ;)

              P.P.S. Не для холивара, но в виду того что пример на Windows, есть мысль что вы излишне восторгаетесь будничными для Linux-пользователя (и уж тем более — администратора) вещами… Описали бы вы тройной вложенный SSH-туннель, netcat и т.п…
                –1
                В том то и дело, что речь идёт о среднестатистических ноутбуках и рабочих станциях, которые на 95% на виндах, где никто заморачиваться с созданием VPN для этого не будет.

                А при наличии Linux всё, конечно, упрощается. Я как раз сегодня развлекался пропусканием SSH-VPN по обратному туннелю SSH и в этом смысле возможности Linux просто неограничены.

                Что касается открытых/закрытых портов и всяких других условностей, то невозможно всё предусмотреть в этой жизни. И про HTTPS я намеренно не писал, но большинство сайтов в разработке всё-таки пока на HTTP. В статье опущены все эти частности — показан принцип.

                Сопоставить доменному имени клон loopbackа типа 127.0.0.5 не получится. Винда, по крайней мере, подобные сопоставления почему-то игнорирует, хотя по самому IP сайт откроется. Поэтому я и предложил простой способ установки дополнительного адаптера, который минуты 3 занимает. А если у вас VMware или VirtualBox, то всё уже под руками.

                Вобщем, ничем я не восторгаюсь, я просто показал фокус для Windows, который мне лично не кажется банальным. И, честно говоря, я очень озадачен тем, что меня опустили ниже плинтуса.
                  +2
                  Не кажется банальным этот фокус исключительно Вам. Большинству посетителей хабра, сфера интересов которых лежит в этой области, такой «фокус» может показаться небанальным только из-за того, что подобная глупость просто никому не придёт в голову.
                  Ну вот не вижу я ничего смешного, чтобы открыть свой сайт якобы на постороннем домене. И, похоже, не только я.

                  Что же касается нюансов технической реализации — то тут есть миллион вариантов, из которых Ваш отнюдь не самый изящный.
                  Навскидку:
                  — прописать в hosts алиасы на 127.0.0.1 и поднять веб-сервер на своём ноутбуке. Я не знаю, почему у Вас «винда подобные сопоставления игнорирует», у меня прекрасно работает и я этой схемой неоднократно пользовался, когда приходилось подпиливать чужие сайты с hard-coded ссылками.

                  — если всё же не получается на локалхосте — поднимите второй адрес на обычном сетевом интерфейсе и сошлитесь на него. Это умеет даже винда, только надо нажать кнопочку «advanced».

                  — поднять на своём ноутбуке любую систему виртуализации, линукс с вебсервером в виртуалке, алиас в hosts и поехали. Это может показаться немного замороченным, но я знаю огромное количество веб-разработчиков, которые эту связку держат в качестве рабочей: это позволяет работать хоть в самолёте, смотреть разрабатываемый сайт с винды в любом нужном браузере, при этом не заморачиваясь разворачиванием на ней веб-сервера (да и не всегда конфигурацию того же nginx можно смоделировать под вендозе).

                  Ну и ещё миллион способов, включая локальный DNS-сервер и так далее. Вариантов масса, вопрос только в одном: Вы точно уверены, что это — смешно?
                    –1
                    Начнём с того, что если Вам эта заметка кажется банальной, то она просто не для Вас.
                    В вашем комментарии ключевая фраза «Ну вот не вижу я ничего смешного».
                    Возможно другие думают иначе и это статья для них.

                    Что касается изящества, то вопрос о том, что проще — «поднять вебсервер», «поднять систему виртуализации» или запустить PuTTY, тем более, если это не ваш личный компьютер, является риторическим.

                    Интерфейс в альтернативной конфигурации будет работать только в том случае, если не работает основной по DHCP. Как вы будете использовать этот альтернативный интерфейс, когда работает основной, я не знаю.

                    Неработоспособность сопоставления локальных адресов доменным именам — это проблема, в которой мне было лень разбираться. Я просто понял, что это ненадёжно и предложил вариант с дополнительным интерфейсом, который работоспособен на 100%.

                    А вообще мне просто становится смешно — здесь на хабре я чувствую себя провинившимся мальчишкой в кабинете директора школы, которому педсовет строго выговаривает:
                    — Как ты мог сморозить такую глупость в уважаемом обществе?! И даже если решил сморозить, то почему выбрал именно этот вариант из миллиона других?!

                    И я отвечу — я имею право на подобные глупости, ибо если бы они были таковыми, то их бы не публиковали на хабре. И из миллиона я решил осветить именно МОЙ вариант, не претендуя на то, что другие невозможны.
                      +1
                      Так hosts приоритетней, чем DNS. Изменить его и все.

                      В винде правите C:\Windows\System32\drivers\etc\hosts.
                      В линуксах /etc/hosts

                      Постоянно пользуюсь в разработке чтобы что-либо проверить перед деплоем на продакшен.
                        +1
                        Я думаю, что проблема использования hosts во всей этой истории в том, что виндовая функция DnsQuery, в которую приходят все способы резолва имени (кроме самописной реализации на сокетах), имеет флаг DNS_QUERY_NO_HOSTS_FILE — который поддерживается еще с XP и запрещает резолвить из hosts. Довольно много программ использует его если не постоянно, то при недоверии к ответу.
        0
        А такая специализация в профиле у вас появилась после того, как проделали эту шутку? ;)
          0
          Да нет, это, увы, безрадостные реалии жизни…
          Убираю.
          0
          интересная у Вас директория с заббиксом в адресной строке
            0
            Заббикс выгядит так же, как и обычный сайт.
            Просто под руками оказался на момент написания статьи.
              0
              я про kremlin.ru/zabbyx/
            0
            Тот редкий случай, когда можно воочию наблюдать легендарный, возведённый в абсолют в огромном количестве баек о хабраюзерах снобизм. Не понимаю, зачем вы накинулись на парнишку-то? Ну он пошутил, да. Ну вам не смешно, да. Ну вы накидали более годных с вашей точки зрения решений. Но минусовать его за свободомыслие — это уже некоторый симптом.

            PS: лично мне как не специалисту было полезно и познавательно прочесть и сам пост автора, и технический разбор неточностей предложенной им реализацией в комментариях местных старожилов. Спасибо, Хабр.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое