해킹과 보안 #1. 방화벽을 뚫고 나가는 가장 확실한 방법

최근에 중국에 다녀온 경험에 따르면, 장성 방화벽이 업데이트된 후로 웬만한 우회 수단을 죄다 차단하는 것을 알 수 있었다.

 

집에 VPN세팅까지 하는 강수를 두고 갔음에도 불구하고, 막상 중국에 도착해서 VPN 접근조차 되지 않아 굉장히 난감했다. 분명 한국에서 테스트할 때 잘 동작되었고, 무슨 수로 갓 새로 생성한 VPN까지 차단을 했을까 궁금한 생각마저 들었다. 그리고 어떻게든 이 거대한 방화벽을 뚫어야만 한다는 모종의 사명감과 다급함이 내 머릿속을 뒤흔들었다.

 

밤이 되고 컴퓨터 앞에 앉아 잠깐 고민을 해 보았다.

 

나의 개인 VPN 뿐 아니라 웬만한 무료/유료 VPN서비스들은 다 차단된 상태였고, 누군가에게 내 트래픽을 감시당하지 않으면서 자유롭게 통신할 수 있는 방법은 한가지 외엔 떠오르지 않았다.

 

그리고, 30분 정도의 삽질 후 드디어 PC와 안드로이드 폰에서 구글 서비스에 접근할 수 있었다.

당시 사용했던 방법을 소개해볼까 한다.

 

 

1. 서버 세팅

 

가장 중요한 것은, SSH 접근이 가능한 리눅스 서버가 있어야 한다는 점이다.

 

집에있는 컴퓨터와 공유기를 이용하면 간단하다고 보는데, 리눅스가 설치되어있지 않아도 VirtualBox 등을 사용하여 리눅스를 설치한 뒤 포트포워딩 설정을 하면 금방 세팅이 가능하다.

 

공유기에서도 포트포워딩 설정을 해 주고, iptime처럼 DDNS를 지원하는 공유기라면 외부에서의 접근이 더 용이하다.

 

리눅스 설치후 sshd를 설치하는 과정까지는 너무도 많은 가이드가 인터넷상에 존재하기 때문에 굳이 설명하지 않겠다.

 

중요한 키워드를 다시 정리해 주자면,

#리눅스 #SSH #공유기 #포트포워딩 #DDNS

 

혹여 집에 상시 켜둘 수 있는 컴퓨터가 없는 경우 호스팅서버를 사용해도 무방하나, 서버가 특정국가에 존재하는 경우 중국에서 IP로 차단해버리면 답도 없기 때문에 국내업체들 중에 잘 고르길 바란다.

 

 

2. 설치해 가야 할 프로그램

 

물론 가서 다운받아도 무방하나, 웬만하면 준비해 가야 고생을 덜 할 것이다.

PC의 경우에는 Firefox 브라우저와 Putty 프로그램이 필요하고,

안드로이드의 경우 Firefox브라우저와 ServerAuditor 앱이 필요하다.

 

원리적으로 이해하고 나면 타 플랫폼의 프로그램들로도 충분히 응용 가능하니 맥이나 아이폰 사용자라고 해서 포기하지 말기 바란다.

 

 

3. 작동 원리

 

장성 방화벽은 warning.or.kr보다 훨씬 더 다양한 루트를 차단한다.

 

warning.or.kr은 SKB나 KT, LGU+같은 ISP가 사용자들이 발생시키는 http트래픽의 헤더를 읽어들여 특정키워드를 추려내는 방식이지만, 장성은 그보다 더 많은 곳을 여러 관문을 통해 검열한다.

 

VPN까지 차단하는 것을 보면 뭐 말 다 했다.

 

그럼에도 불구하고 분명 헛점은 존재하는데, 이미 특정 서버로 연결된 SSH 커넥션 안쪽에서 터널링을 통해 암호화통신을 하면 트래픽의 출발지와 목적지를 모두 숨길 수가 있는 것이다.

 

물론 이 방식의 단점은, 클라이언트 프로그램이 이러한 방식을 적용할 수 있도록 socks 프록시와 remote DNS 를 제공해야 하고 이런 브라우저는 비교적 메이저한 브라우저 중에는 Firefox밖에 없다.

 

(참고로, utorrent도 socks프록시를 지원한다. 즉 웬만큼 강력한 토렌트 차단이 걸려있는 회사 네트워크에서도 이 방식을 응용하면 토렌트 사용에 지장이 없다.)

 

 

4. Firefox 세팅 (Window / Android 공통)

 

파이어폭스를 켜고 다음 주소를 입력한다.

about:config

 

설정 검색에 socks라고 치고 나오는 설정들의 값을 다음과 같이 바꾼다.

network.proxy.socks;127.0.0.1

network.proxy.socks_port;8080

network.proxy.socks_remote_dns;true

network.proxy.socks_version;5

 

이번에는 설정 검색에 proxy.type 이라고 입력한 뒤 역시 값을 바꾼다.

network.proxy.type;1

 

 

5. putty 설정

 

putty를 켠 뒤 접근하려는 호스트 정보를 입력한다.

다른 것은 일반적인 SSH 접속과 같이 설정하면 된다.

 

여기에 추가적으로 해 주어야 할 부분은 Connection - SSH - Tunnels 부분이다.

Source port : 8080

Destination : 127.0.0.1

Dynamic 체크

 

그리고 Add 버튼을 눌러주면 다이나믹 포트포워딩이 생성된다.

다시 Session메뉴로 돌아와 설정을 저장하도록 하자.

 

Open을 눌러 접속을 하고 서버 password를 입력하면 커넥션이 완료된다.

보기에는 일반적인 SSH연결과 똑같아 보이지만 이 커넥션이 지속되는 동안에는 다이나믹 포트포워딩이 구동된다.

 

이제 파이어폭스를 켜고 google.com을 입력해본다. 접속이 된다면 성공이다.

 

 

6. ServerAudotor 설정

 

안드로이드 단말에서는 이 앱이 최선이다. 여러가지 앱으로 시도해 봤지만 이 앱만큼 편한 것은 보질 못했다.

 

먼저 앱을 켜고 Hosts메뉴에서 접속하려는 호스트를 입력해 둔다.

역시 중요한 부분은 Port forwarding 메뉴다.

 

추가버튼을 누르고 edit화면이 뜨면 다음과 같이 설정한다.

Type : Dynamic

Host : 터널링을 위해 세팅해 둔 리눅스서버 호스트

Port : 8080

Adress : 127.0.0.1

 

저장을 하고 터치하면 세션 접근이 완료된다.

역시 파이어폭스에서 인터넷 접속을 확인해 본다.

 

중국의 인터넷 사용자들과 장성 방화벽의 전쟁은,

자신의 정당한 자유를 국가로부터 순순히 빼앗기지 않으려는 사람들과,

정부의 치부가 자국민들에게 들통나지 않기를 원하는 자들 간의 보이지 않는 전쟁이다.

 

언젠가는 깨어있는 중국인들이 장성 방화벽을 스스로 파괴하는 날이 오길 바란다.

(한국에 돌아와서도 쓰게 되는 이유는, 회사가 트래픽을 감시하는 것이 기분이 나빠서랄까..)

One thought on “해킹과 보안 #1. 방화벽을 뚫고 나가는 가장 확실한 방법

Leave a Reply

Your email address will not be published. Required fields are marked *