Tor上にウェブサイトを公開する方法

Tor上にウェブサイトを公開する方法を解説します。
環境:Ubuntu 22.04
torのインストールと設定
torをインストールします。
$ sudo apt install tor
torrcファイルを編集して設定します。
$ sudo vi /etc/tor/torrc
次の部分のコメントアウトを外して任意のHiddenServiceDirとHiddenServicePortを指定します。
HiddenServiceDir /var/lib/tor/hidden_service
HiddenServicePort 80 127.0.0.1:80
HiddenServiceDirのディレクトリを作ります。
/var/lib/tor以下の権限はdebian-torなのでrootになります。
$ sudo su
# mkdir /var/lib/tor/homepage
# chown debian-tor:debian-tor /var/lib/tor/hidden_service
torを再起動すると「/var/lib/tor/hidden_service/」にonionアドレスが書かれた「hostname」というファイルが生成されます。その他に、公開鍵と秘密鍵も生成されます。
# systemctl restart tor
# cat /var/lib/tor/homepage/hostname
bonxp6hdoeryujxypcr3pmwm7gdu2pg6oeqluuui4szxpi3lkg2qq7yd.onion
「bonxp6hdoeryujxypcr3pmwm7gdu2pg6oeqluuui4szxpi3lkg2qq7yd.onion」がonionアドレスです。
これでtorの設定は完了です。
apache2のインストールと設定
次にWebサーバーであるapache2のインストールと設定をします。
# apt install apache2
# vi /etc/apache2/site-enabled/000-default.conf
<VirtualHost *:80>
ServerName bonxp6hdoeryujxypcr3pmwm7gdu2pg6oeqluuui4szxpi3lkg2qq7yd.onion
DocumentRoot /var/www/
ErrorLog /dev/null #ログを廃棄
CustomLog /dev/null #ログを廃棄
</VirtualHost>
80以外のポートを使いたい場合はこちらでLISTENを追加する必要があります。
# vi /etc/apache2/ports.conf
Listen 80
apache2を再起動
# systemctl restart apache2
これで設定完了です。
あとは、/var/www/に公開したいコンテンツを配置すればonionアドレスで閲覧することができます。
蛇足:もっと秘匿化したいのならHiddenServiceDirとDocumentRootをLUKSなどの暗号化ドライブに設定する。
Torブラウザで確認
Torブラウザで自分のonionアドレスにアクセスしてみます。

バッチリ表示されました。
通常、ウェブサイトを公開するにはドメインを取ってサーバーを借りてとか、自宅サーバーでやるにしてもポート開放とか面倒な設定があります。それらに比べると、Tor上にウェブサイトを公開する作業は非常にかんたんです。機器の設定は不要だし、サーバーレンタルのコストもかかりません。
バニティアドレスで任意の文字列を設定する
onionアドレスの頭の数文字は任意の文字を指定することができます。
やり方は単純で、とにかく計算しまくって任意の文字列が出るまでガチャをします。
バニティアドレス作成のためのツールは色々ありますが、こちらを参考に「mkp224o」を使ってみました。
mkp224oはCPUで計算しますが「Scallion」というGPUで計算するツールもあります。Scallionの使い方はこちらのサイトで詳しく紹介されています。
必要なものをインストール、ダウンロード・コンパイル:
$ sudo apt install libsodium-dev autoconf git
$ git clone https://github.com/cathugger/mkp224o
$ cd mkp224o
$ ./autogen.sh
$ ./configure && make
以下のコマンドで実行:
$ mkdir onion
$ ./mkp224o -d onion/ -S 60 takuya
文字列「takuya」を含むアドレスが見つかり次第、onion/に鍵が保存されます。
「-S 60」は60秒に一度ステータスを表示するオプション。
当然ですが、桁数が増えるほど途方もない時間がかかります。

onion/takuya*/には次の3つのファイルが作成されます。
- hostname
- hs_ed25519_public_key
- hs_ed25519_secret_key
/var/lib/tor/hidden_service/に前のファイルがある場合はバックアップなり削除なりして、今回生成されたhs_ed25519_secret_keyだけをコピーします。
コピーした鍵の所有者をdebian-tor:debian-torにします。これをやらないとtorを再起動しても無視されて別のonionアドレスになってしまいます。
$ sudo chown debian-tor:debian-tor /var/lib/tor/hidden_service/hs_ed25519_secret_key
$ sudo chmod 400 /var/lib/tor/hidden_service/hs_ed25519_secret_key
torを再起動:
$ sudo service tor restart
秘密鍵をもとにhostnameとhs_ed25519_public_keyが自動で生成されます。
Torブラウザでアクセスして表示されたら成功です。