Torブラウザを使うときの構成検討いろいろ whonix/tails/dockerコンテナ

# 背景
個人の環境でちょっと気持ちの良くない検索をする必要がある場合用に、torbrowserをインストールした仮想マシンのubuntu desktopを使用しています。
ホストにしているPC自体がファンレスでスペックがあんま高くないせいなのか、何なのか、そもそもubuntu desktop自体がもっさりしていて、ストレスを感じるときも少なからずあります。
改めて、軽快かつ安全に使う方法としてはどんなのがいいか検討してみたので、その備忘録です。

ちなみに前提として、ホストはUbuntu desktop（正しくは、22.04 + wayland + sway)です。

# 選択肢

ざっくり分けると以下でしょうか。

1. ホストPCにtor-browserを導入する
2. dockerでうまいことやる
3. ホスト上にKVM/VirtualBoxなどの仮想環境を立てて、ゲストOSを導入し、ゲストOSにtor-browserを導入する
4. マルチブート/USBブート
5. Tor Gatewayを作って通す 

## 1. ホストPCにtor-browserを導入する

ホストがubuntuの場合、以下を実行するだけ。
ただし、2022/4頃に導入した際は起動スクリプトに問題があるらしく、該当箇所をちょっとだけ手で書き換えた記憶があります。
今は、、大丈夫そうでした。
なんか条件があるのかな。

```
# apt install torbrowserlauncher
$ torbrowser-launcher
```

シンプルですが、ホスト自体で実施する他のデータが汚染されないか、、といった気持ち悪さが残るっちゃ残ります。

## 2. docker上にtorbrowserを稼働させて、ホストPCのDisplayに書き出す

dockerコンテナ領域で１層壁を作ればちょっとは気持ち悪くないかな、、という発想で、基本的なコンセプト以下です。
https://github.com/mviereck/x11docker/wiki/How-to-provide-Wayland-socket-to-docker-container

~~torbrowserを動かすコンテナを作る発想でしたが、、結論失敗しました。~~
~~理由はWaylandだから。~~
その後もう少々調査したところ、環境変数を少し足してやれば画面出せることに気が付きました。
お恥ずかしい。。

コンテナの中にtorbrowser-launcherを導入して、起動すると以下のエラーが出るのですが、
```
qt.qpa.xcb: cound not connect to display
qt.qpa.xcv.plubin: Could not load load the Qt platform plugin "xcb" in "" even through it was found.
```

```
$ XDG_SESSION_TYPE=wayland torbrowser-launcher
```
で行けそうでした。

但し細々追加で入れないといけないものもありますし、以下のような観点も考えると設定も作り込まないといけないのでそれは別途まとめ用途思います。
https://www.jpcert.or.jp/newsflash/2019021201.html

軽量かつ最低限のデータ領域の分離はでいるので、ホストにすでにdockerを入れているならありな選択肢かなという気はします。
但し、ちゃんと安定して動くかは未検証なので、それ見てからですね。
てかそもそも、ホストにdockerを入れるのはまだ少し気持ち悪い感覚もあるので、その点でも本格採用にするかはちと悩ましいところですが。

## 3. ホスト上にKVM/VirtualBoxなどの仮想環境を立てて、ゲストOSを導入し、ゲストOSにtorbrowserを導入する

私の環境(waylandネイティブ)だとVirtualboxが動かないので、KVMを使ってます。
そこはあまり重要じゃないのですが、ゲストOSの選び方で更にいくつか分岐があります。
自分で適当なゲストOSを選んでtorbrowserを導入してもいいのですけれど、最初からtorを組み込んでいるディストリがあります。

以下に比較サイトがあるので、ご参考まで。
https://www.whonix.org/wiki/Comparison_with_Others

Whonixのサイトなので、バイアスかかってんだろうなーというのは念頭に置いておいていただくとして。

### 3.1 Whonix

https://www.whonix.org/
仮想マシンとして配置するのが基本になるディストリです。

ダウンロードについてサーバから落とすと24時間とか普通にかかります。。
まぁ、、、主要ディストリじゃないとそんなもんですよね。。。

で、使う際ですが、Workstationというデスクトップ環境と、GatewayというTorルーティング似特化した仮想マシン２台の構成になります。
仮想マシンのネットワーク構成いじればWorkstation単独でtorbrowserで使えそうですが、、試してません。
２台構成というのが少々めんどくさいですね。。
あと、導入もちょっと面倒くさかった。
手順はサイトにある通りなのだけれど、上からずいーと下までやらないといけない感じです。
斜め読みで行こうとしてとけっつまづきました（Gatewayに一回ログインして、registration的な操作を一回しないと、ping自体答えてくれない、、）。

使ってみると、Workstationの割当メモリをちょっと増やせばOSとしてはサクサク動くのですが、torbrowserとgatewayと二段でトンネルする成果、tor-broswer単独の場合よりも遅いケースが多い気がします。
torbrowser単騎なら、あたりの経路を引くとかなりサクサク動くのですが。

