Jak korzystać z ssh przez http lub https?


42

Mam klienckiego laptopa fedora21 za firewallem korporacyjnym (który przepuszcza porty HTTP i https, ale nie ssh 22) i mam serwer Linux fedora21 w domu za moim routerem. Przeglądanie za pomocą protokołu https działa, gdy podam publiczny adres IP mojego serwera domowego (ponieważ skonfigurowałem router domowy)

Czy możliwe jest ssh (zdalna powłoka) na moim serwerze domowym przez port http / s?

Widziałem narzędzie o nazwie corkscrew. czy to pomogłoby?

opensshdi httpduruchom na serwerze domowym. Co jeszcze wymagałoby konfiguracji?


1
umieść sshd w domu, aby nasłuchiwał na porcie 443, ale powinieneś wyłączyć port 443 na swoim domowym httpd.
taliezin

Nie mogę tego do końca rozumieć. Potrzebuję również httpd (s) dla git push. więc muszę słuchać httpd na 443.
MMM

spróbuj httptunnel - mniam zainstaluj httptunnel http://www.nocrew.org/software/httptunnel.html lub jak wspomniałeś w swoim pytaniu: korkociąg.
taliezin

Tak czy inaczej, sshd będzie nasłuchiwał 22, a httpd do 80/443, a httptunnel lub korkociąg przekaże ruch odbierany przez httpd do sshd?
MMM

Tak. Nie musi zmieniać portów Twoich usług.
taliezin

Odpowiedzi:


42

To, co jest możliwe, zależy od tego, na co pozwala zapora.

Jeśli zapora sieciowa zezwala na dowolny ruch na porcie 443

Niektóre zapory ogniowe wychodzą w prosty sposób i zezwalają na cokolwiek na porcie 443. W takim przypadku najłatwiejszym sposobem na uzyskanie dostępu do serwera domowego jest umożliwienie nasłuchiwania połączeń SSH na porcie 443. Jeśli komputer jest podłączony bezpośrednio do Internetu, po prostu dodaj Port 443do /etc/ssh/sshd_configlub /etc/sshd_configponiżej linii, która mówi Port 22. Jeśli komputer znajduje się za routerem / zaporą, która przekierowuje połączenia przychodzące, przekieruj połączenia przychodzące do portu 443 na port 22 serwera za pomocą czegoś podobnego

iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22

gdzie wan0jest interfejs WAN routera, a 10.1.2.3 to adres IP serwera w sieci domowej.

Jeśli chcesz pozwolić serwerowi domowemu nasłuchiwać zarówno połączeń HTTPS, jak i połączeń SSH na porcie 443, jest to możliwe - ruch SSH i HTTPS można łatwo rozróżnić (w SSH serwer mówi najpierw, podczas gdy w HTTP i HTTPS klient mówi pierwszy). Zobacz http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html i http://wrouesnel.github.io/articles/Setting%20up%20sshttp/, aby dowiedzieć się, jak to ustawić z sshttp , a także mieć SSH na porcie 80 lub 443, podczas gdy serwer WWW (nginx) działa na tych portach

Jeśli masz serwer proxy sieci Web, który umożliwia tunelowanie CONNECT

Niektóre zapory blokują wszystkie połączenia wychodzące, ale umożliwiają przeglądanie Internetu za pośrednictwem serwera proxy, który pozwala metodzie HTTPCONNECT skutecznie przebić dziurę w zaporze. CONNECTMetoda może być ograniczone do niektórych portów, więc może trzeba połączyć to z nasłuchuje na porcie 443, jak powyżej.

Aby SSH działał przez serwer proxy, możesz użyć narzędzia takiego jak korkociąg . W swoim ~/.ssh/configdodaj ProxyCommandlinię podobną do poniższej, jeśli twój internetowy serwer proxy to http://web-proxy.work.example.com:3128:

Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p

Zawijanie SSH w HTTP (S)

Niektóre zapory nie zezwalają na ruch SSH, nawet na porcie 443. Aby sobie z tym poradzić, musisz ukryć lub tunelować SSH w coś, co przepuszcza zapora. Zobacz http://dag.wiee.rs/howto/ssh-http-tunneling/, aby zapoznać się z samouczkiem na temat robienia tego za pomocą proxyytunelu .


sztuczka 443 to zrobiła! Byłem zaskoczony, że to działa :) - każdy sysadmin widzi, dlaczego tak jest w przypadku większości zapór ogniowych?
AK_

@AK_ Ponieważ chociaż zapora ogniowa odróżnia TLS od SSH, jest to dodatkowy krok konfiguracji i kosztuje więcej w wydajności, bez żadnej realnej korzyści, jeśli chodzi o połączenia wychodzące (ponieważ i tak wszystko można tunelować w TLS).
Gilles „SO - przestań być zły”,

@Gilles, Czy są nawet serwery proxy, które blokują HTTPS, ale pozwalają HTTP CONNECT HTTPS?
Pacerier

1
@Pacerier Wiele z nich. Nie chodzi o to, że proxy blokuje HTTPS - proxy nie blokuje połączeń, które omijają proxy - chodzi o to, że bezpośrednie połączenia są blokowane, ale proxy pozwala ŁĄCZYĆ się z dowolnym ruchem, pod warunkiem, że jest to port 443. Nie ma w rzeczywistości żadnego sposobu na filtrowanie HTTPS , brak podstaw do wstrzyknięcia zaufania i przepisywania certyfikatów, co jest bardzo złym pomysłem.
Gilles „SO- przestań być zły”

Pamiętaj, że możesz także użyć netcat-openbsd zamiast korkociągu w ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
komendzie


1

Możesz użyć sslh, jeśli chcesz uruchomić ZARÓWNO serwer HTTPS i serwer SSHd na tym samym porcie 443.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.