Jan 31, 2021

Privoxyで広告ブロック

「広告には、マルウェアへのリンクが紛れていることもある」とCisco Talosの人が podcastで言っていた。そこで、UTMの上位にPrivoxyを入れて、TVや掃除機もまとめて面倒みる事にした。

 

1.インストール、初期設定

$ sudo apt update

$ sudo apt install privoxy

$ sudo vi /etc/privoxy/config

--------------------------------

...中略...

listen-address :xxxx    # お好みのportで

--------------------------------

$ sudo /etc/init.d/privoxy restart # 実行してみる

$ sudo systemctl status privoxy    # 動作してるかstatus確認。 sudo /etc/init.d/privoxy stsatusでも良い


2.ブラウザ設定変更と、初期動作確認

# まず、ブラウザで、プロキシ設定無しで {privoxy host's IP}:xxxx にアクセス。

# Privoxy home pageが見えたらOk。


# プロキシとして {privoxy host's IP}:xxxx  を使うように、ブラウザの設定変更。細かいところは、下記「参考にしたところ」参照。


# 存在しないホストにアクセスしてみる。例↓

http://redirect2.example.net

# Privoxyのエラーメッセージ「No such domain」が見えたらok。


# しばらく、ニュース、SNS等、普段のネット散策で、異常がないか確認。


3.設定追加

$ wget http://andrwe.org/_export/code/scripting/bash/privoxy-blocklist

$ wget https://github.com/Andrwe/privoxy-blocklist/blob/master/privoxy-blocklist.sh

# して、mv privoxy-blocklist ~/privoxy-blocklist.sh しておく。


$ sudo vi  ~/privoxy-blocklist.sh 

--------------------------------

・・・中略・・・

SCRIPTCONF=/etc/privoxy/privoxy-blacklist        # ←"/etc/conf.d/"を"/etc/privoxy/"に変更

・・・中略・・・

--------------------------------


$ sudo chmod 755 ~/privoxy-blocklist.sh


# 修正したスクリプトを次のように実行し、ブロックリストを生成。

$ sudo ./privoxy-blocklist.sh


# すると次のリストが生成される。その内容を変更する。

$ sudo vi /etc/privoxy/privoxy-blacklist

--------------------------------

# ・・・中略・・・ 

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

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

# ・・・中略・・・ 

# config for privoxy initscript providing PRIVOXY_CONF, PRIVOXY_USER and PRIVOXY_GROUP

# ↓「#」を付けてコメント化

#INIT_CONF="/etc/conf.d/privoxy"

# ↓ 「#」を外して設定を有効化。一部、値変更。

PRIVOXY_USER="privoxy"

PRIVOXY_GROUP="nogroup"    # ←「privoxy」を「nogroup」に変更

PRIVOXY_CONF="/etc/privoxy/config"

--------------------------------


# 再度スクリプトを実行してブラックリストを最新の状態に更新。

$ sudo ~/privoxy-blocklist.sh


$ sudo /etc/init.d/privoxy restart # 各リスト、設定反映の為、念のため


# 適宜 cronで定期実行


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

# 豆腐フィルターを使わせてもらいます。

$ wget https://raw.githubusercontent.com/skroll/privoxy-adblock/master/privoxy-adblock.sh


$ sudo chmod 755 privoxy-adblock.sh


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

$ 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


# /etc/privoxy/ 下に次の3種類のファイル(ファイルは.actionと.filterの6個)が生成される。

# それらをconfigに指定する。

$ sudo vi /etc/privoxy/config

--------------------------------

actionsfile Adblock_Plus_list.script.action

actionsfile abpjf.script.action

actionsfile easylist.script.action


filterfile Adblock_Plus_list.script.filter

filterfile abpjf.script.filter

filterfile easylist.script.filter

--------------------------------


# privoxyを再起動。

$ /etc/init.d/privoxy restart


# これでも、まだ YouTube広告が表れたので、次のファイル末尾に以下2行を追加して、様子見中。ちょっと雑過ぎか? 悪影響あるかも。

$sudo vi /etc/privoxy/easylist.script.action

--------------------------------

*.googlesyndication.com

*.googlevideo.com

-------------------------------- ← 2022.07.18 取り消し線


