웹사이트 검색

SOCKS 터널을 사용하여 VPN 없이 웹 트래픽을 안전하게 라우팅하는 방법


저자는 Write for DOnations 프로그램을 선택했습니다.

소개

언젠가는 안전하지 않거나 지나치게 제한적인 방화벽이 있는 네트워크에 있는 자신을 발견할 수 있으며 아무도 트래픽을 감시하고 있지 않은지 확인하고 싶을 것입니다. 한 가지 해결책은 VPN을 사용하는 것이지만 많은 VPN은 컴퓨터에 설치 권한이 없는 특수 클라이언트 소프트웨어가 필요합니다. 그러나 보안에 필요한 것이 웹 브라우징뿐이라면 빠르고 무료이며 유용한 대안인 SOCKS 5 프록시 터널이 있습니다.

SOCKS 프록시는 구성된 애플리케이션이 트래픽을 아래로 전달한 다음 서버 측에서 프록시가 트래픽을 일반 인터넷으로 전달하는 SSH 암호화 터널입니다. VPN과 달리 SOCKS 프록시는 클라이언트 시스템에서 앱별로 구성해야 하지만 앱이 SOCKS 프록시를 사용할 수 있는 한 특수 클라이언트 소프트웨어 없이 앱을 설정할 수 있습니다. 서버 측에서는 SSH만 구성하면 됩니다.

이 튜토리얼에서는 Ubuntu 20.04를 실행하는 서버(SSH를 통해 액세스할 수 있는 모든 Linux 배포가 작동하지만)와 Firefox 웹 브라우저를 클라이언트 애플리케이션으로 사용합니다. 이 튜토리얼이 끝나면 암호화된 SSH 터널을 통해 웹 사이트를 안전하게 검색할 수 있습니다.

전제 조건

  • 여기로 이동하여 DigitalOcean Droplet에 터널을 건설하세요.
  • Firefox 웹 브라우저와 같은 SOCKS 프록시로 구성할 애플리케이션
  • Windows 사용자의 경우 PuTTY 도구 또는 Linux용 Windows 하위 시스템(WSL)도 필요합니다.

PuTTY는 Windows 사용자를 위한 프록시 터널을 설정하는 데 사용됩니다. macOS 또는 Linux 사용자에게는 미리 설치된 터널을 설정하는 도구가 있습니다.

1단계(macOS/Linux) - 터널 설정

이미 있는 Droplet을 생성하지 않은 경우 로컬 컴퓨터에서 SSH 키를 생성합니다. 키가 생성되면 SSH Droplet의 'authorized_keys' 파일에 공개 측이 추가되었는지 확인하세요. 그런 다음 터미널 애플리케이션을 열어 SOCKS 프록시가 활성화된 SSH 터널을 만듭니다.

다음 명령으로 터널을 설정합니다.

  1. ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

인수 설명

  • -i: 호스트에 연결하는 데 사용할 SSH 키의 경로
  • -D: 지정된 포트 번호에서 SOCKS 터널을 원한다고 SSH에 알립니다(102565536 사이의 숫자를 선택할 수 있음) )
  • -f: 프로세스를 백그라운드로 분기합니다.
  • -C: 데이터를 보내기 전에 압축
  • -q: 자동 모드 사용
  • -N: 터널이 가동되면 명령이 전송되지 않음을 SSH에 알립니다.

sammy@your_domainsudo 사용자 및 서버 IP 주소/도메인 이름으로 바꾸십시오.

명령을 입력하면 성공 또는 실패의 징후 없이 즉시 다시 명령 프롬프트로 이동합니다. 그것은 정상입니다.

다음 명령으로 터널이 실행 중인지 확인합니다.

  1. ps aux | grep ssh

출력에 다음과 같은 줄이 표시됩니다.

Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

터미널 응용 프로그램을 종료하면 터널이 그대로 유지됩니다. SSH 세션을 백그라운드로 전환하는 -f 인수를 사용했기 때문입니다.

참고: 터널을 종료하려면 ps를 통해 PID를 가져와야 합니다. 이 예에서 PID는 14345입니다. 그런 다음 kill 14345 명령을 사용합니다. 3단계에서 종료하는 방법을 살펴보겠습니다.

1단계(Windows) - 터널 설정

PuTTY를 엽니다.

아직 설치하지 않았다면 PuTTY를 다운로드하고 원하는 곳에 저장하세요. PuTTY를 설치하려면 관리자 권한이 필요하지 않습니다. .exe를 다운로드하고 실행하십시오.

터널을 설정하려면 다음 단계를 완료하십시오.

이제 PuTTY 창을 최소화할 수 있지만 닫지는 마십시오. SSH 연결이 열려 있어야 합니다.

