본문으로 바로가기

안녕하세요. 메타로그입니다.


 회사 업무가 많다는 핑계로 포스팅에 조금 소홀하여 오랜만에 블로그 포스팅을 작성합니다. 이번 포스팅에서는 SSH 터널링을 통해 방화벽을 우회하는 방법에 대하여 알아보려 합니다. 방화벽 때문에 업무하는데 불편한 사람들이 있다면 이 포스팅이 참고가 될 것 같네요.


 보안에 신경을 쓰는 회사라면 보통 방화벽이라는 보안장비가 존재합니다. 방화벽을 통해서 내부에서 외부 or 외부에서 내부로 들어오는 통신에 대해 허용하거나 차단하는 정책을 설정해놓습니다. 기타 다른 설정들도 있는데 전문가가 아니면 어려울 수 있으니 방화벽의 개념은 여기까지만 설명하겠습니다.


 이렇게 회사 네트워크에 방화벽이 있으면 외부에서 회사 사무실의 서버나 PC에 접속해야 할 일이 있을때 회사 내부 보안팀에서 방화벽 설정 요청을 해야하는데 승인을 안해주거나 요청 자체가 불가능한 환경일 경우가 많습니다. 물론 보안상 이유이기 때문이지만 업무 하는데에는 참으로 불편합니다. 이런 불편 때문에 SSH 터널링을 통한 우회까지 알아보게 됐습니다. ㅎㅎ

방화벽이란?

 보통 방화벽이라 함은 회사안에서 회사 밖으로(아웃바운드:outbound)의 통신이나 회사 밖에서 회사 안으로(인바운드:inbound) 로의 통신을 허용 or 차단 설정을 하는 장비를 말합니다. 쉽게 이해하기 위해서 회사에 방화벽이 존재 할 경우 집에서 회사 서버로의 접근을 간단한 그림으로 표현해봤습니다. 


 집에서 사용하는 컴퓨터로 인터넷을 거쳐 회사 방화벽을 통화하고 회사안에 있는 서버나 PC에 접근하는 통신을 표현한건데 방화벽에서 해당 접근 통신을 허용해놨다면 정상적으로 접근이 되고 차단해놨다면 접근이 불가능하겠죠? 

방화벽 허용 차단<그림1. 방화벽의 통신 허용 및 차단>


이런 허용과 차단을 우회하기 위해 사용하는 것이 SSH 터널링인데 SSH는 무엇이고 터널링은 무엇일까요?



SSH란?

SSH<그림2. SSH>


 SSH(Secure Shell)는 간단하게 설명하자면 네트워크 보안에 있어 대중적이고 강력한 접근 방식을 제공하기 위해 만들어진 프로토콜로 Secure Shell이라는 이름에서 알 수 있듯이 SSH는 보안을 염두에 두고 만들어졌으며 인증(Authentication), 암호화(Encryption), 무결성(Integrity), 압축(Compression) 등을 제공합니다. SSH는 Client to Server 방식으로 동작하는데 그냥 쉽게 생각해서 접속하는사람 = Client , 접속목적지 = Server라고 이해하면 쉽습니다.


터널링이란?

 SSH는 알았고.. 그럼 터널링이란 무엇일까요? 간단하게 네트워크 상에서 터널링이라 함은 Client PC-A와 Server PC-B 사이의 연결을 암호화 기능을 통해 외부에서 누군가가 볼수 없도록 하는 기능을 터널링이라고 하는데 실제 터널처럼 외부로부터 이 연결을 보호하기 때문에 터널링이라고 부릅니다.


SSH 터널링이란?

 그렇다면 이제 SSH 터널링이란 SSH가 제공하는 인증, 암호화, 무결성, 압축 기능을 통해 Client와 Server간 터널을 만드는 것을 SSH 터널링이라고 하는 거겠지요?  여기서 중요한 사실은 이렇게 SSH를 통해 만든 터널을 다른 애플리케이션이 이용할 수가 있다는 것인데 이런 기술을 포트포워딩이라 하는데 어려울 수 있으니 아래 위키백과를 통해 개념만 참고하시기 바랍니다.

SSH 터널링<그림3. SSH 터널링>



자 그럼 SSH 터널링까지 이해했으니 SSH 터널링을 통한 회사 방화벽을 우회하는 방법은 무엇인지 알아보도록 하겠습니다.


SSH 터널링으로 회사 방화벽 우회하는 방법

