自分のサイトをTorの隠しサービスとして公開した
Self-Hosting on the Dark Web

この記事では、自身のブログをTorの隠しサービスとして公開する手順を解説している。Torをインストールし、torrcにHiddenServiceDirとHiddenServicePortを設定して再起動すると、.onionアドレスが生成される。nginxは127.0.0.1:8080で待ち受け、TLSやHTTP/2は不要だ。静的サイトは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での議論
109- 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を入れるなら、それなしでもサイトが動作するようにすべきだ。
- セキュリティが本当に楽しくなる。つまり、XSS、CSRF、SQLインジェクション、その他あらゆるインジェクション攻撃を可能な限り避ける。
別のコメント[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
同じドメイン上のコンテンツへの相対リンクを使うのではなく、同じウェブサイトを別のホスト名で二度作ることにどんな利点があるのか?
- tombert
ブログをセルフホストしていた頃、これをやろうと考えたことがある。純粋に「ダークウェブにサイトを持っている」と正直に言えることの小気味よさがあると思ったからだ。
結局ブログはCloudflare Pagesに移した。主な理由はコメントを扱うのにCloudflare Workersを使いたかったからだが、それでも「やったことがある」と言うためだけに二重公開することは今でも考えている。
- coldblues
I2PとYggdrasilも試してみることを勧める。特にYggdrasilは。速度とレイテンシに関しては一切妥協しないが、匿名性はない。
- sowbug
こういうガイドでは、生成された秘密鍵のバックアップを強調するのが役立つかもしれない。それを失うとonionアドレスを変更せざるを得なくなるからだ。