한국어

tc_backup

SSH를 사용하여 다른 사이트의 Port를 SSH를 거쳐서 지나갈 수 있게 포워딩할 수 있다.
아래 설명은 리눅스 기준으로 설명한 것이다.
윈도우에서 사용할려면 Cygwin의 ssh를 이용하거나 Putty, XShell, SecureCRT 같은 프로그램을 이용하여야 한다.

사용하여야 하는 이유로 예를 들자면 로컬 네트워크에서 외부로 접속 하고자 하는데 그 사이의 방화벽에서 22번 포트만 허용해놓고 23번(telnet) 포트나 21번(ftp)의 외부 접근을 막아놨다고 하자. 그런데 업무로 인하여 telnet 서비스나 ftp를 이용하여야만 한다면?

1. 방화벽 관리자에게 연락하여 포트를 사용할 수있도록 허용해달라고 한다.
2. ssh를 사용하여 방화벽을 우회한다.

특정 웹사이트에 접속하고 싶은데 회사에서는 그 사이트의 접속을 라우터 단에서 막아놨다.

특정 메신져를 사용하고 싶은데 회사에서는 그 메신져가 사용하는 포트에 대한 접근을 막아놨다.

커뮤니티에 글을 남기고 싶은데, 그 커뮤니티에는 IP가 노출된다. 최소한 내 IP가 아닌 다른 IP로 기록이 되게끔 하고 싶다.(그러나 완전한 방법은 아니다. 법적인 수사가 들어 올 경우 내가 이용한 SSH 서버의 로그에는 내가 접속했던 시간의 기록이 남아있을 가능성이 높다.그렇다 하더라도 법적인 경우가 아닐 경우에는 확실히 내 IP의 노출을 막을 수 있으므로 유용하다.)

RapidShare 같은 사이트에서 자료를 받아야 하는데, 일정 시간에는 몇개의 파일만 받을 수 있도록 제한이 되어 있다. 그러므로 많은 자료를 받기 위해서는 몇개의 파일을 받고 몇분을 기다려야 하므로 시간이 낭비된다. 이럴때 SSH Tunneling을 이용하면 2개의 IP를 이용하여 받으므로 기다리는 시간을 절반으로 단축시킬 수 있다.(SSH 계정이 n개라면 n배수만큼 단축시킬 수 있음)

이러한 상황에 터널링을 이용하면 방화벽을 우회할 수도 있지만, 데이터를 암호화(Encryption) 하여 sniffing을 통한 데이터 또는 정보 노출을 막을 수 도 있다.

1. Local SSH Tunneling

Local SSH Tunneling 방법을 이용하는 경우 로컬 네트워크에서 내가 사용하는 컴퓨터에서 외부망의 SSH 서버에 접속한다. 그리고 내가 사용하는 컴퓨터의 "특정포트"를 Open(Listen)하여 localhost:특정포트를 이용하여 SSH 포트를 타고 데이터가 외부망의 서버로 전달이 되며 외부망의 서버에서 복호화(Decryption)되어 원래의 목적지(telnet, 또는 ftp)에 접속이 가능해진다.
로컬 네트워크의 내가 사용하는 컴퓨터에서는 "특정포트"에 접속을 하지만 데이터가 SSH 터널을 타고 외부망서버를 거쳐 가기 때문에 방화벽에서는 22번 포트의 데이터만 인식하게 된다.

SSH -L 1080:rain9.com:21 ssh-server.com
접속이 되면 놔두고 새로운 콘솔창을 띄워서
ftp localhost 1080
내 컴퓨터에 1080 포트를 Open(Listen)하고 ssh-server.com의 22번 포트로 접속을 한다.(따로 포트를 지정안했기 때문에 default ssh port인 22번으로 접속)
ssh-server.com 서버쪽에서는 1080 포트를 통하여 ssh 터널을 지나 데이터가 온 경우 rain9.com의 21번 포트로 연결시켜주게 된다.


2. Remote SSH Tunneling

