Tor onion 서비스를 사용하면 양쪽 모두 상대방의 IP 주소를 알지 못한 채 Tor 네트워크를 통해 사이트에 접속할 수 있습니다. 서버가 Tor로 바깥쪽 연결을 맺으므로 열어 둘 인바운드 포트가 전혀 필요 없습니다. 이 가이드는 Ubuntu VPS에서 Nginx로 작은 사이트를 서비스하며 onion 서비스를 설정합니다.
onion 서비스가 제공하는 것
- 키에서 파생된
.onion주소로, 자체 인증이 되므로 인증 기관이 필요 없습니다. - Tor 내부에서 방문자와 서버 사이의 종단 간 암호화.
- 방문자에게 서버의 공개 IP 주소를 노출할 필요가 없습니다.
사이트의 콘텐츠를 합법으로 만들어 주지 않으며, 같은 머신을 가리키는 일반 웹 도메인처럼 다른 곳에서 저지른 실수를 숨겨 주지도 않습니다.
1단계: Tor와 Nginx 설치
sudo apt update
sudo apt install -y tor nginx
sudo systemctl enable --now tor
2단계: Nginx를 localhost에만 바인딩
웹 서버는 공개 인터페이스에서 응답하면 안 됩니다. 그렇지 않으면 일반 웹 IP와 onion 사이트를 서로 연결할 수 있게 됩니다. 사이트 설정을 편집하여 루프백에서만 수신하게 하세요.
server {
listen 127.0.0.1:8080;
server_name _;
root /var/www/onion;
index index.html;
server_tokens off;
}
sudo mkdir -p /var/www/onion
echo '<h1>Hello from onion space</h1>' | sudo tee /var/www/onion/index.html
sudo nginx -t && sudo systemctl reload nginx
3단계: 히든 서비스 선언
/etc/tor/torrc에 다음 줄을 추가하세요.
HiddenServiceDir /var/lib/tor/my_site/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:8080
sudo systemctl restart tor
sudo cat /var/lib/tor/my_site/hostname
마지막 명령은 56자 길이의 .onion 주소를 출력합니다. Tor Browser에서 열어 테스트하세요. /var/lib/tor/my_site/ 폴더를 백업하세요. 그 안의 키가 곧 주소이며, 잃어버리면 새 주소를 받아야 합니다.
4단계: 선택 사항인 클라이언트 인증
비공개 서비스라면 승인된 방문자만 가진 키를 추가하세요. /var/lib/tor/my_site/authorized_clients/alice.auth 파일을 만들고 descriptor:x25519:PUBLIC_KEY 형식의 줄을 넣은 다음 Tor를 다시 로드하세요. 맞는 개인 키가 없는 방문자는 서비스가 존재하는지조차 알 수 없습니다.
5단계: 흔한 유출 차단
- 페이지에서 일반 웹의 에셋, 글꼴, 분석 도구를 절대 참조하지 마세요.
- 오류 페이지와 헤더를 일반적인 내용으로 만들고
server_tokens off를 유지하세요. - 서버 시계를 정확하게 유지하세요. Tor에 필요합니다.
- SSH를 제외한 모든 것을 방화벽으로 막으세요.
sudo ufw default deny incoming, Tor는 인바운드 포트가 필요 없기 때문입니다. - 완전히 분리하지 않는 한 같은 호스트에서 일반 웹 사이트를 운영하지 마세요.
무엇이든 게시하기 전에 서버 OpSec 습관을 읽고, 새 서버에서는 보안 강화 체크리스트를 사용하세요.