웹에서 발자취를 안전하게 보호하는 것에 관해 이야기할 때, 아마 들어보셨을 것입니다. 바로 VPN에 대해서 말이죠. VPN은 컴퓨터와 인터넷 사이에서 중개자 역할을 합니다. 모든 트래픽은 VPN 서버를 통과하므로, IP 주소와 위치를 효과적으로 숨길 수 있습니다.
하지만 VPN이 유일한 형태의 프록시 서버는 아닙니다. SOCKS(Socket Secure)는 클라이언트를 대신하여 네트워크 트래픽을 라우팅함으로써 방화벽을 통해 서버와 통신할 수 있도록 하는 유사한 네트워크 프로토콜입니다. VPN과 비교했을 때, SOCKS는 네트워크 구성에 대해 더 많은 유연성과 제어력을 제공합니다. VPN 클라이언트를 설치할 수 없거나 VPN 제공업체를 신뢰할 수 없을 때 유용합니다.
이 가이드에서는 SSH SOCKS 5 프록시 터널을 구축하고 이 터널을 통해 웹 트래픽을 라우팅하는 방법을 보여줍니다.
사전 요구 사항
데모를 위해 Ubuntu 데스크톱을 실행하는 로컬 머신과 Ubuntu 서버를 실행하는 원격 머신을 사용했습니다. 원활하게 작동하려면 먼저 SSH가 구성되어 있어야 합니다. SOCKS 프록시를 사용하므로, 연결을 테스트하려면 이를 사용할 수 있는 앱이 필요합니다. Firefox가 완벽한 예입니다. 이는 SOCKS 5 프록시 터널을 지원하는 최신 웹 브라우저입니다.
Windows를 사용하는 경우, WSL (Windows Subsystem for Linux)을 사용하여 로컬 Linux 환경을 설정하거나, PuTTY를 사용할 수 있습니다. 이는 Telnet, rlogin 등 다양한 네트워크 프로토콜을 구현할 수 있는 오픈 소스 앱입니다.
SOCKS 터널 구성하기
-
SOCKS 터널 설정하기 (macOS/Linux)
로컬 컴퓨터에서 안전한 연결을 보장하기 위해 SSH 키를 구성해야 합니다. SSH 키는 원격 시스템에도 등록되어 있어야 합니다. SSH 키 기반 인증 구성에 관한 이 가이드에서 해당 과정을 자세히 설명합니다.
다음 SSH 명령은 원격 서버에 대한 SOCKS 터널을 구축합니다:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> |

명령어를 세부적으로 분석해 보겠습니다:
-
-i: 연결에 사용할 SSH 키를 SSH에 알려줍니다.
-
-D: SOCKS 터널을 구축하고자 함을 SSH에 알려줍니다. 포트의 경우, 다음 포트를 사용하고 있습니다. 1024. 고정된 값은 아닙니다. 다음 사이의 포트를 자유롭게 선택할 수 있습니다. 1024 및 65536.
-
-f: SSH 프로세스가 백그라운드에서 실행(fork)됩니다.
-
-C: SSH가 원격 서버로 데이터를 보내기 전에 압축합니다. 이는 데이터 소비를 줄이고 유효 대역폭을 늘릴 수 있습니다.
-
-q: 도구를 자동(quiet) 모드로 실행합니다.
-
-N: 터널을 구축한 후 어떠한 명령도 전송하지 않음을 SSH에 알려줍니다.
실행한 후, 프로세스가 제대로 시작되었는지 확인할 수 있습니다. 다음 명령은 실행 중인 모든 SSH 프로세스에 대한 정보를 출력합니다:
|
1 |
ps aux | grep ssh |

이제 터미널 창을 안전하게 닫아도 됩니다. SSH 프로세스는 백그라운드에서 의도한 대로 작동합니다.
-
SOCKS 터널 설정하기 (Windows)
Windows 사용자의 경우 PuTTY를 사용하는 것이 더 쉬운 해결책입니다. 먼저, PuTTY를 다운로드:

해야 합니다. 설치가 완료되면 PuTTY를 실행합니다:

왼쪽 패널의 Session 탭에서 서버의 Host Name (or IP address)를 입력합니다. Connection type의 경우, SSH를 선택합니다. 다음으로, Connection >> SSH >> Tunnels로 이동합니다. 여기서 Destination 필드 아래에서 스크린샷에 표시된 옵션을 선택합니다:

다음으로, Open을 클릭합니다. SSH를 통해 원격 서버에 연결하기 위한 터미널 창이 나타납니다. 원격 서버에 로그인합니다:

SOCKS 터널 적용하기
이제 터널이 설정되었습니다. SOCKS를 지원하는 모든 앱에서 이 터널을 사용할 수 있습니다. 데모를 보여주기에 Firefox가 아주 좋은 예입니다.
먼저 Firefox를 엽니다. 우측 상단 모서리에서 메뉴 아이콘을 클릭합니다. 설정:

