Linuxに安全にtorリレーをインストールする方法

IPアドレスを乗っ取られないセキュアなtorリレーの立て方を紹介します。
# 1. OS インストール
**Debian**か**Ubuntu Server LTS**が良いでしょう。理由は公式リポジトリからのインストールが簡単だからです。
Windowsのリレーはパフォーマンス的にオススメできません。

## SSHの設定
公開鍵認証にして、 PasswordAuthentication を無効にして、sshデーモンを再起動してください。詳細はここでは書きません。

## ファイアウォールの設定
```
apt-get install ufw
ufw limit ssh
ufw enable
```
安全のためufwを入れ、有効にしておきます。ついでに、sshもセキュアな設定にしておきます。
sshは22番であること前提です。

# 2. tor インストール
## パターンA
Debianなら `apt-get install tor` で入るようですが、安定性のある古いバージョンとなります。
**インストールしたら パターンB は読み飛ばして、次のステップ3 に進んでください**。

## パターンB
最新のTorが欲しい場合、公式リポジトリから追加するのが良いです。まずは次のサイトにアクセスします。
https://www.torproject.org/docs/debian.html.en
![tor.png](https://qiita-image-store.s3.amazonaws.com/0/19148/5758c215-b674-cfc7-65b8-8267802b94d0.png)

**1**: Debian、Ubuntuのバージョンを選び、リポジトリのアドレスを表示させます。
**2**: つぎに、 `/etc/apt/sources.list.d/tor.list` を作成し、 `deb ...` `deb-src ...` と表示される行を書いて保存します。
**3**: gpg keyringを追加します。

```
gpg --keyserver keys.gnupg.net --recv 886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
```

**4**: 
root権限で以下を実行します。Debianはsudoが入っておらず、その上sudoerの設定が必要ですので `su -` でやると簡単です。

```
apt-get update
apt-get install tor deb.torproject.org-keyring
```

# 3. tor 設定
`/etc/tor/torrc` を開き、以下の項目をアンコメントします。または、追記します。

```
RunAsDaemon 1
ORPort 443
DirPort 80
ExitPolicy reject *:* # no exits allowed
```

* **ORPort** はTorのルーティングに使われるポートです。検閲がある国のファイアウォールを突破するため、443にしておくのが良いでしょう。
* **DirPort** はTorのディレクトリを通知するためのポートです。同様の理由で80にします。
* **ExitPolicy** は最も重要な項目です。`ExitPolicy reject *:*` と書くことで他人にIPを使わせるような Exitノード にならないようにします。

# 4. ファイアウォール再設定
先ほど設定したTorのポートを開けます。

```
ufw allow 443/tcp
ufw allow 80/tcp
```

# 5. arm のインストール (オプション)
`arm` コマンドを使うと、現在のステータス、トラフィックなどがグラフィカルなCUIで表示できます。

* `ControlPort 9051` を torrc に書き加えます。
    * `DisableDebuggerAttachment 0` も書き加えるとなお良いでしょう
* `apt-get install tor-arm` でインストールできます。
* `sudo arm` コマンドでグラフィカルに様子が見れたり、接続者が確認できます

# 数日待ちます
* 数時間待てば、 https://torstatus.blutmagie.de/ にリストされるようになります。
* まず、速度が十分であれば fast フラグが立ちます
* それから数日経つと、トラフィックが流れてきます。
* guard フラグが立つと、Torユーザが一番最初に接続するサーバとして選ばれます。


# おまけ
[torrcのExcludeNodesを変更してTorの接続、ブラウジングを超高速にする方法](https://qiita.com/keiya/items/589df899ffd167f4c909) もご覧ください

## [日本のTorユーザ数](https://metrics.torproject.org/userstats-relay-country.html?start=2012-01-01&end=2016-04-30&country=jp&events=off)
![userstats-relay-country-2012-01-01-off-2016-04-30-jp.png](https://qiita-image-store.s3.amazonaws.com/0/19148/a9230992-4d80-d045-668a-f946a703cc51.png)

* 1 = 片山祐輔 遠隔操作ウイルス事件
    * 連日の報道によってTorが有名になりました
* 2 = エドワード・スノーデン PRISM告発
    * 日本でもプライバシー意識が高まっていたようです

## [全世界のTorユーザ数](https://metrics.torproject.org/userstats-relay-country.html)
![userstats-relay-country-2012-01-01-off-2016-04-30-all.png](https://qiita-image-store.s3.amazonaws.com/0/19148/4a5f11a0-68ca-733b-7a37-cde832f4c81d.png)

## [Top 10](https://metrics.torproject.org/userstats-relay-table.html)
|Country       | Mean daily users|
|--------------|-----------------|
|United States | 369657 (19.42 %)|
|Russia | 219968 (11.56 %)|
|Germany | 188702 (9.91 %)|
|France | 114006 (5.99 %)|
|United Kingdom | 84713 (4.45 %)|
|Italy | 54930 (2.89 %)|
|Spain | 53755 (2.82 %)|
|Brazil | 49029 (2.58 %)|
|Japan | 48620 (2.55 %)|
|Canada | 42061 (2.21 %)|

## [トラフィックのながれ](https://torflow.uncharted.software/)
![tf1.png](https://qiita-image-store.s3.amazonaws.com/0/19148/2c2cf8da-309a-f70f-e049-596348f9052e.png)
日本は少なすぎてパーティクルが見えませんでした。

## Torのトラフィック
* リレー https://metrics.torproject.org/bandwidth.html
    * **75Gbps** くらいのようです
* Exit/Guard https://metrics.torproject.org/bandwidth-flags.html
    * Exitは **20Gbps** 流れているようです

## その他
* [TorリレーのOS](https://metrics.torproject.org/platforms.html)
    * Linuxが最多
* [フラグ毎の推移](https://metrics.torproject.org/relayflags.html)
* すべて見るには https://metrics.torproject.org/ へ

# さらなるチューニング
* `HardwareAccel 1` にしてAES-NIを有効に
    * 意味ない説ある (普通はTor内蔵ではなく、ダイナミックリンクのOpenSSLが使われる(?)ので、OpenSSL側でHWaccel有効になっていればこの設定は無意味)
    * 要検証。
* ulimit -n のファイルディスクリプタ上限を上げる (C10k問題でググッてください)
* torの複数プロセス化など
* C10k問題的な対処。ソケット関連をチューニングします。
    * `sysctl -w net.core.somaxconn=65535`