はじめに
Dockerを使うとPrivoxy + Torの環境を簡単に立ち上げられます。基本的に下記の公式ページを読めばわかる内容ですが、Dockerの便利さを実感できたので記事にします。
なお今回はdperson/torproxy
のイメージを利用していますが、Privoxy + Torのイメージは検索するといくつか見つかります。他は試していませんが、今回紹介するような簡単な要件ならばどれを使っても同じように可能だろうと思います。
Privoxy + Torをなぜ使うか
LinuxではTorを導入して起動するだけで、デフォルト設定だとローカルホストの9050番ポートにSOCKS5プロキシが立ち上がり、そのプロキシを使うことでTor経由のWebアクセスが可能となります。
しかし、curlなどによるアクセスなら良いのですが、場合によってはHTTPプロキシは使える一方でSOCKSプロキシを直接使えないことがあります。
その場合はPrivoxyとTorを組合わせて利用することになります。適切な設定をすると、PrivoxyによるHTTPプロキシ(デフォルトでは8118番ポート)を経由することでPrivoxy→Tor→Webサイトのような流れのアクセスが可能になります。
具体的な設定方法はたとえば次のようなページで紹介されています。
4.10. How do I use Privoxy together with Tor?
これはこれで問題はないのですが、Privoxyをインストールして設定ファイルを書き換えるなどするのはそれなりに面倒です。
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
のように9050番ポートの設定を省略すればHTTPプロキシのみホストからアクセスできる状態で起動します。
動作確認
curlで動作確認を行います。
curl -L ipinfo.io
このようにipinfo.ioにcurlでアクセスすると接続元のIPなどが表示されます。プロキシを何も設定しないと当然自宅のIPアドレスが表示されるはずです。
コンテナをdocker run -it -p 8118:8118 -p 9050:9050 -d dperson/torproxy
のコマンドで起動し、8118番ポートでPrivoxyのHTTPプロキシにアクセスできる場合は次のようなコマンドでプロキシ経由のWebアクセスを行います。
curl -Lx localhost:8118 ipinfo.io
(-xオプションでプロキシを指定します)
コンテナが起動し、正しくプロキシ経由のアクセスできている場合は自宅のものとは違うIPアドレスが表示されるはずです。
同様にSOCKSプロキシも確認します。
curl -Lx socks5h://localhost:9050 ipinfo.io
このコマンドでTor経由のアクセスになっていることを確認できるはずです。
終了する
次のコマンドで立ち上がっているコンテナを確認します。
$ 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
を指定します。
これでコンテナが停止します。