あと、当たり前なんですが、torbrowserしか使えない。
並行で気持ち悪くない検索を通常のブラウザでサクサクと、、ということができないです。
本末転倒な話ではあるのですが、少々悩ましい。
(結局はdebianですし、手でfirefoxを導入してもいいのですが、それをやる場合は3.2とほとんど一緒なので、そちらで検討します）

ちなみに、WhonixGatewayの方は後で5のTor Gatewayでも使います。

### 3.2 自分で作る

適当なOSをゲストで作って、そこにtorbrowserを入れます。
今の私がこれ。
Xubuntu入れればだいぶ楽になるような気はしつつですが、今のネイティブUbuntuデスクトップは重すぎてだめだなぁ、、

通常のFirefoxとTorブラウザを並行で使えるので、使いやすくはあります。

但し、tor-browserだと動画が見れないことがあったりします。
そもそもtor通さない通信を発生させてしまう機能があるのでそれを止めている、というような話が雑にググったら書いてあり、そういう匿名化されないケースがあるというのは認識しとかんといかんのですが、深堀はしてません。

## 4. マルチブート/USBブート - tails

Whonixの比較表にもありました、tailsが妥当でしょうか。

https://tails.boum.org/
USBブートする使い方が基本になるディストリです。
仮想マシンとしても使えるようですが、今回はusbブートの例として使います。
こっちも普通にDLに24時間かかりましたね。。

あと、usbにddして流し込みましたが、ブート失敗。
```
blk_update_request; I/O error, dev sdc , seector 16779000 op 0x0:(READ) flag 0x0 phys_seg 1 prio class 0 
Buffer I/O error on dev sdc1, logical block 2097119, async page read
...
```

ぐぐったらusbに1回0書きしてからddすればいいという記事があり、斜め読みしてやてみたら起動に成功できるようになりました。

```
# dd if=/dev/zero of=/dev/sdc bs=4k status=progress
```

ちなみにUSBに書き出すimgを手元にダウンロードしてきたあとに検証するときも、md5を見るのではなくてgpgをインストールさせるあたりがめんどくさかったですね。。
よくよく調べたら手元でgpg検証しなくても、落としてきたimgをアップすれば検証してくれる機能があったのでそれを使えば良いのですが（24時間かけてDLしてきたファイルをまたアップロードするってもはや何がなんだかではあるのですが）。
手元でgpg検証したときに登録した鍵を消す場合は、gpg -kで鍵を検索して、gpg --delete key。途中で自分の鍵でtailsの鍵に証明してるのですが、鍵削除しちゃえばクリアされたことになるのかな、、

仮想マシンと違ってPCのスペックフルで使えますし、サクサク使えていいのですが、、
起動時に毎回キーボードレイアウト選ぶ画面が１段出てくるのもうざいっちゃうざい。

またこれもWhonixを使う場合同様匿名性がいらないブラウジングを並行で実施するということはできません。
更に、基本データは保持できない（起動ごとにファイルが一掃される）ので、安心っちゃ安心ですが、逆に定形作業やるとき用のスクリプトをおいておこうとすると方法をちょっと考えないといけません。
やりようはいかようにでもあるとは思っていますが。

あと、安全面で、ホストOSの入っているディスク領域をマウントしたら悪さできちゃうのでは、、というのが頭をよぎりました。
よぎりましたが、使ってみると、標準ではsudo（というかアドミン権限）が無効になっているので、mountコマンドもたたけないし、まぁ、いいかなと。

ほかや、、ベースのdebianの脆弱性でやばいのが出たときのアップデートが厄介か、、？
アップデートはimgをダウンロードし直しってわけではないようなので、また24時間ということにはならないと思うのですが、やったことがないのでなんとも。
https://tails.boum.org/upgrade/index.en.html

## 5. Tor Gatewayを使う

WhonixのGatewayの方を使わせてもらうのが楽かなと思います。
仮想マシンを新しく立ててそこでFirefoxなりなんなりを立ち上げて、WhonixGatewayを通す感じでしょうか。
3.1の構成がtorブラウザとGatewayで２段階でトンネルしているせいか、tor-browser単独よりもだいぶもっさりする感があったのでその分楽になるかなという気はしますが、現状実物作って試してみたいというモチベーションはないので、何か合った時に思い出すようにしようと思います。

# 使い方の比較とまとめ

軽く気持ち悪い検索するくらいなら、自作仮想マシンでtorbrowser + firefoxでしょうか。
結構気持ち悪い検索のときは、torを通さない通信がないことを一回確認してtailsか、tailsで抜け盛れる通信がありそうならWhonixGateway＋自作仮想マシン（firefox,余計なデータは一切置かない）かなぁ、、、

いずれにしてももうちょっと深堀しないと決められないです。
通信が全部Torに乗ったか見ようとすると、PCとゲートウェイルータの間で通信見る箇所を置くのが一番なのですが、現状そういう装置は取っ払っちゃっています。
ntop on raspberry pi　あたりを再度復活させるか、、めんどくさいなぁ、、

とりあ今回はこんなところです。