SSH를 사용한 터널링, Socks5 프락시 서버 만드는 방법
Apr 23, 2017
윈도에서는 SecureCRT, Putty를 사용해서 터널링 기능을 사용했고, OSX, 리눅스에서는 기본적으로 ssh가 있어서 ssh로 터널링 기능을 가끔 사용했다.
작업하는 플랫폼에 따라서 통일되지 않아서 윈도에서 Cygwin을 설치해서 ssh를 사용하기로 했다. 즉, 터널링 기능은 ssh를 통해서만 하기로 했다.
이제 ssh를 사용한 터널링에 대해서 알아보겠다.
SOCKS5 프락시 만들기
한 서버에 접속하고, SOCKS5로 1080 포트를 여는 예제이다. 웹브라우저에서도 이 포트를 통해 웹브라우징이 가능하다.
ssh -D 1080 -f -C -q -N user_id@server_address
프락시 서버를 통해 제3의 서버 접속
위에서 만든 프락시를 사용해서 또 다른 서버로 접속하는 방법이다.
ssh -o "ProxyCommand nc -X 5 -x localhost:1080 %h %p" user_id@server_address
PC, A 서버, B 서버가 있다고 가정한다. PC에서 B 서버로 직접 접속이 막혀있을 때, A 서버를 프락시로 만들어 위의 커맨드로 PC에서 B 서버로 접속이 가능한 것이다.
포트 포워딩
Local 포트 포워딩
외부로 공개되지 않은 포트에 접속하는 방법이다.
다음은 GUI 도구에서 서버의 MySQL에 접속할 때 사용하는 예제다.
ssh -L localhost:3306:localhost:3306 user_id@server_address
중계 서버를 통해 다른 서버의 포트를 포워딩할 수도 있다.
ssh -L localhost:3306:another_server_address:3306 user_id@server_address
Remote 포트 포워딩
PC에 있는 포트를 원격 포트에서 사용할 때 사용하는 방법이다.
다음은 원격 서버에서 PC에 있는 MySQL에 접근하기 위한 명령이다.
# 리모트 포워딩
ssh -R 127.0.0.1:3306:127.0.0.1:3306 user_id@server_address
SSH 설정 파일 사용하기
위에서 설명한 명령을 매번 입력하기 어렵기 때문에 자주 사용하는 경우는 설정 파일을 사용하는 것이 좋다.
설정 파일 도움말:
man ssh_config
다음과 같이 설정할 수 있다.
Host Socks5Example
HostName server_address
Port 22
user user_id
DynamicForward 1080
Host ProxyExample
HostName server_address
Port 22
User user_id
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
Host LocalForwardExample
HostName server_address
Port 22
User user_id
LocalForward 127.0.0.1:3306 127.0.0.1:3306
Host RemoteForwardExample
HostName server_address
Port 22
User user_id
RemoteForward 127.0.0.1:3306 127.0.0.1:3306