Privoxyで280広告ブロッカーを使う
Privoxyは、広告や特定の単語を含むページをブロックすることができるプロキシサーバーソフト。VPNサーバーを立てて透過型のプロキシとして動作させても良いし、HTTPプロキシとして利用しても良い。最近MVNOが流行しているため、「squid3+ziproxy+privoxy」で圧縮プロキシを構築する事例も増えているが、今回はPrivoxyで280広告ブロッカーを利用する方法を紹介する。
280広告ブロッカーとは
280広告ブロッカーは、日本のモバイル広告の多くをフィルタリングすることが出来るドメインリストである。
Privoxyにこれらをインポートすることで、Privoxyでも280広告ブロッカーを有効化することが出来るのだが、そのままインポートすることは当然ながら出来ない。
しかし世の中にはAdblockPlus形式のファイルをPrivoxy用に編集することができるツールが用意されている。今回はこれを利用して、280広告ブロッカーのうちAdblock形式で提供されているものを、Privoxyにインポートする
Adblock形式のファイルをPrivoxyにインポートするツール
「Adblock2Privoxy」
そのままの名称「Adblock2Privoxy」というツールが公開されている。今回はこちらを利用して280広告ブロッカーのファイルをPrivoxyに適用する。
インストール
ダウンロードページにいくと、RPM形式のものとdeb形式のものが配布されている。自分の環境がこれらに対応しているようであれば、こちらを利用してしまおう。
当方はUbuntuを用いているので、素直に「x64 DEB binary packages」をダウンロードし、dpkg -iでインストールした。
上記以外の環境を用いている場合は、コンパイルが必要。試していないので翻訳となってしまうが、ダウンロードページから「easylist only」のものをダウンロードし(easylistとは、広告ブロックの定番ファイルであるが、あまり役に立たない)、以下のとおり実施する。
curl -sSL https://get.haskellstack.org/ | sh
stack unpack adblock2privoxy
cd adblock2privoxy-*
stack setup
stack build
stackをインストールしたあとにビルドしているのだが、当方stackを利用したことがないので、Mac OSやWindowsを利用する際にはstackのページを確認することをお勧めする(それ用のファイルが用意されている)。
コマンドの解説
ざっくりと言ってしまえば、こんな感じ。
adblock2privoxy-p[privoxyの設定ファイルが格納されているディレクトリ]-w[Webサーバーのドキュメントルート]-d[Webサーバーのアドレス]-t[タスク名][adblock形式のファイルのありか]
このうち、 -wオプションと-dオプションはなくても良い。これらを実施すると、当該のディレクトリにCSSが格納され、広告をブロックした場合に代替CSSを用いて広告部分を詰めてくれる(空白にならない)。けれども、これだけのためにWebサーバーを構築したり、VirtualHostを設定するのも面倒なので、-w -dは使わなくても良いかもしれない。
-tオプションは、タスク名称を設定出来る。タスク名称を設定すると、設定を更新する際には以下のコマンドだけで可能となる。
adblock2privoxy-t[タスク名称]
定期的にcronでも回しておけば最新のファイルが手に入るので、便利。
280広告ブロッカーを適用してみる。
280広告ブロッカーのうち、Adblock形式のものは以下で配布されている。
こちらを用いて、adblock2privoxyを使用してPrivoxy用のファイルを生成する。
adblock2privoxy -p /etc/privoxy -t 280.task https://280blocker.net/files/280blocker_adblock.txt
上記の場合、(多くの場合はそうだと思うが)以下を前提として行った。
- Privoxyの設定ファイルは/etc/privoxyにある
- 「280.task」という名前でタスク設定
設定の適用
最後に、/etc/privoxy/configに以下を加筆する。「actionsfile default.action」と書かれている部分があるはずなので、その下あたりがよろしいだろう。
actionsfileab2p.system.actionactionsfileab2p.actionfilterfileab2p.system.filterfilterfileab2p.filter
Webサーバーを立ててPrivoxyのCSSを使用する場合
Webサーバーを立てて、CSSを用いてブロックした広告の部分を縮める、等の処理を行う場合は、こんな感じ。
設定
adblock2privoxy -p /etc/privoxy -w /var/www -d localhost -t 280.task https://280blocker.net/files/280blocker_adblock.txt
先ほどのものに加えて、
- localhostにwebサーバーがある
- ドキュメントルートは/var/www
という設定を加えている。実際にはVirtualHost等を用いて設定しても構わない。
Apache側の設定
Apacheでも設定が必要。なげやりな感じだがこんな形で設定する。
<VirtualHost *:80>
#ab2p css domain name (optional, should be equal to --domainCSS parameter)
ServerName さっき指定したやつ
#root = --webDir parameter value
DocumentRoot さっき指定したやつ
RewriteEngine on
# first reverse domain names order
RewriteRule ^/([^/]*?)\.([^/.]+)(?:\.([^/.]+))?(?:\.([^/.]+))?(?:\.([^/.]+))?(?:\.([^/.]+))?(?:\.([^/.]+))?(?:\.([^/.]+))?(?:\.([^/.]+))?/ab2p.css$ /$9/$8/$7/$6/$5/$4/$3/$2/$1/ab2p.css [N]
# then try to get CSS for current domain# if it is unavailable - get CSS for parent domain
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule (^.*/+)[^/]+/+ab2p.css$ $1ab2p.css [N]
</VirtualHost>
これで、280blockerが有効になった。