onion ドメインのウェブサイトを開設してみる
Tor ブラウザでのみ見られる、.onion
ドメインのウェブサイト。素人でも簡単に立ち上げられるらしいので、試してみた。
環境は、OCI (Oracle Cloud Infrastructure) で借りている Ubuntu 18.04 のインスタンスにて。全て root
ユーザで実行する。
まずは tor
コマンドをインストールする。
$ vi /etc/apt/sources.list
ファイルの末尾に以下2行を追加する。
/etc/apt/sources.list
deb https://deb.torproject.org/torproject.org bionic main
deb-src https://deb.torproject.org/torproject.org bionic main
リポジトリを追加したらインストールする。
$ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
$ gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
$ apt update
$ apt install -y tor deb.torproject.org-keyring
$ tor --version
Tor version 0.4.5.7.
続いて、Tor の設定ファイルを変更し、Onion サイトとして公開するポートを選択する。
$ vi /etc/tor/torrc
70行目付近に HiddenServiceDir
・HiddenServicePort
という項目がコメントアウトされている場所があると思うので、それをアンコメントする。
/etc/tor/torrc
# アンコメントしながら 8099 ポートを指定する
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8099
今回は、ローカルの 8099
ポートで動かしているウェブサーバを Onion サイトとして公開することにする。
配信するサイト、ウェブサーバは Python なんかで作っても良い。自分は慣れている Node.js で、超簡単なウェブサーバを作ってみる。
$ node -v
v14.8.0
# 適当な作業ディレクトリを作る
$ mkdir ~/onion-site && cd $_
# 8099 ポートで、固定の HTML を返すサーバを立てる
$ cat << EOL > index.js
const http = require('http');
const server = http.createServer((request, response) => {
response.writeHead(200, { 'Content-Type': 'text/html; charset=UTF-8' });
response.end(`<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Neo's Onion Web</title>
</head>
<body>
<h1>Neo's Onion Web</h1>
<p>Go To <a href="https://neos21.net/">Neo's World (https://neos21.net/)</a>.</p>
</body>
</html>
`);
});
server.listen(8099);
EOL
# ウェブサーバをバックグラウンドで起動する
$ nohup node ./index.js &
# 8099 ポートでウェブサーバが公開できているか念のため確認する
$ curl http://localhost:8099/
コレで良い感じ。
それではいよいよ、Tor を起動する。参考文献では systemctl
や service
で制御しているところもあったのだが、自分が試した限りだと systemctl
での操作では上手くいかなかった。直接 tor
コマンドを叩くことにする。
# Tor をバックグラウンドで起動する
$ nohup tor &
初回起動時に、HiddenServiceDir
で指定したディレクトリ配下に、鍵ペアやホスト名を記したファイルなどが生成される。自分の Onion サイトがどんなドメインで公開されているか調べるには次のように叩く。
$ cat /var/lib/tor/hidden_service/hostname
e3lk3ai76feupwwk47bxuwwi2hjr53xilprczxwk3ubkuffxlhfzrayd.onion
ランダムな文字列で、末尾が .onion
となっている。ちなみに Facebook の Onion 版なんかは、鍵ペアをブルートフォースで生成しまくって、facebook
な綴りが登場するドメインをなんとか作り上げてることでも有名。
サーバサイドでの作業はココまで。
続いて、クライアントからこの Onion サイトを見てみる。Chocolatey を使って、Windows マシンに Tor ブラウザをインストールしてみた。
# Tor Browser をインストールして検証する
PS> choco install tor-browser -y
Tor ブラウザは Firefox ベースで、使い心地は普通。先程確認したドメインにアクセスしてみよう。
- http://e3lk3ai76feupwwk47bxuwwi2hjr53xilprczxwk3ubkuffxlhfzrayd.onion/
- 実際に上の作業で公開している自分の Onion サイト。何も内容はないし、いつか消すかも
ちゃんとアクセスできた。
なお、クラウドサービスのファイアウォール設定 (Security List とか Security Group とか) で、8099 ポートは開放しなくて良い。IP 直打ちではアクセスできないことを確認。ちゃんと Hidden Service を経由していて、Tor でのみ閲覧できるサイトになった。