SSH tunneling 을 이용하여 Port forwarding을 해보자

SSH tunneling 을 이용하여 Port forwarding을 해보자

SSH tunneling

Secure Shell(SSH) 이름 그대로 보안을 위한 쉘 인줄 알았는데..?

글쓴이는 서버를 구축해놓고 여태까지 원격접속으로 쉘 밖에 이용하지 않았다. 그리고 SMB의 445 포트를 외부에서도 사용할 방법을 찾다가 우연히 “SSH Tunneling”을 알게되어 포스팅하게 되었다.

지금까지 포트를 열어야 하는 경우가 생기면 공유기 또는 라우터에서 해당하는 포트를 열어주면 끝날 일이였다. 하지만 ISP에서 포트 자체를 막은 경우 어찌할 방법이 없다. 하지만 22번 포트만 열려있고 통신이 가능하다면 어떠한 포트든 터널링해서 사용할 수 있다.

 

SSH Tunneling

우선 가장 간단하게 설명하자면, 22번 포트를 이용하여 서버와 클라이언트에 터널을 만들고 통신을 한다. 여기서 중요한건 22번 포트를 이용하여 임의의 포트로 통신이 가능하도록 만든다는 것이다.

터널링 방법은 두 가지 방법이 있다. 클라이언트에서 서버로 직접 연결하여 서버의 포트를 이용하는 “Local Tunneling”, 반대로 서버에서 클라이언트로 연결하는 “Remote Tunneling”이 있다.

우선, 터널링 하기 전 sshd의 설정을 조금 바꿔야 한다.

vi /etc/ssh/sshd_conf

중간 쯤 AllowTcpForwarding , GatewayPorts 옵션이 있는데 주석을 해제하고 yes로 바꿔준다.

 

Local Tunneling

클라이언트에서 서버에 접속, 터널링 하여 22번 포트로 임의의 포트를 사용한다.

Local Tunneling
Local Tunneling

“로컬에서 8000번 포트로 SSH 서버에 있는 80번 포트로 사용할 수 있게끔 터널링 해줄게” 라고 생각하면 정말 쉽게 쓸 수 있을 것 같다. 이 뜻은 클라이언트 쪽에서 인터넷 브라우져에 “http://localhost:8000” 을 입력하면 SSH서버에 있는 80번 포트에서 서비스 되는 웹 서비스로 연결이 된다.

처음에 Local과 Remote가 정말 햇갈렸다..

 

Remote Tunneling

반대로 서버에서 클라이언트로 연결하여 터널링 한다. 이 경우는 방화벽이 있을 때 유용하게 사용할 수 있다. 만일 회사에서 사용하는 방화벽이 있는데 8000/tcp 포트가 막혀있다면 다음과 같이 사용할 수 있다.

Remote Tunneling
Remote Tunneling

“서버(리모트)의 8000번 포트를 클라이언트 80번 포트로 사용할 수 있게끔 터널링 해줄게” 라고 생각하면 된다. 이 뜻은 클라이언트 쪽에서 “http://localhost:80″을 입력하면 서버의 8000번 포트로 연결이 된다.

여기서 물론 클라이언트의 22번 포트에 SSH가 서비스가 실행되어 있어야 한다.

 

Windows에서 Putty를 사용할 때 터널링 방법

ssh에 접속하기 위해 많이 사용하는 프로그램 중 하나는 putty일텐데, 당연 putty에서도 터널링을 지원한다.

Putty Tunnel
Putty Tunnel
Putty Tunnel
Putty Tunnel

 

 

 

 

 

 

 

로컬, 원격은 위 예와 똑같이 설정한 상태이고, 반드시 소스 포트 옆에 “추가”라는 버튼을 눌러 리스트에 추가시켜야 작동한다.

원래의 SSH 접속과 별 다를게 없겠지만 netstat -ao(Windows)/-nap(Linux) 로 확인해 보면 설정한 포트로 리스닝 된 것을 볼 수 있다.

참고자료

https://rufflewind.com/2014-03-02/ssh-port-forwarding

%d 블로거가 이것을 좋아합니다: