다크 웹에서 셀프 호스팅하기
요약
본 글은 Tor 환경에서 대규모 Onion 사이트를 운영할 때 필요한 성능 최적화 및 보안 고려 사항을 다룹니다. CSS 인라인 사용, JS 최소화, Keep-Alive 연결 활용 등 기술적인 접근법과 함께, 숨김 서비스의 바인딩 주소 분리 및 출구 노드 운영에 대한 지침을 제공합니다.
핵심 포인트
- Onion 사이트는 성능 최적화를 위해 서버 렌더링과 CSS/CSS 애니메이션 위주로 구성해야 합니다.
- Keep-Alive 연결을 최대한 활용하여 새로운 HTTP 요청 발생을 최소화하는 것이 중요합니다.
- 숨김 서비스는 포트와 바인딩 주소를 분리하여 여러 서비스 간의 연관성을 숨기는 것이 좋습니다.
- 출구 노드 운영은 선택 사항이며, 보안 유지를 위해 숨김 서비스 운영과 함께 진행하지 않는 것을 권장합니다.
규모가 큰 Onion 사이트는 성능 최적화가 Tor 특성에 맞춰진다는 점이 특히 매력적임. 헤더 로고 같은 이미지를 base64로 삽입하고 CSS를 인라인으로 넣으며, 애니메이션과 전환 효과도 JS 대신 CSS를 최대한 활용하는 식임. 페이지는 대부분 서버에서 렌더링하고, JS를 쓰더라도 JS 없이 작동하도록 만들어야 함. XSS, CSRF, SQL 삽입 등 각종 삽입 공격을 막는 보안 작업도 무척 흥미로워짐. 다른 댓글처럼 통신 횟수를 최소화하는 것이 핵심임. 같은 Keep-Alive 연결에 최대한 많은 데이터를 담고 새 HTTP 요청은 가급적 피하라는 뜻으로 이해함. 요청마다 새로운 Onion 경로가 배정되어 느려질 수 있기 때문임. 연결 하나로 사이트 전체를 전달할 수 있다면 성공한 셈임. 이런 제약 속에서 창의적인 소프트웨어 공학을 극한까지 밀어붙이는 대형 Onion 사이트의 성능에 늘 감탄함.
같은 도메인의 콘텐츠에 상대 링크를 쓰는 대신, 호스트 이름을 달리해 같은 웹사이트를 두 번 빌드하면 어떤 이점이 있는지?
RSS, canonical 링크, og:url, 마이크로포맷처럼 절대 URL을 쓰는 작은 요소들이 있음. 한 번 .onion에 들어오면 계속 .onion 안에 머물도록 보장하려는 목적임.
별도 포트뿐 아니라 127.0.0.1과 다른 바인딩 주소로 숨김 서비스를 실행하는 것도 권장함. 나중에 같은 포트로 다른 서비스를 띄우면서 숨김 서비스를 끄는 것을 잊을 수 있기 때문임.
설정은 HiddenServicePort 80 127.13.37.1:8080과 listen 127.13.37.1:8080;처럼 하면 됨. 이렇게 하면 포트를 재사용하더라도 외부인이 127.0.0.1에 바인딩된 서비스에 접속하는 일을 막을 수 있음.
여러 숨김 서비스의 연관성을 숨기려면 포트나 바인딩 주소도 분리해야 함. nginx는 Host 헤더와 일치하는 사이트가 없으면 알파벳순으로 가장 앞선 사이트를 제공하기 때문임.
모르는 사람들이 페이지에 접속하는 것 외에 서버를 출구 노드로 이용할 수도 있는지? 스위스에서 익명 네트워크의 출구 노드를 운영하는 사람을 만났는데, 경찰에게 무슨 일인지 설명해야 해서 골치 아프다고 했던 터라 궁금함.
출구 노드 운영은 선택 사항임. 중계 노드나 숨김 서비스를 운영한다고 출구 노드 역할까지 맡을 필요는 없음. 숨김 서비스의 보안에 영향을 줄 수 있어 이 역할들을 함께 운영하는 것도 권장하지 않음.
Tor 출구 노드는 직접 별도로 설정해야 함. 웹사이트나 채팅 서버 같은 숨김 서비스를 운영하는 것과는 별개임.
그건 출구 중계 노드에 해당하며, 만일을 대비해 현재는 운영하지 않고 있음.
집 컴퓨터에서 아마추어 무선과 과학 자료를 위한 superkuhbitj6tul.onion을 약 10년간 운영하며 배운 것은 .onion의 모든 것은 일시적이라는 사실임. Tor 프로젝트가 높은 보안 수준을 위해 Tor v2의 익명성이 더는 충분하지 않다고 판단한 것 자체는 옳았지만, 기존의 모든 v2 사이트를 일방적으로 없애버렸음. 2021년 v2 Onion 지원을 뺀 클라이언트를 내놓으면서 사이트 사이의 링크도 모두 끊기고 웹이 산산조각 남.
다크웹은 도메인 이름을 소유하고 싶은 사람을 위한 곳이 아니라 보안을 위한 곳이며, 모든 결정도 그 목적에 따라 내려짐. 그 과정에서 Tor 다크웹의 모든 공동체가 사라져도 감수할 것이고, 같은 일을 다시 할 것임. 모래 위와 같은 다크웹에 공동체를 세우지 않기를 권함.
정확히는 도메인 이름에 무엇이든 종속시키지 말라는 뜻이어야 함. 일반 웹에도 똑같이 적용되는 조언임.
v2 Onion 지원 중단은 훨씬 일찍 예고됐고, 많은 사이트가 새 URL을 미리 공지해 이전을 마쳤음. 실제로 크게 불편을 겪은 사람이 있었을지 의문임.
로딩 속도를 높이려면 HTTPS 인증서를 구매해 HTTP/1.1의 제약에서 벗어나는 것이 좋음. 빠른 사이트 로딩에는 HTTP/2의 다중화가 중요함. HiddenServiceExportCircuitID 설정으로 회로 ID를 웹 서버에 전달하면 운영 지표 수집이나 악용 방지에 활용할 수 있음. 그렇지 않으면 로그에 모든 사용자가 같은 IP에서 접속한 것으로 표시됨. https://blog.cloudflare.com/cloudflare-onion-service.
Onion 서비스는 Tor 네트워크가 항상 암호화하지만 그 안에는 여전히 평문 HTTP를 터널링한다는 점이 흥미로움. .onion 도메인에 무료 인증서를 발급하는 인증 기관이 없어, 자체 서명 없이는 무료로 HTTP/2를 쓸 수 없는 셈임.
그렇다면 Onion 서비스에서는 자체 서명 인증서를 그냥 신뢰하면 안 되는지? 잠깐 살펴본 바로는 Tor 프로젝트가 Onion 서비스에서 HTTPS를 쓰는 주목적을 HTTP/2 지원이 아닌 다른 데 두기 때문으로 보임. HTTPS 안내 페이지에는 HTTP/2가 언급조차 되지 않아 아쉬움.
이런 인증서를 XMR로 구매할 수 있는지?
일반 사용자도 평범한 애플리케이션 하나를 설치해 폴더에서 바로 웹사이트를 운영할 수 있으면 좋겠음. CLI를 쓰면 일반 웹사이트 호스팅보다 어려워지고, 이해하지 못하는 명령어를 입력하는 것도 좋은 방법 같지 않음.
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기