paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

Privoxy + Tor 環境で特定のURLをTorから除外する

最近pythonのコードしかブログに書いていなかったので、久しぶりにインフラ屋らしいこと書きます。

昔メイン機にPrivoxyというプロキシサーバを立てたのですが、Torも被せられるという事でハッカーを目指す私はTorを導入して通信経路の隠蔽を行おうと思います。

専用ブラウザ入れなくてもプロキシ指定すればTorが効くので凄く便利ですね。

環境

メインwindows機のwsl上にPrivoxyを立てているので同じ環境にインストールします。

paloma69.hatenablog.com

Torのインストールは割愛します。

Torとの連携方法

Privoxyのconfigファイルに1行追加するだけです。

forward-socks5 / 127.0.0.1:9050 .

これで全てのHTTPリクエストはプロキシ経由でTorトンネルをリレーします。
仕方ないことですが、有効にするとレスポンスの遅延が感じられますね。

特定のURLを除外したい

Torトンネル経由になったのはいいのですが、Torの特性上レスポンス時間や一定の期間でグローバルIPが変わってしまいます。
これでは動画サイトがスムーズに見れなかったり、通販等で不正アクセスと見なされて注文が通らないかもしれません。
そこで特定のドメインはTorトンネルを使用しないようにしたいと思います。

方法は簡単で、トンネルから除外したいドメインをconfigファイルに記載するだけです。
マニュアル通りなのですが、Tor用の設定より下に書かないと動きませんでした。

forward-socks5 / 127.0.0.1:9050 . # この設定より下に除外したいドメインを書く
forward         .youtube.com    .
forward         .netflix.com    .
forward         .amazon.co.jp   .

試しにという感じですがこれでyoutubenetflixamazonはTorのトンネルの対象外になります。

ちなみに行末の“.”は他のプロキシに転送せずPrivoxyからそのままリクエストを投げる、という設定です。

確認方法

上記の設定の確認をしましょう。
Privoxyデバッグ機能等使ってもいいんですが、NW屋らしくcurlを使ってIPアドレス確認サイトから確認してみます。
私はMy Global IPをよく使います。

プロキシ無し

IPを全部書くと住所付近が特定されてしまうので一部マスクします。
セキュリティ上Torを導入したのに自分から晒したら世話無いですからねw

masashi@DESKTOP-986MNSO:/etc/Privoxy$ curl -s http://www.myglobalip.com/ | grep -P "(\d{1,3}\.){3}\d{1,3}"
        <h3 id="default"><span class="ip">113.xx2.xx4.20</span></h3>

これが自宅のグローバルIPです。

プロキシあり

IPが変わってます。トンネル経由になっている様ですね。

masashi@DESKTOP-986MNSO:/etc/Privoxy$ curl -s -x localhost:8118 http://www.myglobalip.com/ | grep -P "(\d{1,3}\.){3}\d{1
,3}"
        <h3 id="default"><span class="ip">162.247.74.74</span></h3>

トンネル対象の検証のためMy Global IPのドメインを追加する

検証のためconfigファイルにMy Global IPのドメインを追加します。

forward-socks5 / 127.0.0.1:9050 .
forward         .youtube.com    .
forward         .netflix.com    .
forward         .amazon.co.jp   .
forward         www.myglobalip.com      .

Privoxyを再起動。

masashi@DESKTOP-986MNSO:/etc/Privoxy$ sudo /etc/init.d/Privoxy restart
 * Restarting filtering proxy server Privoxy                                                                     [ OK ]

プロキシ無しの時のIPになっていれば成功で、トンネルの対象外となっているわけですね。

masashi@DESKTOP-986MNSO:/etc/Privoxy$ curl -s -x localhost:8118 http://www.myglobalip.com/ | grep -P "(\d{1,3}\.){3}\d{1,3}"
        <h3 id="default"><span class="ip">113.xx2.xx4.20</span></h3>

OK!
元のグローバルIPが見えてます。
これで他のドメインもTor無しで動きそうですね。

むすび

昔の話になりますが、自宅のプロキシサーバにPrivoxyを使ったのはTorと連携できるからでした。
諸々の事情があってTorの設定をするのが遅れてしまいましたが、ようやく実現できました。

この業界に入ったばかりの頃はVPN系のトンネリングって仕組みもよくわからない夢のような技術の話でしたが、
なんてことはない、ただのパケットヘッダの付け替えなんですよね。

今回はPrivoxyの設定をチューニングしましたが、機会があればTorの方の設定も見てみたいと思います。

おまけ

IPアドレスgrepで使ったperl正規表現は以下を使いました。

(\d{1,3}\.){3}\d{1,3}

ターミナル操作でIPアドレスを抜きたいときによく使ってます。
プライベートアドレスのクラスA、B、Cとも対応できます。

masashi@DESKTOP-986MNSO:~$ cat ipaddress
10.0.0.1
172.16.0.1
192.168.0.1
masashi@DESKTOP-986MNSO:~$ cat ipaddress | grep -P "(\d{1,3}\.){3}\d{1,3}"
10.0.0.1
172.16.0.1
192.168.0.1

参考サイト

http://www.Privoxy.org/user-manual/config.html

  • Tor

https://wiki.archlinux.jp/index.php/Tor