SSH는 SSL/TLS 프로토콜을 사용해 전송구간의 암호화를 구현함으로써 서버 운영자가 서버 운영체제에 안전하게 접속할 수 있는 방안을 제공해준다. 그리고 집, 회사 등에서 커뮤니티나 SNS 등에 글을 남기거나 댓글을 작성할 때 IP를 노출하지 않기 위해 사용하는 SSL-VPN 대신 사용하면 웹 브라우저의 클라이언트IP를 숨기는 용도로도 사용할 수 있다.
반면 SSH는 업무용 PC에서 인터넷이 차단되거나 모니터링 되는 환경에서 인터넷 접속이 가능한 서버를 통해 비업무 사이트나 유해사이트에 우회 접속하거나 중요한 정보를 외부로 유출할 수 있는 수단으로 악용될 수도 있다.
이러한 것들을 가능하게 해주는 기능은 바로 SSH 터널링과 웹 브라우저의 Proxy(프록시) 기능이다.
SSH 서버에서 터널링(Tunneling) 설정
IT전공자이거나 컴퓨터에 관심이 많아 리눅스 서버를 사용할 줄 아는 사람들이라면 대부분 사용하고 있는 SSH는 SSH 클라이언트와 SSH 서버 사이에 암호화된 터널을 생성해 운영체제 명령어를 실행할 수 있는 Shell 접속 용도 이외의 다른 프로그램들이 터널을 사용해 서버가 있는 네트워크의 다른 장비들과 통신할 수 있게 해주는 기능을 제공한다. 이 기능을 SSH 터널링 이라고 부른다.
SSH 서버는 기본적으로 이 SSH 터널링을 SSH 클라이언트와 SSH 서버 간 통신에만 사용하도록 되어 있지만 SSH 서버의 두 옵션만 변경해주면 다른 프로그램, 예를 들면 클라이언트에서 실행되는 웹 브라우저 등이 사용할 수 있도록 할 수 있다.
리눅스 서버에는 SSH 서버 설정을 위해 다음의 파일이 있다.
/etc/ssh/sshd_config
이 파일은 root 계정의 권한에서만 수정할 수 있는데 다음의 두 옵션을 찾아 yes로 아래와 같이 변경해준 다음 ssh 대몬을 재실행하면 된다.
AllowTcpForwarding yes
GatewayPorts yes
그런 다음 다음 명령으로 ssh 대몬을 재실행한다.
$ sudo systemctl restart ssh
SSH 서버를 재실행하는 명령과 서비스 이름은 운영체제에 따라 조금씩 다르다. 위 명령은 Ubuntu 24.04 에서 실행 가능한 명령이다.
SSH 클라이언트 (XSHELL)에서 SSH 터널 설정
필자는 소속이 없는 자유인이기에 개인적인 테스트를 위해 XSHELL을 사용해 서버에 접속하곤 한다. 그래서 XSHELL을 기준으로 설명하지만 putty를 사용해도 메뉴만 잘 찾아가면 설정 내용은 동일하다.
XSHELL에서 SSH 터널을 연결할 리눅스 서버의 연결 등록정보를 보면 다음과 같디.

이 리눅스 서버는 미국 산호세 리전에 있는 리눅스 서버다. IP가 159로 시작하는 미국 IP다. 연결정보는 일반적인 SSH 접속과 동일하게 설정해주면 된다. 다만 SSH 메뉴에 보이는 “터널링” 이라는 메뉴에서 추가적으로 터널 구성 정보를 등록해주어야 한다.

터널링 메뉴에 보면 TCP/IP 포워딩 메뉴가 있고 Dynamic / 9999 로 설정된 포워딩 설정이 보인다. 바로 이 설정이 SSH 클라이언트와 SSH 서버가 SSH 세션에 생성하는 터널로 다른 프로그램들이 진입할 수 있는 포워딩 포트다.
앞 화면과 같이 포워딩 포트를 등록하기 위해서는 “추가” 버튼을 누르면 표시되는 화면에 다음과 같이 정보를 입력해주면 된다.

