컴퓨터공부/Linux & Unix

ssh 터널링

achivenKakao 2007. 10. 10. 11:25

ssh 터널링을 이용하면 이용하지 못하던 것도 이용할 수 있다...

언젠가 써먹을수도 있을줄 모르니.. 우선 스크래래래랩..ㅋ

+

요즘같이 스니핑툴을 흔하게 구할 수 있는 상황에서는 모든 명령(접속 아이디, 암호 등)이 평문으로 전송되는 FTP는 사용하기가 많이 꺼려지죠..

안타깝게도 DS-106e는 기본으로 SFTP를 지원하지 않습니다.


다음은 SFTP를 이용하지 않고, SSH의 터널링을 이용한 FTP 접속 방법에 대해서 설명합니다.

이 방법은 또한 FTP 접속을 차단해둔 네트워크 환경에서도 FTP 서버로 연결할 수 있습니다.


전 터널링이라는 기술을 자주 사용하고 있습니다.

예를 들면, 회사 업무상 원격지에 있는 서버에 접속해야하는 경우가 종종 발생합니다.

문제는 이 서버가 있는 곳에서 외부에서의 접근을 모두 차단해 두었습니다.

서버의 프로그램에서 문제가 발생하거나 하면 직접 방문해서 처리해야 됩니다. 당연히 네트워크 관리부서에서는 특정 포트를 열어줄리가 없죠.. 왔다갔다 하는데 시간도 많이 걸리고 귀찮죠..

그래서 서버에 reverse connection 기능을 가진 텔넷 프로그램을 만들어 구동시켜 두었습니다. 이 프로그램이 외부로 주기적으로 접속을 시도해 외부의 서버 프로그램과 연결이 되면 그때부터는 마음대로 해당 서버에 접속을 할 수 있습니다.

그 후 터널링 프로그램을 구동해서 DB나 웹 등으로 접근을 하구요..

물론 저처럼 reverse connection 기능을 가진 텔넷 프로그램을 사용하지 않고도, VNC 서버의 reverse connection 기능을 이용하거나 reverse connection 기능을 가진 다른 프로그램을 이용해도 됩니다.


본론으로 들어가서 FTP 접속에 관해서 설명드리겠습니다.(뭐 이곳에 계시는 분들이 고수분들이 많아서 대부분 알고 계실 듯합니다만...)


먼저 FTP 서버를 설정합니다.

FTP 서버의 포트와 패시브 모드 시 사용할 포트를 지정합니다. 반드시 FTP 서버에서 패시브 모드를 지원해야됩니다.

사용자 삽입 이미지

FTP 서버 데몬을 재시작한 후


PuTTY
를 준비하고, 다음과 같이 설정합니다.

Connection - SSH - Tunnels에서

Source port에 임의의 포트(2121)를 입력 <- FTP 클라이언트에서 사용할 포트

Destinationlocalhost:21을 입력 <- FTP 서버가 21번 포트를 사용하고 있을 경우

Add 버튼을 클릭하여 등록

위에서 설정한 것과 동일한 방법으로 패시브모드 시 사용할 포트도 등록합니다.

이 설명에서는 55536~55540를 추가하였습니다.

사용자 삽입 이미지


암호를 입력하지 않고 SSH로 로그인하기 위해서는 아래 그림에서와 같이 Private key를 지정합니다.  (이 과정은 생략해도 됩니다.)

사용자 삽입 이미지


다음으로 아래 그림과 같이 세션을 설정합니다. 설정 후 반드시 저장합니다.
사용자 삽입 이미지

Open 버튼을 클릭하고, SSH로 로그인한 다음 FTP 클라이언트의 설정을

서버의 주소는 localhost, 포트는 PuTTY에 설정한 포트 2121을 입력하고, 패시브 모드로 설정합니다.

사용자 삽입 이미지

위 그림과 같이 설정 후 연결하면 끝입니다.


사용자 삽입 이미지

참고로 연결되는 과정을 보면 다음 그림과 같습니다.

일반 FTP 클라이언트에서 2121번 포트로 아이디를 평문으로 전송을 하고

사용자 삽입 이미지