우회 시나리오

 위 그림1 처럼 집에서 회사 컴퓨터나 서버에 원격을 접속해야 하는 경우가 있을 수 있습니다. 하지만 원격제어라는 기능은 회사 입장에서는 외부에서 해커가 회사 내부 PC를 원격으로 제어하는 해킹의 우려가 있기에 보통 방화벽에서는 차단해놓고 팀뷰어와 같은 원격제어 프로그램도 차단해놓는 경우가 많습니다. 이렇게 방화벽에서 원격제어 기능을 차단했을 경우 SSH 터널링을 통해 우회하는 방법을 알아보겠습니다.


환경 구축하기

 보통 회사의 방화벽에서는 외부로 나가는 통신(=아웃바운드)에 대해서는 어느정도 열려있는 경우가 많은데 예를들어 네이버 접속과 같은 80, 443 포트는 허용해놓거나 SSH에 사용되는 22번 포트나 FTP에 사용되는 20, 21번 포트, DNS에 사용되는 53번 포트 등 알려진 포트(well-known port)들에 대해서는 어느정도 허용되어 있습니다. 이런 환경일 경우를 가정하여 SSH 터널링을 통한 방화벽을 우회하는 환경을 보다 이해하기 쉽게 그림으로 표현하면 아래와 같습니다.


 회사 밖에 SSH Server(IP : 35.231.78.x)를 구축하고 접속해야 하는 회사 내부의 PC나 서버(192.168.35.22)는 SSH Server와 SSH 터널링을 맺어 방화벽을 우회 해놓고 집(172.18.27.45)에서는 SSH Server의 공인 IP와 포트포워딩하는 포트(port 5800)로 접근하면 이미 회사 방화벽을 우회해 놓은 SSH 터널링을 통해 회사 PC나 서버로 원격접속(port 3389)을 하는 것입니다. 

 즉, 내PC(172.18.27.45)에서 SSH서버(35.231.78.x:5800) 로 원격 접근을 하면 SSH 서버에서 자동으로 터널링을 통과하여 회사 PC로 포트포워딩(192.168.35.22:3389)을 해주는 것입니다.


 이러한 환경을 구축하는데 필요한건 아래 3가지 설정이 필요합니다. 하나의 포스팅에 모든 내용을 작성하면 너무 길어질거 같아 포스팅을 나누었습니다. 아래 제 블로그의 포스팅 링크를 참고하시고 설정하시길 바랍니다.


1) 외부에 가상 서버 구축하기

- Google Cloud Platform에서 무료로 리눅스 서버 만들기

2018/04/21 - [유용한 정보] - 구글 클라우드 플랫폼에서 리눅스 서버 만들기


2) 가상서버에 SSH 서버 구축하기

- GCP(Google Cloud Platform)을 통한 리눅스 SSH서버 구축하기

2019/05/06 - [유용한 정보] - 우분투에서 SSH서버 구축하는 방법(GCP)


3) 회사 PC에 원격제어 설정 허용하기

- 윈도우10 PC에서 원격제어 설정 하는 방법

2019/05/06 - [유용한 정보] - 윈도우10 원격 데스크톱 연결 설정 방법


4) 회사 PC와 외부 SSH 서버 사이에 SSH 터널링 연결 후 포트포워딩 하기

- Bitvise SSH Client를 통한 SSH 터널링 및 포트포워딩 설정

2019/05/10 - [유용한 정보] - SSH 터널링 및 포트포워딩 설정(Bitvise)



접속 결과

 위 3가지 설정을 완료하고 난 후 집에 있는 내 PC에서 회사 내부에 있는 PC로 원격접속을 시도하면 아래와 같이 접속이 가능합니다.


1) 내 PC (172.18.27.45) 에서 회사 PC에 접근하기 위해 SSH Server IP(35.231.78.x)와 포트포워딩한 Port(5800)를 원격 데스크톱 연결을 통해 접속을 시도합니다.

원격 데스크톱 연결<내PC에서 원격접속>


2) 설정을 정확히 했다면 아래와 같이 회사 PC에 접근이 성공하여 로그인 팝업이 나타납니다.

원격 데스크톱 연결 성공<성공하면 로그인 팝업 나타남>


3) 로그인까지 정상적으로 하면 아래와 같이 회사 PC(192.168.35.22)로의 원격 데스크톱 접속이 성공한 것을 확인 할 수 있습니다.

원격 실행 화면<회사 PC로 원격접근 성공>


다음 SSH터널링으로 방화벽 우회하기 포스팅에서는 회사 방화벽에서 차단한 URL을 SSH 터널링을 통해 우회하는 방법에 대해 알아보도록 하겠습니다.


※ 해당 방법을 통해 회사 내부에 보안 문제가 발생 할 가능성이 있으니 가급적이면 회사의 보안정책을 준수하여 주시길 바랍니다.