참고: PuTTY SSH 키 지침에 따라 이 동일한 세션에 대한 sudo 사용자 이름(sammy) 및 SSH 키를 저장할 수 있습니다. 그러면 연결을 열 때마다 사용자 이름과 비밀번호를 입력할 필요가 없습니다.

2단계 - 터널을 사용하도록 Firefox 구성

이제 SSH 터널이 있으므로 해당 터널을 사용하도록 Firefox를 구성할 차례입니다. SOCKS 5 터널이 작동하려면 터널을 구현할 수 있는 로컬 애플리케이션을 사용해야 합니다. Firefox에는 다음과 같은 기능이 있습니다.

이 단계는 Windows, macOS 및 Linux에서 동일합니다.

SSH 명령에서 사용한 포트 번호가 있는지 확인하십시오. 예제에서는 1337을 사용했습니다.

(다음 단계는 Firefox 버전 80에서 수행되었지만 옵션 위치가 다를 수 있지만 다른 버전에서도 작동해야 합니다.)

파이어폭스를 엽니다.

  1. 오른쪽 상단에서 햄버거 아이콘을 클릭하여 Firefox 메뉴에 액세스합니다.
  2. 기본 설정 또는 옵션 메뉴 항목을 클릭합니다.
  3. 아래로 스크롤하고 네트워크 설정에서 설정… 버튼을 선택합니다.
  4. '인터넷에 대한 프록시 액세스 구성' 제목 아래에서 수동 프록시 구성을 선택합니다.
  5. SOCKS 호스트의 경우 localhost 또는 127.0.0.1를 입력하고 포트의 경우 사용자 지정 포트를 사용합니다. 터널에 지정된 1337.
  6. 하단에서 'SOCKS v5를 사용할 때 프록시 DNS' 확인란을 선택합니다.
  7. 확인 버튼을 클릭하여 구성을 저장하고 닫습니다

이제 Firefox에서 다른 탭을 열고 웹 탐색을 시작하십시오. SSH 터널을 통한 보안 브라우징을 위한 모든 설정이 완료되어야 합니다. 웹 사이트에서 받은 데이터는 암호화되어 있습니다. 또한 프록시 DNS 옵션을 선택했기 때문에 DNS 조회도 암호화되므로 ISP는 사용자가 본 내용이나 이를 얻기 위해 어디로 갔는지 알 수 없습니다.

프록시를 사용하고 있는지 확인하려면 Firefox의 네트워크 설정으로 돌아가서 다른 포트 번호를 입력하고 설정을 저장하십시오. 이제 웹을 탐색하려고 하면 '프록시 서버가 연결을 거부하고 있습니다'라는 오류 메시지가 표시됩니다. 이것은 Firefox가 기본 연결뿐만 아니라 프록시를 사용하고 있음을 증명합니다. 또는 ipecho.net과 같은 공용 IP 사이트로 이동할 수 있으며 반환되는 IP는 현재 프록시 역할을 하고 있으므로 SSH Droplet의 IP여야 합니다.

3단계 - Firefox에서 프록시 되돌리기

SSH 터널의 프라이버시가 필요하면 Firefox의 네트워크 프록시 설정으로 돌아갑니다. '시스템 프록시 설정 사용' 라디오 버튼을 클릭하고 확인을 클릭합니다. 이제 Firefox는 더 이상 SOCKS 터널을 사용하지 않으므로 해당 터널도 종료할 수 있습니다. Firefox에서 프록시를 마음대로 활성화 및 비활성화할 수 있도록 터널을 그대로 둘 수 있지만 터널을 너무 오랫동안 유휴 상태로 두면 자체적으로 닫힐 수 있습니다.

터널 폐쇄(macOS/Linux)

이전에 로컬 컴퓨터에서 만든 터널은 백그라운드로 전송되었으므로 터널을 여는 데 사용한 터미널 창을 닫아도 터널이 종료되지 않습니다. 터널을 종료하려면 ps 명령을 사용하여 프로세스 ID(PID)를 식별한 다음 kill 명령을 사용하여 프로세스를 종료해야 합니다.

머신에서 모든 활성 ssh 프로세스를 검색해 보겠습니다.

  1. ps aux |grep ssh

터널을 만들기 위해 이전에 입력한 명령처럼 보이는 줄을 찾습니다. 샘플 출력은 다음과 같습니다.

Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

행의 처음부터 처음 두 열 중 하나에 3-5자리 숫자가 있습니다. 이것이 PID입니다. 14345의 샘플 PID가 여기에서 강조 표시됩니다.

이제 PID가 무엇인지 알았으므로 kill 명령을 사용하여 터널을 중단할 수 있습니다. 프로세스를 종료할 때 PID를 사용하십시오.

  1. kill 14345

터널 폐쇄(Windows)

