익명 웹서버를 구동하는 목적

이것을 설명하기 위해서는 “왜 익명 네트워크가 필요한가?” 라는 이야기를 먼저 할 필요가 있다. 분명 우리가 살고있는 이 세상은 인종이나 경제력, 문화, 태어난 곳 등에 따른 차별이나 제한 없이 누구나 원하는 정보에 접근하고 원하는 말을 온라인 공간에 나눌 수 있어야만 한다. 그런데, “국민들에게 유해한 정보를 막는다.” 라는 이유로 정상적인 정보들을 필터링하고, 하고싶은 말을 하면 뒷보복을 두려워해야 하는 국가들이 아직도 전 세계에 많이 남아있다. 대한민국도 정도는 비교적 낮지만 이런 ‘인터넷 검열’ 국가 중 하나이고, 흔히 우리가 유머거리로 삼는 Warning 사이트도 그 검열의 흔적이다. 대표적으로 이런 국가적인 검열을 피하기 위해 익명 네트워크가 사용되지만, 물론 기업의 내부고발자가 익명성을 위해 사용하거나, 보안이 필요한 단체끼리 통신 목적으로 사용하는 등 사용처는 무궁무진하게 만들 수도 있다. 우리가 사용할 도구는 좋은 의미로도 나쁜 의미로도 유명한 Tor다. Tor의 Onion 네트워크 위에 완벽한 익명성을 꿈꾸는 사람들을 위한 웹서버를 구동해 보자. 접속하는 사람도 익명, 서버를 구동하는 우리도 물론 익명이다.

하드웨어 준비물

물론 소프트웨어적인 준비물은 아래의 과정에서 잘 설명하겠지만, 그걸 받아들일 수 있는 하드웨어 준비물은 미리 준비해 주시길 바란다. 제대로 서버를 계속 유지할 것이 아니라면 지금 사용하는 컴퓨터로도 충분하다. 필자는 저전력과 Unix 환경 모두 확보할 수 있는 라즈베리 파이 3를 기준으로 이 글을 작성하였다. Windows 환경도 기본적인 개념은 모두 같으나, 쉽게 따라할 수 있도록 Debian 기반 가상머신을 생성한 후 따라하는 것을 강력 추천한다.

혹시 정 Windows 환경을 고집하고 싶다면 이 글 을 참고하자. 다른 블로거분이 한국어로 잘 정리해 주셨다.

웹서버 구성요소 준비하기

이 포스트는 웹서버를 익명으로 굴리는 방법을 알려주는 포스트다. 익명으로 굴릴 웹서버 구성 요소들은 미리 만들어 주셔야 한다. 물론 아래의 과정을 밟고 만들어도 상관은 없으니 난 결과물을 먼저 뽑고 싶다! 하면 아래 과정 먼저 따라와도 된다. 테스트를 위해 “Hello World!”가 박힌 index.html 파일 정도만 준비하자. 서버는 어떤 소프트웨어를 사용하던 상관 없다. 필자는 이 글에서 Node.js를 사용하여 웹서버를 구동하도록 하겠다. 웹서버가 준비되었다면 가상머신 한곳에 모셔두면 된다.

설치하고 구동하기

아래 내용은 공식 메뉴얼을 참고해 작성되었다.

자, 서론이 길어졌다. 당장 터미널을 열고 sudo apt-get update 명령어로 패키지 리스트를 업데이트한 뒤, 아래 명령어를 입력하자.

sudo apt-get install Tor

설치는 정말 이 한 줄로 끝난다. 정말이다. 이제 설정만 조금 잡아주면 된다. 정상적으로 설치가 되었다면 /etc/tor/torrc 파일이 존재할 것인데, 좋아하는 텍스트 에디터로 열어 보자. 조금 내리다 보면 ############### This section is just for location-hidden services ### 안내가 보일 것인데, 잘 찾아 오셨다. 안내와 같이 여기서부터 우리가 찾던 익명 서버 관련 설정을 할 수 있다. 아마 아래와 같은 값이 보일 거이다.

#HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:8080

대충 감이 오지 않는가? 위 HiddenServiceDir은 익명으로 구동할 웹서버가 위치하는 경로, HiddenServicePort는 그 서버의 웹 포트이다. 주석(#)은 당연히 모두 지워주고 위에 웹서버가 위치하는 곳의 경로를 지정해준다. 아래는 그냥 놔두면 된다. Tor로 구동되는 서버는 localhost로 1차 구동되고 Onion 네트워크를 타고 외부로 나가는 것이라 저 설정이 맞다.

sudo service tor restart 명령어로 Tor를 재시작했을 때 아까 지정한 HiddenServiceDirhostname이나 private_key 파일이 생성되었다면 정상적으로 설정된 것이다. 사용자 권한으로는 안 보일 수 있으니 root로 확인하길 바란다. 만약 그렇지 않다면, /var/log/tor에 들어가 로그 파일을 살펴보자.

정상적으로 위 과정을 모두 마쳤다면, 이제 생성된 hostname 파일에 들어가보자. duskgytldkxiuqc6.onion와 같은 Onion 네트워크 도메인이 들어있을 것인데, 이게 앞으로 내 익명 웹서버의 접속 주소가 된다. 이제 웹 서버를 가동해자. 필자는 상기했듯 Node.js 기반으로 테스트 서버를 가동하니 HiddenServiceDir 경로에서 node app.js 명령어를 사용했다. 다른 종류의 CMS를 사용하는 경우 알아서 실행하시길 바란다.

반영까지 1분여 기다린 후, 다른 컴퓨터 (가상머신 밖)에서 Tor 브라우저로 위 주소에 접속해보자. 정상적으로 웹사이트가 출력되면 성공. 당신도 이제 익명 네트워크에 기여하는 훌륭한 기여자가 됬다.

일반 브라우저로 접속하기

Onion 주소는 Tor 브라우저로만 접속할 수 있다. 물론 Tor 유저들끼리는 별 문제가 없겠지만, 전세계 모든 인터넷 이용자들이 Tor를 사용하지는 않지 않는가. Tor2Web이라는 서비스가 이 문제를 해결해줄 수 있다. 내 Onion 도메인 (예시:duskgytldkxiuqc6.onion)의 끝 .onion 부분을 .onion.link로 바꿔주면 끝. duskgytldkxiuqc6.onion 주소는 Tor 브라우저 전용이지만, duskgytldkxiuqc6.onion.link 주소는 일반 웹 브라우저에서도 사용할 수 있다. 다만 접속자의 익명성 확보는 Tor를 사용하는 것보다 훨씬 어려우니 주의.