리모트 SSH 터널링 방법의 경우 로컬 내트워크의 내가 사용하는 컴퓨터의 특정포트를 Open(Listen)하는 것이 아니라 외부망의 SSH 서버에 "특정포트"를 Open(Listen)하게 된다.
SSH나 원격과 같은 방법으로 외부망에 접속한 후 외부망 서버에서 Open(Listen)한 "특정포트"를 사용하면 원래의 목적지(telnet, 또는 ftp)에 접속이 가능해진다.

SSH -R 1090:rain9.com:21 ssh-server.com
접속이 되면 그 상태로
ftp localhost 1090
ssh-server.com의 22번 포트로 접속하여 ssh-server.com 서버에서 1090 포트를 Open(Listen)하고(그러나 Dafault로 127.0.0.1인 looopback 주소로만 열린다.) 서버에 접속한 상태로 ftp 127.0.0.1 1090 로 접속하면 rain9.com의 21번 포트로 접속이되어진다.

GatewayPorts yes
만일 ssh-server.com의 sshd_config 설정에 위 내용이 추가 되어 있다면, 127.0.0.1이 아닌 0.0.0.0 주소로 Listen하기 때문에 외부에서도 사용이 가능해진다.
예를 들면 내 컴퓨터나, 또다른 컴퓨터에서
ftp ssh-server.com 1090
로 접속하게 되면 rain9.com:21으로 Forwarding되어 접속이 가능해진다.


3. Dynamic SSH
다이나믹 SSH 터널링은 SOCKS 프로코콜을 이용하여 ssh 터널을 생성한다. SSH Tunneling에서 많이 사용되는 방법이다. 리모트나 로컬처럼 특정 대상이 필요한 것이 아니므로 메신져 우회나 차단된 웹사이트 우회 접속 등 범용적인 사용에 유리하므로 특수 목적이 아닌 이상 가장 쓸모가 있다.

SOCKS는 SOCKS 서버의 반대쪽에 있는 호스트의 연결 요청을 재지정하여 직접적인 IP 접근 없이 한쪽의 호스트가 다른 쪽의 호스트에 완전하게 액세스할 수 있도록 하는 네트워킹 프록시 프로토콜입니다. SOCKS는 권한 없는 사용자가 인터넷을 통해 내부 호스트에 액세스하는 것은 방지하면서도 SOCKS 서버 뒤의 호스트가 인터넷에 완전하게 액세스할 수 있도록 하는 네트워크 방화벽으로 널리 사용됩니다.

SOCKS 서버는 지점 간 기반으로 방화벽을 통해 액세스를 제어하는 일반적인 방화벽 데몬입니다. SOCKS 서버는 요청을 인증 및 승인하고, 프록시 연결을 수립하고, 데이터를 중계합니다. SOCKS 서버는 응용 프로그램 수준이 아닌 네트워크 수준에서 작동하므로 요청 전송에 사용되는 프로토콜이나 방법에 대해 알지 못합니다. SOCKS 서버가 프로토콜을 알지 못하므로 Proxy Server가 지원하지 않는 Telnet과 같은 프로토콜을 전달하는 데 사용될 수 있습니다.

Sun Java System Web Proxy Server 4 .0.1 관리 설명서 15장의 일부 내용임.
어플리케이션 계층이 아닌 네트워크 계층이라 HTTP Proxy Server처럼 제한적이지 않으므로 유용하다. 그러므로 HTTP나 메신져, IRC 등과 같이 어플리케이션 계층의 프로토콜이나 프로그램에서 범용적으로 사용이 가능한 것이다.
사용 방법은 아래와 같다.
SSH -D 1080 ssh-server.com
내 컴퓨터의 SOCKS 방식의 1080 포트를 오픈하고 ssh-server.com으로 접속한다. 프로그램에서 프록시 설정에서 SOCKS 방식을 선택하고 localhost를 적어주고 포트 1080을 적어주면 ssh-server.com의 ip로 웹서핑이나 메신져 사용이 가능해진다.

윈도우에서 putty를 이용하여 Dynamic SSH Tunnel을 만들어 사용하는 을 예전에 포스팅한 적이 있다.(사실은 거의 메모 수준)

