Apache 의 Proxy를 사용하여 Ssh 터널링하기

대부분의 환경에서 Proxy를 사용하여 ssh를 쓸일은 없을 것이다.

기본적으로 ssh는 22번 포트를 쓰는데, 22번 포트가 ssh라는건 해커도 다 아는 사실이고..
그래서 대부분 보안상 이유로 22번이 아닌 포트를 사용할 것이다.

근데 문제는 특수한 firewall 환경에서 (극단적으로) 22번을 포함하여 80 정도의 포트를 제외하고 모든 다른 포트로의 통신을 막아버린 경우다..(ex 군대 사지방)

그런 상황에서 ssh를 사용하려면 어쩔수 없이 80포트를 사용해야하는데, 보통 웹서버를 운용한다면 80 포트를 사용할 수는 없을 것이다. 그래서 Apache가 Proxy 역할을 하게 해서 ssh에 연결하는 방법으로 사용할 수 있다. 더 나아가 공인 IP 안에 여러 ssh 서버가 있고, 외부에서 이를 골라서 접속하게 하는데 응용할 수도 있겠다.

준비물은 Apache2가 설정되고 ssh가 있는 서버 그리고 Apache2 에 mod_proxy 와 mod_proxy_connect, mod_proxy_ajp가 enable 되어 있어야 한다.

 sudo en2mod mod_proxy mod_proxy_connect mod_proxy_ajp

그리고 /etc/apache2/site-available 에 파일 001-ssh_proxy를 만들어주자

<Virtualhost *:80>
ProxyRequests on
ServerName ssh.domain.com #ssh 를 받아드릴 도메인 주소이다
ProxyRequests on
ProxyVia on
AllowCONNECT ssh_포트  #기본 ssh 포트는 22이지만 대부분 다른것을 쓸 것이라 생각한다
<Proxy 도메인주소:ssh포트>
Order deny,allow
Deny from all # 기본적으로 다 막는다.
Allow from 연결허용할 IP # 연결허용할 IP
# 만약 위험을 무릎쓰고 모든이에게 개방하려면, Order allow,deny
# Allow from all 을 쓰고 Deny행을 지운다.
</Proxy>
Redirect / http://nahs.pe.kr/   #proxy 요청이 아닐경우 원래 홈페이지로 이동
</Virtualhost>

이렇게 쓴후 en2site 001-ssh_proxy
귀찮으면 site-enabled 에 그냥 ln -s 로 심볼릭 걸어줘도 된다.

이후 apache2 재시작(sudo /etc/init.d/apache2 restart)

이러면 서버쪽에서의 설정은 끝났다.

접속법

putty의 경우 기본적으로 http proxy를 연결하는 기능이 있다.
connection -> Proxy 에 http1.1로 프록시 주소와 포트(80)만 넣어주고,

원래 연결하려는 주소를 Session 에 넣어주기만 하면 접속이 잘 된다.

문제는 Linux 에서 하는 법. corkscrew 나 proxytunnel을 사용해야한다.

여기서는 proxytunnel을 사용하겠다.
$HOME/.ssh/config 에 다음과 같이 만들어준다.

sudo apt-get install proxytunnel

하고.

Host 연결하려는 호스트
ProtocolKeepAlives 30
ProxyCommand proxytunnel -v -p 프록시주소:80 -d 연결하려는ssh서버:포트

하고 그냥 일반적으로 ssh 호스트로 연결하면 알아서 연결된다.

이 방식으로 ssh tunneling 도 가능하다.. 응용법이 무궁무진하다..

 

https://nahs.pe.kr/wordpress/?p=172에서 가져옴.

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin