The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Проброс доступа к SSH через HTTPS
Для организации подключения к SSH-серверу из окружений, в которых заблокирован
любой трафик, кроме HTTP/HTTPS, можно настроить проброс к SSH на основе
внешнего HTTP-прокси.

На локальной системе, из которой производится подключение по SSH, добавляем в
файл конфигурации ~/.ssh/config настройку для проброса доступа к SSH-сервру с
именем "ssh-server" через обращение к хосту "ssh-via-https" утилитой ssh:


.ssh/config

   Host ssh-via-https
        ProxyCommand ~/.ssh/https-tunnel.bash
        # уменьшаем интервал проверочных запросов для поддержания соедиения, 
        # так как некоторые межсетевые экраны агрессивно закрывают неактивные соединения.
        ServerAliveInterval 30

Создаём скрипт ~/.ssh/https-tunnel.bash, в котором симулируем использование
прокси-метода CONNECT при подключении к HTTPS-серверу "https-server" через
утилиту socat, которая не поддерживает данный метод.

   #!/usr/bin/env bash
   { printf "CONNECT ssh-server:22 HTTP/1.0\r\n\r\n"; cat; } | socat - SSL:https-server:443

На стороне внешнего HTTP-сервера "https-server" в конфигурации Apache httpd
включаем модуль proxy_connect_module и разрешаем перенаправление запросов на 22
сетевой порт SSH-сервера "ssh-server".

/etc/httpd/httpd.conf

   LoadModule proxy_connect_module .../modules/mod_proxy_connect.so
   # ...
   AllowCONNECT 22
   <Proxy *>
       Order deny,allow
       Deny from all
   </Proxy>
   <Proxy ssh-server>
       Order deny,allow
       Allow from all
   </Proxy>

Подключаемся к SSH-серверу "ssh-server" командой:

   ssh ssh-via-https
 