아래 플래시 동영상은 리눅스와 리눅스에서 dynamic ssh tunneling을 이용하는 방법이다. 출처는 동영상에도 나와 있듯이 http://www.irongeek.com이다.
swf 다운로드



참조 사이트
Debian Administration :
http://www.debian-administration.org/article/SSH_dynamic_port_forwarding_with_SOCKS
KLDP WiKi - OpenSshTunneling : http://wiki.kldp.org/wiki.php/OpenSshTunneling
irongeek.com : http://www.irongeek.com/i.php?page=videos/sshdynamicportforwarding
SSH Tunneling 사용하기 - 「한빛 네트워크 기사 공모전」 가작: 이호재  : http://network.hanb.co.kr/print.php?bi_id=547


추가적으로
프로그램(어플리케이션)에서 소켓프록시를 설정할 수 있도록 지원하는 경우도 있지만, 그렇지 않은 경우도 존재한다. 이럴 때에는 TSOCKS나  Virtual Tunnel, Dante를 이용할 수도 있다.

실제로 테스트 해본 것은 TSOCKS인데 사용법은 매우 간단하다.
우분투의 경우
sudo apt-get install tsocks
sudo vi /etc/tsocks.conf
모든 라인을 다 지우거나 주석처리하고, 아래 두라인만 설정한다.
server = 127.0.0.1
server_port = 1080
그 후

ssh -L 1080:rain9.com:21 ssh-server.com
tsocks 대상프로그램

과 같은 방법으로 적용하면 된다. 제대로 적용이 됐는지 확인할려면 자신의 ip를 확인하여주는 사이트에 접속하여 보면 rain9.com의 ip가 찍히는 것을 확인할 수 있다. 본인은 www.rain9.com/ip.php와 같은 것을 만들어 놓고 ip 확인에 사용하고 있다.

관련 URL
http://www.plenz.com/tunnel-everything
http://www.linux.com/archive/feature/54894

조윤기

2010.03.04
17:07:39
(*.36.215.211)
내용 잘 읽고 갑니다.
네이버 카페에 스크립해갑니다.
원하시지 않는다면 바로 내리겠습니다.
gloss62@naver.com으로 멜보내주세요
그럼 오늘도 즐거운 하루 보내세요

엔신

2010.03.09
13:41:12
(*.95.19.173)
도움 되셨다니 저도 좋습니다. ㅎㅎ
진작에 댓글 보고도 게으름으로
일주일이 지나서야 댓글 답니다.
좋은 하루 되세요.
List of Articles
번호 제목 글쓴이 조회 수sort 추천 수 날짜
260 [VBA] 엑셀 시트명 가져오기 엔신 174896   2013-01-22
Sub 목록추출() Dim SheetNames() SheetCount = ActiveWorkbook.Sheets.Count ReDim SheetNames(1 To SheetCount) 'Sheets("목록").Select Range("A1").Select For i = 1 To SheetCount SheetNames(i) = ActiveWorkbook.Sheets(i).Name ActiveCell = ActiveWor...  
259 Security Nessus 설치, 사용법 file 엔신 107009   2008-12-11
 
258 Security base64 code 표 file 엔신 98856   2009-01-20
 
257 CCNA ACL(Access List) 설정하기 file 엔신 80015   2008-05-28
 
256 DBMS MySQL 설치/사용시 나는 에러 유형별 대처방법 엔신 72901   2008-02-24
[ MySQL 설치/사용시 나는 에러 유형별 대처방법 ] 1. ./configure 시에 에러가 날때.. 증상 : checking for tgetent in -lncurses... no checking for tgetent in -lcurses... no checking for tgetent in -ltermcap... no checking for termcap functions li...  
255 CCNA 14.[EIGRP] file 엔신 72047   2008-05-26
 
254 Security D-Link 공유기 취약점 file 엔신 70957   2010-01-13
 
