Hidden Service
本項ではTorにおけるHidden Serviceの詳細や設定方法などを解説。Hidden Serviceの利用に関する情報に関してはHidden Serviceの利用を参照のこと。
目次
Hidden Serviceとは
Hidden Service(秘匿サービス)とはTorネットワーク内においてサービス提供者、及びユーザーがお互いの招待を明かさない形で各種サービスを提供できる機能。アクセス側、サーバ側がそれぞれ3ホップのホストを経由し、Rendezvous Point(ランデブーポイント)[1]と呼ばれるホスト経由でアクセスすることにより実現される。通常のTor経由による一般サイトへのアクセスがExitノードを介したものになるのに対し、Hidden Serviceでは、Torネットワーク内で完結する点から点への接続が提供される。
それぞれが、3ホップのノードを経由しているため、サービス提供側、ユーザー側共々、相手側の経路を知ることができない。
Tor自体がSOCKSプロクシとして動作するため、TorがサポートしているTCPで通信を行うものであれば、多様なサービスが提供できるのが特徴。
設定方法
前提
- Torの導入が完了していること。
設定手順
/etc/tor/torrc
[2]に以下のような記述を追加。
HiddenServiceDir /var/lib/tor/hidden_service/ HiddenServicePort 80 127.0.0.1:80
上記の例では、設定後、Torを再起動すると/var/lib/tor/hidden_service
内に二つのファイルが生成される。[3]
- hostname
- private_key
hostname
にはonionアドレスが、private_key
にはhostname
に対応するonionホスト名が含まれる。private_key
の内容が漏れてしまうとhidden serviceが乗っ取られてしまう可能性があるため、厳重に管理。
尚、eschalotなどのツールを使用してアドレスを作成した場合はonionアドレスをhostname
、private key blockをprivate_key
に入れる。
アクセス限定
※この機能に関しては将来的にはキーをOnionアドレスに含める形で利用できるようになるようです。
SSHサーバや、グループ限定など、一般に公開するサービスでない場合に、アクセス限定を行いたい場合は、HiddenServiceAuthorizeClient
が指定できる。各クライアントはtorrc
に追加の項目を指定する必要があるので、不特定多数へのサービス提供の場合の使用には向かない。
HiddenServiceAuthorizeClient
は次の構文を持つ。
HiddenServiceAuthorizeClient auth-type client-name,client-name,...
auth-type
はbasic
及び、stealth
。basic
はアクセス制限のみを行うのに対し、stealth
はHidden Serviceのアクティビティを隠す効果がある。[4]client-name
は16文字以内の任意の文字列(英数及びアンダースコア)であり、複数指定することができる。指定したclient-name
の数だけ、hostname
内に.onionアドレスとキーのペアが生成される。いわば、ユーザー名とパスワードであると考えるとわかりやすい。指定できる最大数は、basic
の場合、512個、stealth
の場合、16個である。[5]
まとめると、次のように指定することになる。
HiddenServiceDir /var/lib/tor/hidden_service/ HiddenServicePort 80 127.0.0.1:80 HiddenServiceAuthorizeClient stealth user1,user2
使用する側のtorrc
にはHidServAuth
を指定する。
HidServAuth onion-address auth-cookie [service-name]
onion-address
とauth-cookie
に前述のhostname
より取り出したアドレスと、キーを入力する。これは合致していないとアクセスをすることができない。[service-name]
には任意の名前をつけることができるが、コントローラーなどが使用するためのもので、なくとも構わない。
尚、この方法を使用した場合、.onionアドレスは自動生成されるため、前項で言及した、任意の文字列を使用することはできなくなる。
バージョン3キー
HiddenServiceVersion 3
を使うとバージョン3キーが使用される。
HiddenServiceDir /var/lib/tor/hidden_service/ HiddenServiceVersion 3 HiddenServicePort 80 127.0.0.1:80
バージョン3キーはより長い鍵であるため、ブルートフォース耐性が高い。暗号化アルゴリズムなどもより新しいものが使用されている。拡散も早め。
例えばfd5tzhhtqsonqnxmvk2qplz5viwedznt3y6rjctv46t5w4q5ljpmcqyd.onion
。
現状アクセス限定は使用できない。
注意点
Linuxなどの場合、当該ディレクトリがTor実行ユーザー(Debianのパッケージマネージャーが使用されている場合、恐らくdebian-tor)がオーナーであり、読み取りユーザーが制限されていないと警告が出てTorの起動に失敗する。(/var/lib/tor
以下再帰的にgo-rwx
かけてやるとOK)
尚、指定するディレクトリが存在しない場合、やはり起動に失敗するので、空のディレクトリを作成すること。
Hidden Serviceの特徴など
- Hidden Serviceの設定はネットにアクセスでき、Torに接続できている限り、グローバルIPのないNAT内からでも可能。厳しいフィルタリングなどがかかりそもそもTorの接続が成功しない場合はBridge経由による接続が必要になる。[6]
- アクセスは任意のTCP/IPポートが設定できるため、IRCサーバや、SSHサーバなども可能。
torrc
には複数のHiddenServiceDir
、HiddenServicePort
を設定することも可能なので、一つのサーバから複数のサービスを提供することも可能。HiddenServicePort
の入り口と出口は違っても構わないので例えば、80、8080など異なったポートで提供されるサービスを各onionアドレスのポート80で提供することも可能。- 間違ってグローバルIPアドレスなどを漏らさないようにウェブサーバなどの設定は注意。(127.0.0.1以外へのバインドはしないようにするべき。)
- Hidden Serviceのアドレスは必ずしも127.0.0.1でも良い。ここにアドレスを指定するとパケットは転送されることになる。[7]
参考資料
脚注
- ↑ サービス提供側によりランダムに選択され、ネットワーク内に放送されるRelayノード
- ↑ ディストリビューションなどにより場所に差があり。Windowsではユーザーディレクトリ「Application Data\Tor」内に存在
- ↑ Windowsの場合は任意のディレクトリを設定すること。
- ↑ 具体的には、
basic
の場合、Hidden Service Descriptorのうち、Introdocution Pointのみを各クライアントに向けて暗号化するのに対し、stealth
においては、指定したclientの数のHidden Service Descriptorを発行する。このため、前者において、無効にしたクライアントにより、Hidden Service Descriptorの確認が可能になるが、後者ではそのHidden Service Descriptorが無効化されてしまうため、その存在自体が認識できなくなる。 - ↑ torspec 第2.3項
- ↑ 通常のプロバイダであれば問題ないはず。
- ↑ ただし、この場合、アクセス対象のサーバはHiddden Serviceの提供元サーバをアクセス元とみなすため、アクセス対象のサーバが匿名アクセスを前提としていない場合、不意にHidden Serviceサーバの情報を漏洩する可能性があるため、自己管理下にあり、かつ正しく設定されたサービスのみ、使用すべき。