ふと、tor経由でwgetやcurlでWebサーバにアクセスしてみようと思ったので、ちょっとやってみた。 まぁ特に難しい事も何もなかったのだけど、とりあえず備忘で残しておく。

1. torのインストール

まずtorのインストール。Ubuntu Server 16.04 LTS/CentOS 7であれば、普通にaptやyum(epel必要だけど)からインストールが可能だ。

Ubuntuの場合

sudo apt install tor

CentOSの場合

sudo yum install epel-release
sudo yum install tor

インストールができたら、Ubuntuであればとりあえずデフォルトの設定でサービスを起動してしまおう(127.0.0.1にしかポート開かないし)。

sudo systemctl start tor
blacknon@BS-PUB-UBUNTU-01:~$ ss -nap | grep :9050
tcp    LISTEN     0      128    127.0.0.1:9050                  *:*
tcp    TIME-WAIT  0      0      127.0.0.1:39180              127.0.0.1:9050

これでtorのインストール、起動は完了。

2. tor経由でwgetやcurlを使用する

torのインストール、起動ができたので、torを経由してwgetやcurlを使ってWebサイトにアクセスしてみよう。 torはsocksプロキシとして動作しているので、curlであれば以下のようにすることでtor経由でのアクセスが可能だ。 例を見ると、torの再起動に応じてグローバルIPが変わっている事がわかる。

curl -s --socks5-hostname 127.0.0.1:9050 URL
blacknon@BS-PUB-UBUNTU-01:~$ curl -s --socks5-hostname 127.0.0.1:9050 http://inet-ip.info
77.247.181.165
blacknon@BS-PUB-UBUNTU-01:~$ sudo systemctl restart tor
blacknon@BS-PUB-UBUNTU-01:~$ curl -s --socks5-hostname 127.0.0.1:9050 http://inet-ip.info
204.85.191.30
blacknon@BS-PUB-UBUNTU-01:~$ sudo systemctl restart tor
blacknon@BS-PUB-UBUNTU-01:~$ curl -s --socks5-hostname 127.0.0.1:9050 http://inet-ip.info
138.197.207.243

curlの場合、このように指定socksをしてやればよいが、既存のスクリプトなどでtor経由での接続をする場合、「torsocks」コマンドもしくは「torify」コマンド経由で呼び出してやることで、簡単にtor経由での通信が行えるようだ。

torsocks コマンド
torify コマンド
blacknon@BS-PUB-UBUNTU-01:~$ cat ./tortest.py
from urllib import urlopen
print(urlopen('http://httpbin.org/ip').read())
blacknon@BS-PUB-UBUNTU-01:~$
blacknon@BS-PUB-UBUNTU-01:~$ torsocks python ./tortest.py
{
  "origin": "193.15.16.4"
}

blacknon@BS-PUB-UBUNTU-01:~$ sudo systemctl restart tor
blacknon@BS-PUB-UBUNTU-01:~$ torsocks python ./tortest.py
{
  "origin": "163.172.191.54"
}

blacknon@BS-PUB-UBUNTU-01:~$ torsocks curl http://httpbin.org/ip
{
  "origin": "163.172.191.54"
}

結構お手軽に利用できる。