PuTTY에서 다시 아이디를 평문으로 localhost의 임의의 포트로 전달하고
사용자 삽입 이미지
PuTTY에서 실제 FTP 서버로 아이디를 암호화하여 전송하는 것을 볼 수 있습니다.
사용자 삽입 이미지

암호도 위와 동일하게 전송이됩니다.

위에서 설명드린 방법으로 FTP, HTTP, DB 등 특정 포트를 SSH 터널링을 이용하여 연결할 수 있습니다.

각 이미지는 클릭하면 크게 볼 수 있습니다.

출처 : http://cafe.naver.com/networkhard.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=664

+

ssh 터널링이란 ssh 접속을 다른 프로그램이 사용할수 있도록 port forwarding해주는 것을 말한다. 이 ssh 터널링을 이용해 암호화 접속을 사용하지 않는 네트워크 접속을 보다 안전하게 사용할수 있다.


POP

fetchmail을 사용하면 간단하게 ssh 터널안에서의 pop 메일 긁어오기를 구현할수 있다.

.fetchmailrc 설정예

poll localhost with protocol pop3 and port 11110:
preconnect "ssh -C -f 계정@메일서버.com -L 11110:메일서버.com:110 sleep 5"
password xxxxx

자세한 문서는 : SSH 를 이용한 보안 POP

원격 계정의 이메일을 아예 복사해오는 방법도 생각해 볼수 있다. (Compressed TCP/IP-Sessions using SSH-like tools 참조)

IMAP

ssh 터널링과 fetchmail을 사용해서 imap 서버로부터 메일을 가져오려면, 다음과 같은 .fetchmailrc를 만들어 사용하면 된다.

poll 메일서버.com with proto imap:
plugin "ssh %h /usr/sbin/imapd" auth ssh;
user babo is babo here

SMTP

역시 같은 문서에서 SSH 접속을 이용한 SMTP 사용법을 제시했는데 방법은 다음과 같이 간단하다.

ssh -C -l loginid mailserver -L2525:mailserver:25

후에 메일 클라이언트를 localhost port 2525 를 통해 메일을 보내도록 하면 된다. 예를 들어 pine을 사용한다면, .pinerc의 smtp-server=localhost:2525 와 같이 해주면 되겠다.

ssh 윈도우 클라이언트인 SecureCRT를 사용해도 가능한데 Session Option -> Connection -> Hostname -> Advanced 탭을 선택해서, 같은 요령으로 사용할 로컬 포트와 원격 호스트 이름, 포워딩할 원격 포트를 선택한다. ssh 접속 후에는 OE의 경우 SMTP 서버를 127.0.0.1 로 지정하고 사용할 포트만 위에서 선택한 로컬 포트로 지정하면 된다. POP 포트도 같은 방법으로 사용 가능 하다.

SSH를 이용한 SMTP는 몇가지 장점을 가지는데 네트워크 트래픽의 감소와 계정 사용자만이 SMTP 서버를 사용할수 있으므로 함부로 릴레이를 열어놓지 않아도 된다는데 의미가 있겠다.

Webmin

Webmin는 웹상에서 브라우저로 서버 관리를 하는 툴이며, 당연히 보안에 민감하다.

webmin은 일반적으로 10000 포트를 사용하므로 다음과 같이 ssh 접속을 연다.

ssh -f -l [원격 유저] [원격 서버] -L 1234:[원격 서버]:10000 tail -f /etc/motd

이제 브라우저에서 http://localhost:1234 로 접속할수 있다.

X

리모트 서버상의 X 어플리케이션들을 실행하고자 한다면 계정 홈 디렉토리의 ~/.ssh/environment 파일을 만들고 다음과 같은 내용을 넣어준다.

XAUTHORITY=/home/계정 이름/.Xauthority

이제 로그아웃한후에 ssh를 다음과 같이 실행해본다. (계정 이름이 silver이고 서버는 gate.eunjea.org 라고 한다면)

ssh -f -X -l silver gate.eunjea.org xterm

이제 xterm 이 로컬의 X에서 실행될 것이다. 다른 X 어플리케이션들도 이와 같이 실행시킬수 있다.

출처 : http://blog.naver.com/nillwow?Redirect=Log&logNo=9317988