http 또는 https를 통해 ssh를 사용하는 방법은 무엇입니까?


42

회사 방화벽 뒤에 Linux fedora21 클라이언트 랩톱이 있으며 (http 및 https 포트는 통과하지만 ssh 22는 허용하지 않음) 집에는 자체 라우터 뒤에 Linux fedora21 서버가 있습니다. 홈 서버의 퍼블릭 IP 주소를 지정하면 https로 검색 할 수 있습니다 (홈 라우터를 구성했기 때문에)

http / s 포트를 통해 홈 서버에 ssh (원격 셸)를 사용할 수 있습니까?

라는 도구를 보았습니다 corkscrew. 도움이 되겠습니까?

opensshdhttpd홈 서버에서 실행됩니다. 다른 무엇을 구성해야합니까?


1
포트 443에서 수신 대기하려면 sshd를 집에 두십시오. 그러나 집 httpd에서 포트 443을 비활성화해야합니다.
taliezin

나는 그렇게 할 수 없습니다. git pushd에 대해서도 httpd가 필요합니다. 그래서 443에 httpd 청취가 있어야합니다.
MMM

httptunnel-yum install httptunnel http://www.nocrew.org/software/httptunnel.html 을 사용하거나 질문에서 언급 한 것처럼 corkscrew를 사용해보십시오 .
taliezin

어느 쪽이든, sshd는 22를 듣고 httpd는 80/443을 듣고 httptunnel 또는 corkscrew는 httpd가받는 트래픽을 sshd로 전달합니까?
MMM

예. 서비스 포트를 변경할 필요는 없습니다.
taliezin

답변:


42

가능한 것은 방화벽이 허용하는 내용에 따라 다릅니다.

방화벽이 포트 443에서 임의 트래픽을 허용하는 경우

일부 방화벽은 간단한 방법으로 포트 443에서 모든 것을 허용합니다.이 경우 홈 서버에 접근하는 가장 쉬운 방법은 포트 443에서 SSH 연결을 수신하는 것입니다. 컴퓨터가 인터넷에 직접 연결된 경우 간단히 추가 Port 443/etc/ssh/sshd_config또는 /etc/sshd_config말한다 라인 바로 아래 Port 22. 컴퓨터가 들어오는 연결을 리디렉션하는 라우터 / 방화벽 뒤에있는 경우 다음과 같은 방법으로 들어오는 연결을 포트 443에 대한 서버의 포트 22로 리디렉션합니다.

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

wan0라우터의 WAN 인터페이스는 어디에 있고 홈 네트워크의 서버 IP 주소는 10.1.2.3입니다.

홈 서버가 포트 443에서 HTTPS 연결과 SSH 연결을 모두 청취 할 수있게하려면 SSH와 HTTPS 트래픽을 쉽게 구별 할 수 있습니다 (SSH에서는 서버가 먼저 대화하고 HTTP 및 HTTPS에서는 클라이언트가 대화합니다) 먼저). 이를 설정하는 방법에 대한 자습서는 http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.htmlhttp://wrouesnel.github.io/articles/Setting%20up%20sshttp/ 를 참조하십시오. 최대 sshttp , 또한 되세요 SSH 포트 80 또는 443에서 웹 서버 (의 nginx)는 이러한 포트에서 실행되는 동안

CONNECT 터널링을 허용하는 웹 프록시가있는 경우

일부 방화벽은 모든 나가는 연결을 차단하지만 프록시를 통해 웹을 탐색하여 HTTPCONNECT 방법으로 방화벽의 구멍을 효과적으로 뚫을 수 있습니다. CONNECT위 등의 포트 443에서 듣고이 결합해야 할 수 있도록 방법은 특정 포트로 제한 될 수 있습니다.

SSH가 프록시를 통과하게하려면 corkscrew 와 같은 도구를 사용할 수 있습니다 . 당신으로 ~/.ssh/config하는 추가 ProxyCommand웹 프록시 인 경우, 아래와 같은 라인을 http://web-proxy.work.example.com:3128:

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

HTTP (S)에서 SSH 랩핑

일부 방화벽은 포트 443에서도 SSH 트래픽을 허용하지 않습니다. 이러한 방화벽에 대처하려면 방화벽이 통과 할 수있는 것으로 SSH를 위장하거나 터널링해야합니다. proxytunnel로이 를 수행하는 방법에 대한 자습서는 http://dag.wiee.rs/howto/ssh-http-tunneling/ 을 참조 하십시오 .


443 트릭이 해냈습니다! 나는 이것이 효과가 있다는 것에 놀랐다 :)-왜 이것이 대부분의 방화벽에서 나타나는 것처럼 보이는 sysadmin 시력?
AK_

@AK_ 방화벽이 TLS와 SSH를 구별 할 수는 있지만 추가 구성 단계이며 성능면에서 더 많은 비용이 들지만 나가는 연결에 대해서는 실질적인 이점이 없습니다 (어쨌든 TLS에서 터널링 될 수 있기 때문에).
Gilles 'SO- 악마 그만해

@Gilles, HTTPS를 차단하면서 HTTP CONNECT HTTPS를 허용하는 프록시 서버도 있습니까?
Pacerier

1
@Pacerier 그들 중 다수. 프록시가 HTTPS를 차단하는 것은 아닙니다. 프록시가 프록시를 우회하는 연결을 차단하지는 않습니다. 직접 연결은 차단되지만 프록시는 포트 443에 대한 트래픽을 제공 할 수 있습니다. 어쨌든 HTTPS를 필터링 할 수있는 방법은 없습니다 , 신뢰 주입이 부족하고 인증서를 다시 작성하는 것은 매우 나쁜 생각입니다.
Gilles 'SO- 악의를 멈춰라'

프록시 쉼표에서 코르크 마개 대신 netcat-openbsd를 사용할 수도 있습니다.ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux


1

동일한 포트 443에서 HTTPS 서버와 SSHd 서버를 모두 실행하려는 경우 sslh 를 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.