Raspberry Piでproxyサーバ
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
うちは未だADSLで困ってはいないが、やはり決して高速とは言えない。なので、少しでも快適に使えるようにと広告ブロックとキャッシュを試してみた。結論は、今はPrivoxyとDnsmasqだけでよいかな、という、顛末記。
Privoxy 3.0 + Squid 3.5 x Dnsmasq 2.76
目論見は、
まず、2. Squidでキャッシュで、つまづく。
(参考)ついでに、キャッシュ Proxy も設定する
$ 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がなくなっているのね。
# ↓ダウンロード先の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-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 → Privoxy → Squid → 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で、できることはほぼカバーされてるんじゃないか思われた。
PrivoxyもHTTPS 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。