24.12.2023 , Источник: https://trofi.github.io/posts/295-s...
Ключи: ssh, https, proxy, connect, tunnel / Лицензия: CC-BY
Раздел:    Корень / Безопасность / SSH

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, ананизмус (?), 10:07, 24/12/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    И в итоге ваш веб сервер можно использовтаь как прокси для подключения к любому ssh серверу в интернете- не?
     
  • 1.2, OpenEcho (?), 12:01, 24/12/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    А не проще на серверной стороне просто юзать haproxy, который элентарно может слушать для обоих https & ssh и разруливать по соответсвующему бэкенду?
     
  • 1.3, pavlinux (ok), 12:25, 24/12/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  . . . из окружений, в которых заблокирован любой трафик, кроме . . .

    Странная организация, банят весь траф. кроме., но можно ставить свой софт,
    рулить веб-сервером, ставить модули (LoadModule)

     
     
  • 2.4, Hamer13 (ok), 16:59, 24/12/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Хватает таких. Сколько-то лет назад был у нас клиент в арабской стране, где мы развернули и поддерживали площадку с, помимо прочего, веб-мордой. И вот после развёртывания и запуска нам туда закрыли доступ через VPN, а из внешнего мира доступен был только по HTTPS. Вот и пришлось при следующем обновлении выпрашивать VPN и, таки зайдя на площадку, настроили там sslh. Потому что заказчик свято веровал что достаточно выдать VPN-учётку одному сотруднику поддержки в Ливане и этого хватит для всего вообще. А то что команда разработчиков и админов — в Минске — а пофиг.
     
     
  • 3.6, OpenEcho (?), 18:40, 24/12/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > таки зайдя на площадку, настроили там sslh

    sslh кстати банально палится самой тупой DPI, т.к. не тунелированный SSH плэйн текстом отвечает - "привет, я ССШ номер такой-то..."

     
     
  • 4.7, Hamer13 (ok), 22:57, 24/12/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >> таки зайдя на площадку, настроили там sslh
    > sslh кстати банально палится самой тупой DPI, т.к. не тунелированный SSH плэйн
    > текстом отвечает - "привет, я ССШ номер такой-то..."

    Там такого колдунства с DPI не было и близко. Просто нормального доступа через VPN не предоставили, а обновлять площадку как-то нужно — решили проблему «в лоб». Через несколько лет таки продрались через местную бюрократию и получили нормальный туннель.

     
     
  • 5.8, OpenEcho (?), 08:18, 25/12/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > а обновлять площадку как-то нужно — решили проблему «в лоб».

    К сожалению борьба с бюрократией - неизбежна везде :(

     
  • 3.18, penetrator (?), 23:45, 09/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    а кто мешал завести OpenVPN сервер на 443-ем порту? ну ок, допустим что-то мешало, тогда можно завести сервер у себя, а там клиент демоном повесить и пофиг, что там из портов открыто
     
     
  • 4.19, Hamer13 (ok), 11:07, 11/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > а кто мешал завести OpenVPN сервер на 443-ем порту? ну ок, допустим
    > что-то мешало, тогда можно завести сервер у себя, а там клиент
    > демоном повесить и пофиг, что там из портов открыто

    Доступ к площадке из внешнего мира — только по https. Доступ из площадки во внешний мир — нет вообще. Вот и пришлось этот 443-й порт на самой площадке мультиплексировать.
    Почему такие ограничения — нужно спрашивать не у меня.

     
  • 2.5, OpenEcho (?), 18:35, 24/12/2023 [^] [^^] [^^^] [ответить]  
  • +/
    В оригинальной статье написанно, что чувак застрял в больнице и придумал этот релэй на апаче. Я только не понял, как он не выходя из больницы все же зарулил домой чтоб проксик на апаче поднять. Никак рулил любимой удаленно по телефону
     
     
  • 3.10, Пряник (?), 19:38, 25/12/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Всем бы таких любимых :)
     
  • 2.9, Пряник (?), 19:37, 25/12/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ИЗ окружений. То есть сервер SSH/HTTP стоит вне этих "странных" окружений.
     

  • 1.11, Аноним (11), 03:16, 26/12/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Детский сад. Если можно TLS подключать, доступны получше/попроще средства. Если нельзя, CONNECT тем более работать не будет.
    Я раньше прокидывал ссш на недоступные из интернета хосты через websocket соединение по сети Cloudflare (и в конце один свой балансировщик). Цепочка серверов nginx просто делает трубу до бэкэнда. Работало удивительно хорошо - порядка 7-8 мегабит это дело выдавало, перекладывая данные между сокетами на чистом перле (!). А ведь можно на встроенном луа в haproxy то же самое делать.
     
  • 1.12, OpenEcho (?), 03:42, 26/12/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Детский сад. Если можно TLS подключать, доступны получше/попроще средства.

    Да ладно, все когда-то были детьми...

    Для ОП: Самый ИМХО быстрый, простой и надежный способ в таких ситуациях, - скинуть на сервак(удаленную машину) один едиственный, статически скомпиленный  GoTTY (читай - будет работаь - практически везде), защитить секретный ЮРЛ и с любого браузера иметь нормальную терминальную консоль

     
     
  • 2.15, name (??), 18:07, 21/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    такой себе метод: при попытке покнопать под VIM комбинация ^W срубает вкладку браузера наглухо
     
     
  • 3.16, OpenEcho (?), 16:11, 22/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > такой себе метод: при попытке покнопать под VIM комбинация ^W срубает вкладку
    > браузера наглухо

    Так то шорткаты браузера или десктопа, удалить/поменять тогда

     

  • 1.13, lightspeed (??), 19:21, 02/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вообще, для всего этого и придумали такую штуку как PAM.. Там тебе и доступ и его разграничение и мониторинг с рекордингом и даже UBA.
     
  • 1.14, Azat174 (?), 14:37, 11/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    SSH3 вышел, он на 443 работает
     
  • 1.17, Дед Анон (?), 10:05, 24/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    чо за абстрактный враппер костылинга с вашим LAMP?

    правильный 10-строк костыль для nginx, остальное НеНужно.
    логи добавить по вкусу, remote_ip ломает.

    #-----
    stream {
        map $ssl_preread_protocol $upstream {
          ""        127.0.0.1:22;
          default   127.0.0.1:443;
        }
        server {
          listen 443 backlog=1024;
          ssl_preread on;
          proxy_pass $upstream;
        }
    }
    #-----

    ходим как хотим:
    $ ssh -p 443 your.server.org
    $ wget https://your.server.org

     
     
  • 2.20, friday1313 (ok), 14:12, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не подскажите, можно ли в таком случае в PHP-скрипте увидеть ip клиента?
    Сейчас работает разделение через sslh и он виден в переменной HTTP_X_REAL_IP
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру