Obfsproxy를 활용한 OpenVPN 트래픽 숨기기

들어가기전에

중국 정부의 소위 만리장성 방화벽 (The Great Firewall of China)은 VPN 역시도 차단하고 있다. VPN의 트래픽 같은 경우 암호화되기 때문에 그 안의 내용을 들여다 볼 수는 없지만 Deep Packet Inspection과 같은 기술을 적용시키면  암호화된 패킷을 탐지해 낼 수 있다고 한다. 그러한 방식으로 OpenVPN의 SSL 암호화도 탐지가 가능하며 따라서 차단 역시 가능해진다. 이러한 탐지를 피하기 위해 많은 방법들이 존재하는데 그 중 간단하게 적용시켜 볼 수있는 몇가지를 소개한다.

1. TCP 443번 포트 사용하기

가장 간단한 방법으로도 볼 수 있는 이 방법은 OpenVPN 포트를 TCP 443번으로 바꾸어주는 방법이다. TCP 443번 포트 같은 경우 HTTPS(Hypertext Transfer Protocol Secure)가 사용하는 포트로 HTTPS 역시 OpenVPN과 마찬가지로 SSL 암호화를 사용하기 때문에 탐지해내기가 무척 까다롭다. 그렇다고해서 TCP 443번 포트를 차단하게 되면 인터넷 사용에 막대한 지장을 줄 우려가 있기 때문에 포트 자체를 차단할 수도 없다. 다만, OpenVPN의 SSL 암호화는 표준형이 아니기 때문에 진보된 Deep Packet Inspection 기술을 적용할 경우 탐지가 가능하다. 따라서 이런 경우엔 다른 방법이 필요하다.

2. Obfsproxy 사용하기

Obfsproxy의 경우 Tor 네트워크에 적용되어 있는 기술로 데이터를 obfuscation 레이어로 감싸주는 툴로 개발되었다. Tor 역시도 최근 많이 쓰이고 있는 추세인데 중국 당국에서도 차단 중에 있다. Obfsproxy의 경우 OpenVPN에서도 적용가능하기 때문에 OpenVPN에 Obfsproxy까지 사용하면 중국의 만리장성 방화벽도 피해갈 수 있다. 다만 obfs2 같은 경우는 이미 중국에서도 차단 가능한 것 같고 obfs3는 아직까지 사용가능 한 것 같다. 이 방법의 경우 Obfsproxy를 서버와 클라이언트 양 쪽 모두에 설치해줘야하고 또한 활성화 시켜주어야 하기 때문에 약간 번거로운 측면이 있다. 그리고 아래에 소개할 터널링 방식에 비해 보안에서도 상대적으로 취약하다. 트래픽을 암호화해서 감싸주진 않기 때문이다. 하지만 덕분에 아래 방식들에 비해서는 상대적으로 더 적은 대역폭을 필요로 하기 때문에 대역폭이 제한적일 경우엔 효과적인 방식일 수 있다.

3. SSL 터널을 통한 OpenVPN

SSL 터널을 이용하면 OpenVPN 트래픽을 완벽히 감출 수 있다. 위에서 언급했듯이 OpenVPN의 SSL 암호화는 표준형이 아니므로 진보된 DPI 기술로는 탐지가 가능하다. 하지만 암호화된 SSL 레이어로 이 트래픽을 추가적으로 감싸주게 되면 그 안의 OpenVPN은 완벽히 숨겨지게 된다. SSL 터널은 일반적으로 멀티 플랫폼 stunnel 소프트웨어를 사용한다. 이 방식 역시 서버와 클라이언트에 모두에서 설정이 필요한 방식이다.

4.SSH 터널을 통한 OpenVPN

SSL 터널과 기본적으로 유사한 방식이라고 보면된다. 다만 SSH 암호화 레이어로 OpenVPN 트래픽을 감싼다는 것만 다를 뿐이다. SSH는 일반적으로 유닉스 쉘 계정을 위한 것이기 때문에 통용되는 방식은 아니지만 개인이 운영하는 서버의 경우 아무런 문제가 되지 않기 때문에 SSL에 비해 쉽게 구축이 가능하다. PuTTY를 이용해서도 쉽게 구축 가능하며 구축 방법은 이 페이지를 참조.

