Tor로 블로그를 숨겨진 서비스로 직접 호스팅하기
Self-Hosting on the Dark Web

이 사이트는 이제 Tor 네트워크 안에서만 접근 가능한 .onion 주소로도 열린다. 인증 기관도, DNS도, 노출된 IP도 없이 공개 키에서 주소가 파생되고 Tor가 종단 간 암호화를 제공한다. /etc/tor/torrc에 HiddenServiceDir과 HiddenServicePort를 설정하고 nginx를 127.0.0.1:8080에 바인딩한 뒤, Hugo로 onion 주소를 baseURL로 삼아 한 번 더 빌드하면 클리어넷과 Tor 버전이 자동으로 동기화된다.
Tor relays and encrypts your traffic as it passes through thousands of volunteer-run servers, so that no single party can link who you are to what you are doing; a hidden service extends that anonymity to the server itself.
HN 토론
91- p4bl0
제 개인 웹사이트는 수년째 Tor에 호스팅되어 있습니다. NAT 뒤에서도 집에서 쉽게 할 수 있는데, 사용자 입장에서는 나가는 연결이기 때문입니다(이 덕분에 NAT 뒤에 있고 고정 IP가 없어도 로컬 서비스를 노출하는 훌륭한 방법이기도 합니다). 그리고 설계상 개인 IP가 방문자에게 숨겨집니다.
거의 10년 전(벌써?!) 2600에 이에 대해 썼습니다. 제 글 사본은 여기에서 볼 수 있습니다: https://pablorauzy.fr/outreach/2600/how-to-run-a-tor-hidden-...
웹사이트의 Onion 사본이 있다면 Onion-Location HTTP 헤더를 잊지 마세요. 이 헤더는 Tor Browser 사용자가 클리어넷 주소로 방문하더라도 자동으로 웹사이트의 onion 버전으로 리디렉션해 줍니다.
관심 있는 분이 있다면 I2P에 관한 후속 글도 있습니다: https://pablorauzy.fr/outreach/2600/how-to-run-an-i2p-hidden...
- ivanmontillam
Onion 사이트에서 정말 마음에 드는 점은 사이트가 충분히 크면 성능 엔지니어링이 정말로 Tor 특화가 된다는 것입니다. 몇 가지 예를 들면:
- 에셋을 base64로 임베드하기(헤더 로고를 img src로 base64로 넣고, 모든 CSS는 인라인으로 등).
- CSS를 최대한 활용하기(애니메이션과 전환을 사용한다면 가능한 한 CSS로 처리하고, 이를 위해 JS는 피하세요).
- 웹사이트가 대부분 백엔드에서 렌더링되도록 하세요. JS가 있어야 한다면, JS 없이도 웹사이트가 작동해야 합니다.
- 보안이 정말 재미있어집니다. 즉, XSS, CSRF, SQL Injection 공격 및 기타 인젝션을 최대한 피하세요.
다른 댓글[0]에서 누군가 요약했듯이, 챗티니스를 최소한으로 유지하세요. 챗티니스란 같은 Keep-Alive 연결에 가능한 한 많은 데이터를 담으라는 뜻으로 이해합니다. 새로운 HTTP 요청을 최대한 피하세요. 각 요청이 새로운 Onion 경로에 할당되어 속도가 느려질 수 있기 때문입니다.
웹사이트를 단일 연결로 브라우저에 전달할 수 있다면, 당신이 이긴 것입니다.
저는 이런 대형 Onion 사이트들의 성능에 항상 감탄해 왔습니다. 이런 제약과 Tor의 특성 속에서 소프트웨어 엔지니어링 창의성의 한계를 정말로 밀어붙입니다.
--
[0]: https://news.ycombinator.com/item?id=49872320
EDIT: 불릿 포인트 서식 수정.
- basilikum
클리어넷 사이트에 Onion-Location 헤더를 추가하는 게 좋을 것입니다. 그러면 Tor Browser가 방문자에게 자동으로 알려줄 수 있습니다: https://community.torproject.org/onion-services/advanced/oni...
- mzajc
별도 포트를 사용하는 것 외에도, 히든 서비스를 127.0.0.1이 아닌 바인드 주소에서 실행하는 것을 권합니다. 나중에 그 포트에 다른 것을 호스팅하고 히든 서비스를 비활성화하는 것을 잊어버릴 경우를 대비해서요:
> HiddenServicePort 80 127.13.37.1:8080
> listen 127.13.37.1:8080;
이렇게 하면 포트를 재사용하기로 하고 히든 서비스를 비활성화하는 것을 잊더라도 낯선 사람이 127.0.0.1에 바인드된 서비스에 연결할 수 없습니다.
또한 여러 히든 서비스를 호스팅하면서 사람들이 서로 연관짓지 않기를 원한다면 별도 포트 및/또는 바인드 주소를 사용해야 합니다. nginx가 Host 헤더와 일치하지 않으면 알파벳순으로 가장 먼저 오는 사이트를 제공합니다.
- dherls
같은 도메인의 콘텐츠에 상대 링크를 사용하는 대신, 왜 같은 웹사이트를 서로 다른 호스트명으로 두 번 구축하는 이점이 무엇인가요?