ふと、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"
}
結構お手軽に利用できる。