터널을 만드는 데 사용한 PuTTY 창을 닫습니다. 그게 다야.

4단계(macOS/Linux) - 반복 사용을 위한 바로가기 만들기

macOS 또는 Linux 시스템의 경우 별칭을 만들거나 스크립트를 만들어 신속하게 터널을 만들 수 있습니다. 다음은 터널 프로세스를 자동화하는 두 가지 방법입니다.

이러한 바로 가기 방법은 모두 서버에 대한 암호 없는/암호 없는 SSH 키 인증이 필요합니다.

클릭 가능한 BASH 스크립트

클릭했을 때 터널을 시작하는 아이콘을 원하는 경우 작은 BASH 스크립트를 만들어 작업을 수행할 수 있습니다. 스크립트는 터널을 설정한 다음 Firefox를 시작하지만 처음에는 Firefox에서 수동으로 프록시 설정을 추가해야 합니다.

macOS에서는 명령줄에서 시작할 수 있는 Firefox 바이너리가 Firefox.app 안에 있습니다. 앱이 Applications 폴더에 있다고 가정하면 바이너리는 /Applications/Firefox.app/Contents/MacOS/firefox에서 찾을 수 있습니다.

Linux 시스템에서 저장소를 통해 Firefox를 설치했거나 사전 설치된 경우 해당 위치는 /usr/bin/firefox여야 합니다. Firefox가 표준 위치에 있지 않은 경우 항상 which firefox 명령을 사용하여 시스템에서 Firefox가 있는 위치를 찾을 수 있습니다.

이 스크립트에서 Firefox 경로를 시스템에 적합한 경로로 바꿉니다. 이전에 터널을 세우기 위해 사용한 성공적인 명령을 반영하도록 SSH 라인을 조정해야 할 수도 있습니다.

nano와 같은 텍스트 편집기를 사용하여 새 파일을 만듭니다.

  1. nano ~/socks.sh

다음 줄을 추가합니다.

#!/bin/bash -e
ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@`your_domain`
/Applications/Firefox.app/Contents/MacOS/firefox &

  • 1337을 원하는 포트 번호로 바꿉니다(Firefox에 입력한 것과 일치해야 함).
  • sammy@your_domain을 SSH 사용자 @ 호스트 이름 또는 IP로 교체
  • /Applications/Firefox.app/Contents/MacOS/firefox를 시스템의 Firefox 바이너리 경로로 교체

스크립트를 저장하십시오. nano의 경우 CONTROL + o를 입력한 다음 종료하려면 CONTROL + x를 입력합니다.

스크립트를 실행 가능하게 만들어 두 번 클릭하면 실행됩니다. 명령줄에서 chmod 명령을 사용하여 실행 권한을 추가합니다.

  1. chmod +x /path/to/socks.sh

macOS에서는 .sh 파일이 편집기에서 열리지 않고 프로그램처럼 실행되어야 함을 macOS에 알리기 위해 추가 단계를 수행해야 할 수 있습니다. 이렇게 하려면 socks.sh 파일을 마우스 오른쪽 버튼으로 클릭하고 '정보 입수'를 선택합니다.

Terminal.app으로 변경합니다. Terminal.app이 목록에 없으면 '기타'를 선택한 다음 애플리케이션 > 유틸리티 > Terminal.app으로 이동합니다('권장 애플리케이션'에서 '사용' 풀다운 메뉴를 '모든 애플리케이션'으로 설정해야 할 수 있음).

지금 SOCKS 프록시를 열려면 socks.sh 파일을 두 번 클릭하십시오. 스크립트는 터미널 창을 열고 SSH 연결을 시작하고 Firefox를 시작합니다. 이 시점에서 터미널 창을 자유롭게 닫으십시오. Firefox에서 프록시 설정을 유지하는 한 보안 연결을 통해 브라우징을 시작할 수 있습니다.

이 스크립트는 프록시를 신속하게 설정하는 데 도움이 되지만 완료되면 ssh 프로세스를 찾아 종료하려면 위에 나열된 수동 단계를 수행해야 합니다.

명령줄 별칭

명령줄을 자주 사용하고 터널을 불러오려는 경우 작업을 수행할 명령줄 별칭을 만들 수 있습니다.

별칭 생성에서 가장 어려운 부분은 별칭 명령을 저장할 위치를 파악하는 것입니다.

다른 Linux 배포 및 macOS 릴리스는 다른 위치에 별칭을 저장합니다. 가장 좋은 방법은 다음 파일 중 하나를 찾고 alias를 검색하여 다른 별칭이 현재 저장되고 있는 위치를 확인하는 것입니다. 가능성은 다음과 같습니다.

  • ~/.bashrc
  • ~/.zshrc
  • ~/.bash_aliases
  • ~/.bash_profile
  • <리>~/.프로필\n

