Raspberry Piでproxyサーバ

うちは未だADSLで困ってはいないが、やはり決して高速とは言えない。なので、少しでも快適に使えるようにと広告ブロックとキャッシュを試してみた。結論は、今はPrivoxyとDnsmasqだけでよいかな、という、顛末記。

 

Privoxy 3.0 + Squid 3.5 x Dnsmasq 2.76

目論見は、

  1. Privoxyで広告ブロック
  2. Squidでキャッシュ
  3. DnsmasqでDNSキャッシュ

 

まず、2. Squidでキャッシュで、つまづく。

(参考)ついでに、キャッシュ Proxy も設定する

PrivoxySquid に変更。

$ sudo vi /etc/privoxy/config

forward-socks4a / 127.0.0.1:3128

forward-socks4 / 127.0.0.1:3128

forward-socks5 / 127.0.0.1:3128

が、うまく動かない。ずっとグルグルしてて、レスポンスをうまく処理できていない感じ。HTTPSをほどかないとダメなのか?

とりあえず#しておくが、これではSquidにはforwardされないはずだなあ。

 

次に、1. Privoxyで広告ブロックでも、つまずいた。

privoxy-blocklist.sh

adblockerの最新広告フィルタールールを適用

広告除去で老舗のadblockerのフィルタールールを、privoxy用に変換して使用する。

ALWというこちらのページの方が、なんとこの自動変換スクリプトを作ってくださっているので、こちらを拝借する。

とのことだが、残念ながらそうは問屋が卸さなかった。ググってみると、URLがなくなっているのね。

赤坂タロウの日記: Privoxyで広告ブロック

# ↓ダウンロード先のURLを修正。これをやっとかないと、オリジナルの adblockplus.mozdev.org は「host not found」となり、後の工程で一部のファイルが生成されなくなる(それなりに動きはするが)。要注意。

URLS=("https://easylist.github.io/easylist/easylist.txt" "https://easylist.github.io/easylist/easyprivacy.txt")

 

URLSを修正すると、doneするのだが、

この自動変換スクリプトが、privoxyの設定も自動的に行なってくれるという、痒いところに手が届く素晴らしさ。

までは、やっぱりやってくれてないみたいで。

 

シェルスクリプトのどこかを直さないといけないのか、調べてみるか?と考えていたが、続けて読んでいくと、

privoxy-adblock

4.YouTubeなどの日本独自広告の除去

で、生成元のeasylistも読んでくれてそうだから、privoxy-blocklist.shはrmすることにする。

 

心を新たに続けていくと、

# リスト更新サイトを、環境変数で、渡さねばならない、との事(↓)

$ sudo bash privoxy-adblock.sh -p /etc/privoxy -u http://tofukko.r.ribbon.to/Adblock_Plus_list.txt -u https://raw.githubusercontent.com/k2jp/abp-japanese-filters/master/abpjf.txt

との事だが、tofukko.r.ribbon.to/Adblock_Plus_list.txtはcannot be foundで、GitHubに引っ越してるみたいで、これも変えておく。

https://raw.githubusercontent.com/tofukko/filter/master/Adblock_Plus_list.txt

 

これでうまく行った。ということで、privoxy-adblockをcrotab -e。

 

ここでひとまず終わりなのだが、中途半端な気もしたので、他にも使えるものがないかと探してみたところ、

Privoxy 3.0 + Ziproxy 3.3 + Squid 3.5

3・Ziproxyとは?
名前の通り、Zipするproxyです。

HTTPでは通信をgzip圧縮することが出来、HTMLやCSSなどの場合は、CPUを少し使ってでも圧縮して流した方が効率がよくなります。
サーバ側とクライアント側がどちらも対応していれば利用できるので、通信量を削減とレスポンス時間の低減をしたい時に使用すると効果があります。

なるほど。

 

参考にして先の

PC → PrivoxySquid → Internet

から、

PC → Squid → Ziproxy → Privoxy → Internet

に構成変更してやると、これは多段プロキシもうまく動いたようだ。(Privoxy → Suquidは#してるので、コンフィグは元のまま)

 

せっかく導入したZiproxy、さらに圧縮できる設定がないかとググると、

圧縮Proxy(Ziproxy)活用によるインターネット回線高速化

ProcessToJP2 = true
# このオプションはぜひ「true」にしよう。jpegの後継規格であるjpeg2000へ画像を再圧縮する。

とのことなのだが、これはまたエラーになる。うまくいかないものだ。

 

そしてtail -fでaccess.logを流していて気がついたのだが、HTTPS通信についてSquidでCONNECTした後、どうもZiproxy(圧縮)とPrivoxy(広告ブロック)がスルーされてる気がする。

広告ブロックを活かすためにはPrivoxyを最初に持ってくればよいのだが、それではforward-が機能しないとまたグルグルである。ハマる。

 

うーん、、、やっぱりSSLをほどくしかないのか?ということで、ついに、

Squid 3.5 + SSL Bump

に、手を出してみたのだが、ビルドエラーが解消できず。。出直してきます。

 

そんなこんなで今のところを考えると、SSLをほどかないことにはサーバレベルのブロックのみで、一方でほとんどのサイトがHTTPSになっていることを考えると、PrivoxyとDnsmasqで、できることはほぼカバーされてるんじゃないか思われた。

 

PrivoxyHTTPS Inspectionに試験的に対応しているそうで、機能テストされてた方がいたので参考にしてみてたが、そこまで効果も見込めないというか、まあそれなりにブロックできていれば十分かもしれない。

Privoxy が HTTPS Inspection に対応したので試してみた | KUSONEKOの見る世界

 

ということで、最後にSquidとZiproxyをremove。

 

でも最後に、キャッシュ機能もないよりはマシかも、と思って、Squidよりお手軽なものも一応漁ってみた。

Polipo 1.1.1

軽量お手軽でキャッシュ機能付きなら、入れておいてもいいか、とも、思ったのだが、

Polipo is no longer maintained

Since then, the web has changed, and HTTP proxies are no longer useful: most traffic is encrypted, and a web proxy merely acts as a dumb intermediary for encrypted traffic.

確かに最近はほとんどHTTPSなので、これもremove。