으로 이동한 다음, 프록시를 검색합니다. 설정 항목에서 Firefox의 인터넷 연결 방식 설정:

을 클릭합니다. 그 후, 수동 프록시 설정을 선택합니다. SOCKS 호스트에는 localhost 또는 127.0.0.1를 사용합니다. 그런 다음 포트에는 SOCKS 터널용으로 지정한 포트를 입력합니다. 잊지 말고 선택해야 할 것은 SOCKS_v5:

입니다. 마지막으로 SOCKS v5 사용할 때 DNS 프록시 켜기 옵션을 체크합니다. 확인을 클릭하여 계속합니다.
다음으로, 새 탭을 열고 아무 웹페이지나 접속해 보세요. 예를 들어, CheckMyIP.
프록시 되돌리기
더 이상 SSH 터널에 대한 프록시 연결이 필요하지 않은 경우, Firefox 프록시 설정에서 안전하게 비활성화할 수 있습니다:

창에서 다음을 선택합니다: 시스템 프록시 설정 사용 그리고 다음을 클릭합니다: 확인.
SOCKS 터널 닫기
-
macOS/Linux에서 터널 닫기
터널을 닫으려면 SSH 프로세스를 수동으로 종료해야 합니다. SSH 프로세스의 PID(프로세스 ID)가 필요합니다. 다음 명령은 실행 중인 모든 SSH 프로세스의 PID를 보여줍니다:
|
1 |
ps aux | grep ssh |
터널을 생성하는 명령으로 실행 중인 SSH 프로세스를 확인합니다. 해당 프로세스를 종료합니다:
|
1 |
kill <tunnel_ssh_pid> |
옵션이 정의되지 않은 경우, kill 명령은 대상 프로세스에 일반적인 SIGTERM 신호를 보냅니다. 다음 튜토리얼에서 리눅스 프로세스 관리에 대해 자세히 알아볼 수 있습니다.
-
Windows에서 터널 닫기
PuTTY 창을 닫으면 터널 연결이 종료됩니다.
문제 해결
SOCKS를 사용하여 트래픽을 라우팅할 때 발생할 수 있는 몇 가지 일반적인 문제입니다.
-
방화벽
방화벽 제한으로 인해 연결을 설정할 수 없는 경우, 방화벽이 다음 포트에 대한 연결을 차단하도록 구성되었을 가능성이 높습니다: 22. 이 포트는 SSH가 원격 시스템에 연결하는 데 사용하는 기본 포트입니다. 일부 포트는 기본적으로 열려 있습니다. 예를 들어, 포트 80 (일반 웹 트래픽) 및 포트 443 (TLS, 보안 웹 트래픽) 등이 있습니다.
SSH 서버가 웹 콘텐츠를 제공하지 않는 경우, 기본 포트 중 하나인 ( 80 또는 443 )를 포트 22 대신 사용할 수 있습니다. 권장되는 포트는 443 입니다. 이 포트는 기본적으로 암호화된 트래픽을 예상하기 때문입니다. 또한 나가는 트래픽도 암호화합니다. 변경하려면 SSH 구성 파일을 수정해야 합니다. 텍스트 편집기에서 파일을 엽니다:
|
1 |
sudo nano /etc/ssh/sshd_config |
SSH는 목적에 따라 여러 포트를 사용할 수 있습니다. 구성 파일을 아래로 스크롤하여 포트 섹션을 찾습니다:

변경이 완료되면 파일을 저장하고 편집기를 닫습니다. 변경 사항을 적용하려면 SSH 서비스를 재시작합니다:
|
1 |
sudo service ssh restart |
새 포트가 작동하는지 확인하려면 새 포트를 사용하여 원격 서버에 연결해 보십시오:
|
1 |
ssh <remote_username>@<remote_server> -p 443 |
연결에 성공하면 포트 443 를 SSH 터널링에 안전하게 사용할 수 있습니다. SOCKS 터널을 설정하기 위한 수정된 명령은 다음과 같습니다:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> -p 443 |
여기서 플래그 -p 는 SSH에 다음 포트를 사용하도록 지시합니다: 443.
마치며
오늘날 개인 정보 보호와 보안은 가장 큰 관심사 중 일부입니다. 신뢰할 수 없는 네트워크에 있을 때 안전하게 브라우징할 수 있는 방법은 많습니다. 대부분의 경우 VPN을 사용하면 네트워크 트래픽에 충분한 보안을 제공할 수 있습니다. 반면에 VPN을 사용할 수 없거나 신뢰하지 않는 경우 SOCKS 터널이 필요한 보안을 제공합니다. 또한 SOCKS 터널을 사용하면 설정을 완전히 제어할 수 있습니다.
즐거운 컴퓨팅 되세요!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.