Задать вопрос
@Quqas

SSH +reverse https proxy, при чём тут openSSL(VPN)?

Хочу по ssh подключится(извне) к консоле устройства. лишь для того чтобы управлять. а не для того чтоб трафик гонять

условия: доступ извне только https трафику, не 443 порт only, а именно https.

в гуглах пишут ничего страшного
настраиваете reverse proxy и вперёд
ssh -o ProxyCommand="openssl s_client ***
но в тех же "советах" ни слова об настройке на ssh серваке
не понимаю sshd by default понимает https? или именно ssh траф лезет но тогда как nginx его направляет?
ну и причём тут openssl? опять же ни слова про его настройку на ssh серваке - а якобы он должен этот коннект схавать

я могу "свой" reverse proxy настроить. но ограниченно. только внутренний ip/порт и выбор https|http (http или https "внутри" правильней выбирать, под задачу? )

"извне" только выбор sni в запросе.

ну и не выходит ничего "по советам"

хотя м.б. я не так делаю

ssh -o ProxyCommand="openssl s_client -connect your_domain.com:443 -servername your_domain.com"

это часть очевидно

неясно что дальше добавить?

root@192.168.5.1 -p 222
или же root@your_domain.com -p 443

и так и сяк ноль успеха
  • Вопрос задан
  • 113 просмотров
Подписаться 1 Средний 8 комментариев
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Ну для начала, OpenSSL - это (если на пальцах) библиотека+утилита для шифрования трафика. Ею или её аналогами пользуется примерно всё, что хочет установить шифрованный канал. Помимо использования её как библиотеки, ты можешь использовать её как утилиту, в духе "слушай адрес+порт A.B.C.D:X, все входящие подключения расшифровывай(для сервера)/шифруй(для клиента), после чего перенаправляй на адрес+порт E.F.G.H:Y". Тогда таким образом можно создать шифрованный туннель, через который пускать трафик какого-то другого приложения.

Но постановка задачи вызывает вопросы. Что значит "только по HTTPS"? Каким именно образом это правило контролируется? Не зная ответа на этот вопрос, решения не найдёшь.

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

Но имей ввиду, что SSH сервера вроде OpenSSH (но вроде не Dropbear) и так используют OpenSSL для защиты своего трафика. Хотя при этом всё равно есть различия между тем, как устанавливается соединение при HTTP+TLS и при SSH, так что может в таком туннеле и будет смысл.

Но соответствие HTTPS может контролироваться более жёстко. Нужно использовать заданный хостером HTTP-прокси/реверс-прокси для работы с сетью? Или, скажем, слишком долго висящие соединения принудительно рвутся? Или TLS-хэндшейк проверяется на соответствие популярным браузерам? Во всех этих случаях простым туннелем ты не обойдёшься.
Ответ написан
@rPman
Если вам нужно обеспечить доступ к сервису в локальной сети по http извне, но защитить трафик каким-либо шифрованием, то более чем достаточно обычного перенаправления портов ssh, на роутере или на машине в локальной сети запускаем ssh сервер с разрешенным перенаправлением портов (по умолчанию это разрешено AllowTcpForwarding Yes), а затем в сети, откуда необходим доступ, нужно запустить:
ssh user@host -L ip_адрес_локальной_машины:port_локальной_машины:ip_адрес_машины_с_http_сервисом:port_этого_сервиса


кстати можно и наоборот, особенно это актуально, если подключения из вне до целевого сервиса никак не доступны, можно ssh сервер поднять на клиенте (откуда хотим подключаться) а она из машин в локальной сети где целевой сервис стоит, должна запустить ssh клиент:
ssh user@host -R ip_адрес_в_локальной_сети_целевого_сервиса:port_целевого_сервиса:ip_адрес_в_локальной_сети_клиента:port_в_локальной_сети_клиента


в обоих случаях сервис станет доступен из локальной сети клиента по адресу: http://ip_адрес_в_локальной_сети_клиента:port_в_ло...

Точнее по тому же протоколу, по которому он работает в этой локальной сети.

ip_адрес_в_локальной_сети можно не указывать, если он 127.0.0.1, так же порт по которому ssh будет слушать подключение, если будет ниже 4000 то ssh должен быть запущен под root

upd. если нужно именно https протокол, то нужно запускать http сервер с поддержкой ssl сертификатов (обычно в роутерах этого нет) в режиме проксирования (например nginx)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы