The OpenNET Project / Index page

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



"Раздел полезных советов: Проброс доступа к SSH через HTTPS"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Проброс доступа к SSH через HTTPS"  +/
Сообщение от auto_tips (?), 24-Дек-23, 10:07 
Для организации подключения к 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

URL: https://trofi.github.io/posts/295-ssh-over-https.html
Обсуждается: http://www.opennet.ru/tips/info/3242.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от ананизмус (?), 24-Дек-23, 10:07   +3 +/
И в итоге ваш веб сервер можно использовтаь как прокси для подключения к любому ssh серверу в интернете- не?
Ответить | Правка | Наверх | Cообщить модератору

2. Сообщение от OpenEcho (?), 24-Дек-23, 12:01   +4 +/
А не проще на серверной стороне просто юзать haproxy, который элентарно может слушать для обоих https & ssh и разруливать по соответсвующему бэкенду?
Ответить | Правка | Наверх | Cообщить модератору

3. Сообщение от pavlinux (ok), 24-Дек-23, 12:25   +1 +/
>  . . . из окружений, в которых заблокирован любой трафик, кроме . . .

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #4, #5, #9

4. Сообщение от Hamer13 (ok), 24-Дек-23, 16:59   +/
Хватает таких. Сколько-то лет назад был у нас клиент в арабской стране, где мы развернули и поддерживали площадку с, помимо прочего, веб-мордой. И вот после развёртывания и запуска нам туда закрыли доступ через VPN, а из внешнего мира доступен был только по HTTPS. Вот и пришлось при следующем обновлении выпрашивать VPN и, таки зайдя на площадку, настроили там sslh. Потому что заказчик свято веровал что достаточно выдать VPN-учётку одному сотруднику поддержки в Ливане и этого хватит для всего вообще. А то что команда разработчиков и админов — в Минске — а пофиг.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #6, #18

5. Сообщение от OpenEcho (?), 24-Дек-23, 18:35   +/
В оригинальной статье написанно, что чувак застрял в больнице и придумал этот релэй на апаче. Я только не понял, как он не выходя из больницы все же зарулил домой чтоб проксик на апаче поднять. Никак рулил любимой удаленно по телефону
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #10

6. Сообщение от OpenEcho (?), 24-Дек-23, 18:40   +1 +/
> таки зайдя на площадку, настроили там sslh

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #7

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #8

8. Сообщение от OpenEcho (?), 25-Дек-23, 08:18   +/
> а обновлять площадку как-то нужно — решили проблему «в лоб».

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7

9. Сообщение от Пряник (?), 25-Дек-23, 19:37   +1 +/
ИЗ окружений. То есть сервер SSH/HTTP стоит вне этих "странных" окружений.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

10. Сообщение от Пряник (?), 25-Дек-23, 19:38   +3 +/
Всем бы таких любимых :)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

11. Сообщение от Аноним (11), 26-Дек-23, 03:16   +/
Детский сад. Если можно TLS подключать, доступны получше/попроще средства. Если нельзя, CONNECT тем более работать не будет.
Я раньше прокидывал ссш на недоступные из интернета хосты через websocket соединение по сети Cloudflare (и в конце один свой балансировщик). Цепочка серверов nginx просто делает трубу до бэкэнда. Работало удивительно хорошо - порядка 7-8 мегабит это дело выдавало, перекладывая данные между сокетами на чистом перле (!). А ведь можно на встроенном луа в haproxy то же самое делать.
Ответить | Правка | Наверх | Cообщить модератору

12. Сообщение от OpenEcho (?), 26-Дек-23, 03:42   –1 +/
> Детский сад. Если можно TLS подключать, доступны получше/попроще средства.

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #15

13. Сообщение от lightspeed (??), 02-Янв-24, 19:21   +/
Вообще, для всего этого и придумали такую штуку как PAM.. Там тебе и доступ и его разграничение и мониторинг с рекордингом и даже UBA.
Ответить | Правка | Наверх | Cообщить модератору

14. Сообщение от Azat174email (?), 11-Янв-24, 14:37   +/
SSH3 вышел, он на 443 работает
Ответить | Правка | Наверх | Cообщить модератору

15. Сообщение от name (??), 21-Фев-24, 18:07   +1 +/
такой себе метод: при попытке покнопать под VIM комбинация ^W срубает вкладку браузера наглухо
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #16

16. Сообщение от OpenEcho (?), 22-Фев-24, 16:11   +/
> такой себе метод: при попытке покнопать под VIM комбинация ^W срубает вкладку
> браузера наглухо

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

17. Сообщение от Дед Анон (?), 24-Фев-24, 10:05   +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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #20

18. Сообщение от penetrator (?), 09-Мрт-24, 23:45   +/
а кто мешал завести OpenVPN сервер на 443-ем порту? ну ок, допустим что-то мешало, тогда можно завести сервер у себя, а там клиент демоном повесить и пофиг, что там из портов открыто
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #19

19. Сообщение от Hamer13 (ok), 11-Мрт-24, 11:07   +/
> а кто мешал завести OpenVPN сервер на 443-ем порту? ну ок, допустим
> что-то мешало, тогда можно завести сервер у себя, а там клиент
> демоном повесить и пофиг, что там из портов открыто

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18

20. Сообщение от friday1313 (ok), 20-Мрт-24, 14:12   +/
Не подскажите, можно ли в таком случае в PHP-скрипте увидеть ip клиента?
Сейчас работает разделение через sslh и он виден в переменной HTTP_X_REAL_IP
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17

22. Сообщение от Аноним (22), 28-Май-24, 13:13   +/
sslh
Ответить | Правка | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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