1. Obfsproxy 서버측 설정

일단 기본적으로 OpenVPN이 설치되어 있는 상황을 가정하고 진행한다. OpenVPN 서버 구축 방법은 이 페이지 참조. Obfsproxy의 경우 TCP 포트를 이용하기 때문에 OpenVPN 설정에도 약간의 수정이 필요하다.

vi /etc/openvpn/server.conf

를 하여 서버 설정 파일을 연다. 그리고 아래와 같이 바꿔준다.

# Which TCP/UDP port should OpenVPN listen on?
# If you want to run multiple OpenVPN instances
# on the same machine, use a different port
# number for each one. You will need to
# open up this port on your firewall.
port 21194

# TCP or UDP server?
proto tcp
;proto udp

그리고 저장 후 종료한다.

C:\Program Files\OpenVPN\config

에 들어가서 client.ovpn 파일을 바탕화면으로 이동 시킨 후 연다.

# TCP or UDP server?
proto tcp
;proto udp

remote 자신의 서버주소 443

socks-proxy 127.0.0.1 10194
socks-proxy-retry

그리고 위와 같이 수정한다. 마지막 빨간 두줄은 없을 것이므로 추가해준다. 그리고 저장 후 다시 파일을 원위치로 옮겨준다.

PuTTY로 서버에 접속한다.

apt-get update
apt-get install python2.7 python-pip python-dev build-essential libgmp-dev
pip install obfsproxy

위 명령어들을 차례대로 입력하여 obfsproxy를 설치한다.

ip route | grep default

를 입력하여 공용 네트워크 인터페이스 확인 후 아래 명령어 빨간 부분을 거기에 맞춰 수정한다.

iptables -A INPUT -i venet0 -p tcp -m tcp --dport 21194 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables-save > /etc/iptables.up.rules

그리고 위의 명령어들을 실행하여 tcp 443 포트와 21194 포트를 열어준다.

/etc/init.d/openvpn restart

이로써 서버 설정은 완료되었다.

 

2. Obfsproxy 윈도우 클라이언트 설정

  1. 여기 에서 윈도우용 python 2.7.x 버전을 다운받아 설치한다.
  2. 여기 에서 Microsoft Visual C++ Compiler for Python 2.7를 다운받아 설치한다.
  3. 여기 에서 자신의 윈도우 bit에 맞추어 Win32 OpenSSL v1.0.2h Light 혹은 Win64 OpenSSL v1.0.2h Light를 다운받아 설치한다.

윈도우 키를 누르고 검색창에 cmd를 입력한 후 명령 프롬프트를 오른쪽 클릭하여 관리자 권한으로 실행한다.

cd C:\Python27\Scripts
pip install --upgrade pip
pip install obfsproxy

위와 같이 입력한다. 이로써 윈도우 설정이 완료되었다.

3. Obfsproxy 실행

서버측 실행

obfsproxy --log-file=obfsproxy.log --log-min-severity=info obfs3 --dest=127.0.0.1:21194 server 자신의 서버주소:443 &

클라이언트(윈도우) 측 실행

윈도우 키를 누른 후 cmd를 입력하고 명령 프롬프트 오른쪽 클릭 후 관리자 권한으로 실행

cd C:\Python27\Scripts
obfsproxy.exe --log-file=obfsproxy.log --log-min-severity=info obfs3 socks 127.0.0.1:10194

명령 프롬프트 창을 종료하게 되면 클라이언트 측 obfsproxy도 중단되기 때문에 vpn을 쓰는동안은 계속 실행된 상태여야 한다.

이제 OpenVPN을 연결하면 된다.

 

참조 사이트

https://www.bestvpn.com/blog/5919/how-to-hide-openvpn-traffic-an-introduction/

https://deekayen.net/debian-vpn-server-configuration

https://nordvpn.com/tutorials/obfsproxy/windows/

https://www.comparitech.com/blog/vpn-privacy/hide-openvpn-traffic-obfsproxy-on-windows-and-linux-ec2/

 

댓글 남기기