Hidden Service

提供: Hideki Saito Wiki Japanese
移動先: 案内検索

本項では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-typebasic及び、stealthbasicはアクセス制限のみを行うのに対し、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-addressauth-cookieに前述のhostnameより取り出したアドレスと、キーを入力する。これは合致していないとアクセスをすることができない。[service-name]には任意の名前をつけることができるが、コントローラーなどが使用するためのもので、なくとも構わない。

尚、この方法を使用した場合、.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には複数のHiddenServiceDirHiddenServicePortを設定することも可能なので、一つのサーバから複数のサービスを提供することも可能。
  • HiddenServicePortの入り口と出口は違っても構わないので例えば、80、8080など異なったポートで提供されるサービスを各onionアドレスのポート80で提供することも可能。
  • 間違ってグローバルIPアドレスなどを漏らさないようにウェブサーバなどの設定は注意。(127.0.0.1以外へのバインドはしないようにするべき。)
  • Hidden Serviceのアドレスは必ずしも127.0.0.1でも良い。ここにアドレスを指定するとパケットは転送されることになる。[7]

参考資料

脚注

  1. サービス提供側によりランダムに選択され、ネットワーク内に放送されるRelayノード
  2. ディストリビューションなどにより場所に差があり。Windowsではユーザーディレクトリ「Application Data\Tor」内に存在
  3. Windowsの場合は任意のディレクトリを設定すること。
  4. 具体的には、basicの場合、Hidden Service Descriptorのうち、Introdocution Pointのみを各クライアントに向けて暗号化するのに対し、stealthにおいては、指定したclientの数のHidden Service Descriptorを発行する。このため、前者において、無効にしたクライアントにより、Hidden Service Descriptorの確認が可能になるが、後者ではそのHidden Service Descriptorが無効化されてしまうため、その存在自体が認識できなくなる。
  5. torspec 第2.3項
  6. 通常のプロバイダであれば問題ないはず。
  7. ただし、この場合、アクセス対象のサーバはHiddden Serviceの提供元サーバをアクセス元とみなすため、アクセス対象のサーバが匿名アクセスを前提としていない場合、不意にHidden Serviceサーバの情報を漏洩する可能性があるため、自己管理下にあり、かつ正しく設定されたサービスのみ、使用すべき。