253 [APC3.0] AhnLab Policy Center 3.0 관련 모듈 목록 엔신 64269   2013-03-21
마지막 업데이트 날짜 2010-01-13[수정] 1.00대상 제품]AhnLab Policy Center 3.0 SP3 AhnLab Policy Center 3.0 SP2 AhnLab Policy Center 3.0 SP1 AhnLab Policy Center 3.0 [환경]Windows 7 Windows Vista (SP2, SP1, SP 없음) Windows XP (SP3, SP2, SP1, ...  
252 freeware hex editor 엔신 60042   2013-01-22
http://mh-nexus.de/en/hxd/ http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm#download hxd는 메모리 에디터 기능도 있음  
251 Programming COleDateTime 클래스 엔신 52892   2009-11-23
---------------------------------------------------------------------------------------- COleDateTime now = COleDateTime::GetCurrentTime(); int a = now.GetMinute(); 현재 시각이 1:27분이라면 27 정수를 리턴한다. 60초 체크하기 dwTimeStart = ::G...  
250 시간 동기화(ntpdate) & 한국 시각으로 변경 엔신 52490   2012-10-17
sudo ntpdate ntp.postech.ac.kr 안될경우 sudo ntpdate -u ntp.postech.ac.kr 한국시각으로 변경 sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime  
249 [VBA] 파워포인트 그림 리사이즈, 위치 고정 엔신 52079   2013-02-21
해당 이미지 선택 후 함수 실행하면 리사이즈, 위치 이동 Sub first() ActiveWindow.Selection.ShapeRange.LockAspectRatio = msoFalse ActiveWindow.Selection.ShapeRange.Height = 193.3228 ActiveWindow.Selection.ShapeRange.Width = 337.8898 ActiveWindo...  
248 Linux 삭제 파일 복구하기 debugfs 엔신 51503   2008-02-23
아래에용은 kldp.org 에서도 발견할 수 있음 여기 수록된 내용은 woogi 라는 닉네임 사용자가 oops.org에 올린 내용 ---------------------------------------------------------------------- 리눅스에서의 파일 삭제는 신중을 기해야 한다. 왜냐면 삭제된 파...  
247 Windows 64비트 운영체제에서 아크로뱃 설치시 adobepdf.dll 파일이 없다고 할 때 [5] file 엔신 47472   2007-07-25
 
246 Linux configure: error: No curses/termcap library found 엔신 46461   2008-02-24
OS 를 fedora Core 6 에서 CentOS 5 로 바꿨더니 필요한 패키지가 없었다. configure 시 오류 메세지 checking for termcap functions library... configure: error: No curses/termcap library found 기본 ncurses가 깔려있어도 오류가 나서 devel버젼을 설치...  
245 RCE [MUP] UPX & Stolen Bytes [2] file 엔신 46328   2009-02-17
 
244 CCNA Frame-relay(프레임릴레이) multipoint 방식 풀메쉬 토플로지 구현 file 엔신 45825   2008-06-09
 
» Security SSH Port Forwarding(SSH Tunneling) [2] file 엔신 45817   2009-05-29
SSH를 사용하여 다른 사이트의 Port를 SSH를 거쳐서 지나갈 수 있게 포워딩할 수 있다. 아래 설명은 리눅스 기준으로 설명한 것이다. 윈도우에서 사용할려면 Cygwin의 ssh를 이용하거나 Putty, XShell, SecureCRT 같은 프로그램을 이용하여야 한다. 사용하여야...  
242 Windows VMware VMwareDnD 폴더 엔신 43566   2009-03-07
VMware를 사용하다보면 외부 PC와 VMware 안의 가상(내부) PC 사이에 서로 파일을 보내거나 전송해야 하는 경우가 발생한다. 이 때 한 쪽 PC를 Server로 하여 FTP나 HTTP를 통하여 파일을 전송하는 방법도 있고, 다른 인터넷 계정에 파일을 올리고 반대편 PC에...  
241 CCNA 서브넷팅 : 가장효율적으로 IP를 할당할수 있는 방법!!(VLSM) 엔신 42862   2008-05-12
본사, A, B가 있다. 넷트웍을 분할하려면 몇개로 해야할까? 3개? ㄴㄴ -> 2의 N승 개만 되기때문에 4개로 분할해야겠다. 호스트수가 본사 : 120, A: 60 B: 30 이다. 이럴경우는 본사에 맞춰서 넷트웍을 할당해야겠다. 128개가 필요하다. * 4를 해서. 512개가 ...