はじめに
Dockerを使えば、Privoxy + Tor の環境を簡単に立ち上げることができます。基本的には下記の公式ページを読めば理解できる内容ですが、Dockerの便利さを改めて実感したので記事にまとめました。
今回は dperson/torproxy のイメージを利用しています。ただし、Privoxy + Tor のイメージはいくつか公開されており、検索すると他のものも見つかります。そちらは試していませんが、この記事で紹介するような簡単な要件であれば、どれを使っても同じように動作すると思います。
Privoxy + Tor を使う理由
LinuxではTorを導入して起動すると、デフォルトでローカルホストの9050番ポートにSOCKS5プロキシが立ち上がり、そのプロキシを利用することでTor経由のWebアクセスが可能になります。
curlなどでアクセスする場合はこれで十分ですが、環境によってはHTTPプロキシは使えてもSOCKSプロキシを直接利用できないことがあります。
そのような場合はPrivoxyとTorを組み合わせることで解決できます。適切に設定すれば、Privoxy(デフォルトでは8118番ポート)がHTTPプロキシとして動作し、Privoxy → Tor → Webサイト という経路でアクセスできるようになります。
具体的な設定方法は、以下のページでも紹介されています。
4.10. How do I use Privoxy together with Tor?
ただし、Privoxyをインストールして設定ファイルを編集するのは少々面倒ですし、ローカル環境に残しておきたくない場合もあります。
そこでDockerを使えば、環境を簡単に構築して不要になったら消すことができるため便利です。
dockerコマンド
起動
次のコマンドで Privoxy + Tor のコンテナを起動します。
docker run -it -p 8118:8118 -p 9050:9050 -d dperson/torproxy
-p 8118:8118 はポートのバインドを指定しており、-p ホスト側ポート:コンテナ側ポート の形式です。
すでにホストの8118番ポートが使用中なら、次のように空いているポートに変更してください。
docker run -it -p 8119:8118 -p 9050:9050 -d dperson/torproxy
また、-p 9050:9050 はTorのSOCKSプロキシ用ポートです。HTTPプロキシのみ必要な場合は、以下のように省略して構いません。
docker run -it -p 8118:8118 -d dperson/torproxy
動作確認
curlで動作確認を行います。
curl -L ipinfo.io
ipinfo.io にアクセスすると、接続元のIPアドレスなどが表示されます。プロキシを指定せずアクセスすると、自宅のIPアドレスが表示されるはずです。
次に、先ほどのコマンドでコンテナを起動し、8118番ポートのHTTPプロキシを利用してアクセスしてみます。
curl -Lx localhost:8118 ipinfo.io
(-x オプションでプロキシを指定します)
この場合、自宅のIPアドレスではなく、Tor経由のIPが表示されれば成功です。
SOCKSプロキシも同様に確認できます。
curl -Lx socks5h://localhost:9050 ipinfo.io
こちらも、Tor経由のIPが表示されれば正しく動作しています。
もし ipinfo.io に接続できない場合は、代わりに https://check.torproject.org/api/ip を試してください。最近、ipinfo.io がTor経由のアクセスをブロックしている可能性があります。
終了する
起動中のコンテナは次のコマンドで確認できます。
docker ps
出力例:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae9565085d51 dperson/torproxy "/sbin/tini -- /usr/…" 8 hours ago Up 8 hours (healthy) 0.0.0.0:8118->8118/tcp, 9050/tcp, 0.0.0.0:9050->9050/tcp inspiring_brahmagupta
ここで CONTAINER ID または NAMES を確認し、以下のように指定します。
docker stop ae9565085d51
docker stop の引数に CONTAINER ID または NAMES を渡すと、コンテナが停止します。