ここまでやって言うのもアレだが、HTTPSが当たり前になってきたので、CONNECTメソッドでWebサーバとの通信を仲介するだけでは、ブロック効率は高くなく、膨大なリストがもったい無い気がする。HTTPSデコードは、そこまでするかなぁ・・・

---> 2022.07.18 追記ここから

※試行錯誤の記録、特に成果無し(07/18)
Android TVを見ている時の広告動画をブロックしたい。広告動画配信ホストは、予め 別proxyのログや、パケット解析で目星をつけておく。

これら広告動画ホストを easylist.script.actionの末尾に書き込むのは正しくない。
そこで、デフォルト動作を決める定義ファイルの「{+block」で始まるセクションにブロックしたいホストを書き込んで(参照、下記抜粋)動作テストした。副作用は設定ファイルの「#」の右にコメントした。

$ sudo vi /etc/privoxy/default.action

# 次の行を探す

# Blocked URL = http://pagead.googlesyndication.example.com/foo/bar/baz.js

pagead*.googlesyndication./.*\.js

# 以下のように書き換えた(結果的に下記3行目以降を追加した)。

# Blocked URL = http://pagead.googlesyndication.example.com/foo/bar/baz.js

pagead*.googlesyndication./.*\.js

# 2022.07.18 #  .googlesyndication.com  # 副作用不明。上の行を生かすことに。 

# 2022.07.18 #  .googlevideo.com    # 副作用 = YouTube 動画閲覧不可になる。 

# 2022.07.18 #  .ggpht.com     # 副作用 = YouTube各ユーザの丸いアイコンの表示異常。

.googleadservices.com

# 2022.07.18 #

本日の結論。以上、試したが効果よりも副作用が目立ち、元通りに近い設定に落ち着いた。HTTPSをホスト単位でブロックするのは雑過ぎて悪手という事だろう。一方、ブラウザのアドブロッカーの類では広告動画はブロックできていて快適である。従って非ローカル環境でも(再生ホストとは別ホストでも)ブロックは可能だが、それには、HTTPS通信の内容(通信先とURL)を分析して通信可否を決める技法に絞られそうだ。やはり どこかで (面倒そうで敬遠してきた)HTTPS Inspection を試さねばなるまい。 

 <--- 2022.07.18 追記ここまで


5.参考にしたところ

重いサイトはブロック、格安SIMへの負担をPrivoxyで軽減 (2017.05.23)

https://xtech.nikkei.com/it/atcl/column/17/051600192/052100002/

オリジナルのままでは、リストダウンロード先の adblockplus.mozdev.org は「host not found」となるのを回避する手順に触れていて、助かります。

特定のサイトをブロック対象外にするための /etc/privoxy/user.action の編集例なども見やすくまとまっている。

privoxy-blocklist.sh は、ここから辿れるものが最新のようで、上記手順に反映しておいた。


How to Use a Raspberry Pi as a Proxy Server (with Privoxy) (2020/08/13)

https://www.howtogeek.com/683971/how-to-use-a-raspberry-pi-as-a-proxy-server-with-privoxy/

英語だけど、画面例が豊富で読みやすい。Webの管理画面の説明は他の日本語の紹介サイトでは触れられておらず、見てみると良さそう。


Raspberry Pi で広告削除 | privoxy (2020/08/15)

https://blog.bnikka.com/raspberrypi/privoxy.html

ここも、分かりやすくまとまっています。


簡単!ラズパイでスマホ広告をブロック – youtube広告も削除可能! (2020.06.11)

https://jorublog.site/raspi-adblock-privoxy-install/#AdblockPlus%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%81%AE%E7%99%BB%E9%8C%B2


Privoxy

https://wiki.archlinux.org/index.php/Privoxy#Ad_Blocking_with_Privoxy

『You can use adblock plus filters. The privoxy blocklist script automatically downloads adblock plus filters, converts them to a privoxy friendly format, and edits privoxy's config file to include those filters:

Run the script once to create /etc/conf.d/privoxy-blacklist

Edit /etc/conf.d/privoxy-blacklist to uncomment the line PRIVOXY_USER= and the two lines below it.

Run the script again to download and install the blocklists.

Restart privoxy.

group="privoxy" の代わりに group="nogroup" としてアンコメントした。


No comments: