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 をローカルホストのみにバインドする
Web サーバーが公開インターフェースで応答すると、クリアウェブの 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 の形式で 1 行記述してから、Tor をリロードします。対応する秘密鍵を持たない訪問者には、サービスが存在することすらわかりません。
ステップ 5:よくある漏洩を塞ぐ
- ページからクリアウェブ上のアセット、フォント、アナリティクスを参照しないでください。
- エラーページとヘッダーは汎用的なものにし、
server_tokens offを維持します。 - サーバーの時計を正確に保ってください。Tor には必要です。
- SSH 以外はすべてファイアウォールで遮断します:
sudo ufw default deny incoming。Tor に受信ポートは不要です。 - 完全に分離できていない限り、同じホストでクリアウェブのサイトを運用しないでください。
何かを公開する前にサーバー OpSec の習慣を読み、新しいサーバーではハードニングのチェックリストを使ってください。