ふと、tor経由でwgetやcurlでWebサーバにアクセスしてみようと思ったので、ちょっとやってみた。 まぁ特に難しい事も何もなかったのだけど、とりあえず備忘で残しておく。
1. torのインストール
まずtorのインストール。Ubuntu Server 16.04 LTS/CentOS 7であれば、普通にaptやyum(epel必要だけど)からインストールが可能だ。
Ubuntuの場合
bashsudo apt install tor
CentOSの場合
bashsudo yum install epel-release sudo yum install tor
インストールができたら、Ubuntuであればとりあえずデフォルトの設定でサービスを起動してしまおう(127.0.0.1にしかポート開かないし)。
bashsudo systemctl start tor
shellblacknon@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が変わっている事がわかる。
bashcurl -s --socks5-hostname 127.0.0.1:9050 URL
shellblacknon@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経由での通信が行えるようだ。
bashtorsocks コマンド torify コマンド
shellblacknon@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" }
結構お手軽に利用できる。