종류(방향)은 모두 세 가지가 있는데 이 포스트에서 설명하는 웹 프록시는 Dynamic, Sock 4/5를 선택하면 된다. 이유는 SSH 클라이언트 PC에서 다수의 웹서버(다른 IP)에 접속할 수 있도록 하기 위해서는 Dynamic Port Forwarding을 사용해야 하기 때문이라고 생각하면 된다. 여기서는 종류와 수신 대기 포트만 지정하면 된다. 이 포트를 입력하면 다음에서 이 포트가 PC에서 열려있는 것을 확인할 수 있다. 여기서는 9999 포트를 지정했다.
그런 다음 생성한 SSH 접속정보를 통해 ssh 접속을 한다.

미국 산호세에 있는 IP 주소가 125로 시작하는 리눅스 서버임을 알 수 있고 SSH 접속이 되었다. 그러면 다음과 같이 PC에서 터널의 포트포워딩 설정에서 지정한 포트가 LISTEN하고 있음을 확인할 수 있다.

TCP 9999가 오픈되어 있고 LISTENING 상태임을 알 수 있다.
다음 단계로 웹 브라우저가 이 TCP/9999 포트로 웹 트래픽을 주고 받을 수 있도록 Proxy 설정을 해줘야 한다.
웹 브라우저의 Proxy 설정
필자가 알고 있는 모든 웹 브라우저는 Proxy를 지원한다. 하지만 필요할 때 프록시를 사용했다~ 필요없으면 프록시를 사용하지 않도록 설정하는 것이 꽤 번거롭다. 그래서 대부분의 사람들은 웹 브라우저의 플러그인을 설치해 툴바에서 쉽게 프록시를 On/Off 한다.
크롬 브라우저의 경우 확장 프로그램을 설치하면된다. 다음과 같이 크롬 웹 스토어로 진입한다.

다음과 같이 FoxyProxy를 검색한다.

FoxyProxy를 설치한 다음 확장앱 관리자로 간다.

설치된 확장앱 관리자에서 FoxyProxy를 클릭하고 “툴바에고정” 옵션을 활성화해준다. 시크릿모드에서도 사용하고자 한다면 아래의 “시크릿 모드에서 적용”을 켜주면 된다.
다음 부터는 크롬 브라우저의 툴바에 FoxyProxy 아이콘이 항상 활성화되어 보인다. 이 FoxyProxy 아이콘을 클릭하면 표시되는 화면에서 “Options” 버튼을 누른다.

이후 표시되는 화면에서 “Proxies” 메뉴로 이동한 다음 다음과 같이 Proxy를 추가해준다. Title을 적당히 입력하고 Hostname에는 127.0.0.1을 입력하고 Type은 SOCKS5를, Port는 앞에서 SSH 클라이언트(XSHELL)에서 터널 포트포워딩 포트로 입력했던 포트번호인 9999를 입력한다. 그런 다음 Save를 입력해야 한다.

첫 프록시 서버 정보를 입력하고 난 다음 툴바의 FoxyProxy 툴바 아이콘을 클릭하면 다음과 같이 등록한 프록시가 보인다.

앞에서 Proxy 이름으로 지정했던 “US Proxy”가 보인다. 이 “US Proxy”를 누른다. 그러면 툴바의 아이콘이 Proxy가 선택되었음을 표시해준다.
이후 웹 서핑을 하면 FoxyProxy에서 지정된 로컬호스트(localhost, 127.0.0.1)의 Proxy를 통해 SSH 연결상태의 터널을 경유해 미국 산호세에 있는 리눅스 서버를 지나 인터넷으로 접속하게 된다.
다음과 같이 IP를 확인해보면 미국 산호세에 있는 리눅스 서버에 할당된 공인IP로 식별되는 것을 볼 수 있다.

그런데 동일한 리눅스 서버에 WireGuard VPN을 설치해서 사용할 때 보다 체감 상 속도가 더 잘 나오는 것 같다.
답글 남기기