올바른 파일을 찾으면 아래 별칭을 이미 가지고 있거나 파일 끝에 추가하십시오. 아래 예에서는 'firesox'라는 별칭을 사용하여 SOCKS 터널을 불러오지만 원하는 단어를 별칭으로 사용할 수 있습니다.

alias firesox='ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain && /Applications/Firefox.app/Contents/MacOS/firefox &'

  • 1337을 원하는 포트 번호로 바꿉니다(Firefox에 입력한 것과 일치해야 함).
  • sammy@your_domain을 SSH 사용자 @ 호스트 이름 또는 IP로 교체
  • /Applications/Firefox.app/Contents/MacOS/firefox를 Firefox 바이너리 경로로 교체

별칭은 새 셸을 시작할 때만 로드되므로 터미널 세션을 닫고 새 셸을 시작하세요. 이제 입력할 때:

  1. firesox

이 별칭은 터널을 설정한 다음 Firefox를 시작하고 명령 프롬프트로 돌아갑니다. Firefox가 여전히 프록시를 사용하도록 설정되어 있는지 확인하십시오. 이제 안전하게 탐색할 수 있습니다.

5단계(선택 사항) - 문제 해결: 방화벽 통과

연결이 작동하는 경우 이동해도 좋으며 읽기를 중지할 수 있습니다. 그러나 제한적인 방화벽으로 인해 SSH 연결을 할 수 없는 경우 터널을 만드는 데 필요한 포트 22가 차단되었을 가능성이 있습니다. 프록시 서버의 SSH 설정을 제어할 수 있는 경우(DigitalOcean Droplet에 대한 루트 액세스 권한으로 이 작업을 수행할 수 있음) 22 이외의 포트에서 수신 대기하도록 SSH를 설정할 수 있습니다.

차단되지 않은 포트를 사용할 수 있습니까?

자주 열리는 포트에는 80(일반 웹 트래픽) 및 443(TLS, 보안 웹 트래픽)이 있습니다.

SSH 서버가 웹 콘텐츠를 제공하지 않는 경우 기본 포트 22 대신 이러한 웹 포트 중 하나를 사용하여 통신하도록 SSH에 지시할 수 있습니다. 443은 이 포트에서 암호화된 트래픽이 예상되고 SSH 트래픽이 암호화되기 때문에 최선의 선택입니다.

방화벽이 없는 위치에서 프록시에 사용 중인 DigitalOcean Droplet에 SSH로 연결하거나 Digital Ocean 제어판에서 내장 콘솔을 사용합니다.

서버의 SSH 설정을 편집합니다.

  1. sudo nano /etc/ssh/sshd_config

Port 22 행을 찾으십시오.

'22'를 완전히 바꾸거나 SSH가 수신할 두 번째 포트를 추가할 수 있습니다. SSH가 여러 포트에서 수신하도록 선택하므로 Port 22 아래에 Port 443이라는 새 줄을 추가합니다. 다음은 예입니다.

. . .

Port 22
Port 443

. . .

방금 편집한 SSH 구성을 다시 로드하도록 SSH를 다시 시작합니다. 배포판에 따라 SSH 서버 데몬의 이름이 다를 수 있지만 ssh 또는 sshd일 가능성이 높습니다. 하나가 작동하지 않으면 다른 것을 시도하십시오.

  1. sudo service ssh restart

새 SSH 포트가 작동하는지 확인하려면 새 셸을 열고(실수로 자신을 잠근 경우를 대비하여 아직 현재 셸을 닫지 마십시오) 새 포트를 사용하여 SSH를 시작합니다.

  1. ssh sammy@your_domain -p 443

성공하면 이제 두 셸에서 모두 로그아웃하고 새 포트를 사용하여 SSH 터널을 열 수 있습니다.

  1. ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain -p 443

Firefox 설정은 SSH 포트에 의존하지 않고 터널 포트(위의 1337)에만 의존하기 때문에 동일합니다.

결론

이 현대 시대에는 커피숍의 공용 Wi-Fi와 같이 잠재적으로 적대적인 네트워크에 있을 때 안전하게 검색할 수 있는 다양한 방법이 있습니다. 대부분의 상황에서 VPN을 사용하여 모든 트래픽을 보호하고 보호할 수 있다면 VPN 사용이 선호됩니다. 그러나 SOCKS 터널이 있으면 VPN을 사용하거나 신뢰할 수 없을 때 웹 브라우징 중에 필요한 보안을 제공합니다. SOCKS 터널은 급한 상황에서 빠르게 설정하고 사용할 수 있으며 사용자가 완전히 제어할 수 있습니다. 보안 브라우징을 위한 훌륭한 옵션입니다.