ラズパイでスマホを含む家中の端末に表示されるWEB広告をブロックする方法を紹介します。 動画の最初や途中に表示されるyoutube広告を削除することも可能です!
最近ラズパイを使って何かしたいと思ってて、ラズパイでできることについていろいろ調べていました。
すると、ラズパイにPrivoxyというソフトウェアを導入することで、スマホ・タブレット・PCなどあらゆる家中の端末に表示されるWEB広告をブロックすることができるという記事を目にしました。
どうやらアドセンスなどのWEB広告だけでなく、youtubeなどの動画サイトの動画広告もブロックできるとのことです。すごい!!
最近外出自粛によりyoutubeを見る機会が増え、再生途中や再生開始直後に再生される広告にはイライラしていて、youtubeのプレミアム会員になろうかと悩んだ時もあったので、ラズパイで無料でできるならと思い実際に実装してみることにしました!
導入手順は
・privoxyのインストール
・広告フィルターの登録
の2つだけなので非常に簡単です!
目次
動作原理
そもそもなぜラズパイでWEB広告をブロックできるのか、その仕組みについて簡単に解説します。
一言で説明すると、ラズパイにアドブロック機能を備えたプロキシサーバーを導入し、スマホ側でラズパイをプロキシサーバーとして設定してラズパイ経由で通信を行うことにより、通信内容を書き換え、広告を非表示・削除することができるからです。
以下でもう少し詳しく説明します。
・広告ブロック(アドブロック)について
そもそも広告ブロックとは何か、どういう仕組みなのか、について説明します。
アドブロックについてwikipediaで調べてみると以下のように書いてあります。
アドブロッカーはあらかじめ用意されたフィルタ(インターネット広告のブラックリスト)を参照し、広告が含まれる通信をブロックしたり、広告に用いられる特定の要素(例:<div class=”ad”>広告</ad>)や、ハイパーリンク(例:<a href=”http://www.****.co.jp/” >広告</a>)を読み込ませないことで、Webサイト上から広告を取り除く。
https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%89%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF
つまり要約すると広告ブロッカーは主に以下の2パターンによって広告をブロックしているとのことです。
- WEBサイトにアクセスした際に、フィルタ(広告のブラックリスト)に登録されたドメインが含まれていた場合、その部分の情報を取得しない。
- WEBサイトにアクセスした際に、 フィルタに従ってWEBサイトのプログラムを一部改変し、 WEBサイトの情報を取得する。
・プロキシサーバーについて
続いて今回一番重要なキーワードであるプロキシについて解説します。
プロキシサーバーとは、その名の通り代理で通信を行うサーバーのことです。下の図を見てください。
プロキシサーバーを通さない通常の通信の場合は、図の赤い矢印のように直接クライアントであるスマホがWEBサイトのサーバーにアクセスし(図の①)、WEBサイトはスマホに対しWEBデータを送信します (図の②) 。
プロキシ通信を行う場合は、まずスマホはWEBサーバーに直接アクセスするのではなくプロキシサーバー(今回の場合はラズパイ)に一旦アクセス要求を出します (図の①) 。次にプロキシサーバーがスマホの代わりにWEBサーバーへアクセスします (図の②) 。そして、また一旦プロキシサーバーがそのWEBデータを受け取り (図の③) 、スマホへそのデータを転送します (図の⑤) 。
これがプロキシサーバーを用いた通信の流れです。
今回はラズパイが代理でWEBデータを取得した際に (図の③)そのデータをそのままスマホへ転送するのではなく 、ラズパイ側で広告を取り除く処理を行った後 に(図の④) スマホへWEBデータを送信する (図の⑤) ことで、広告が取り除かれたWEBデータをスマホで閲覧できるようにします。
ちなみにプロキシサーバーは一般的にウイルス検出や危険なサイトへのアクセスを禁止するファイアウォールとして利用されたりしています。
当然ですが、間にプロキシサーバーとの通信を経由することになるので、通信速度は多少遅くなるというデメリットはあります。
私の環境の場合は特に通信速度が遅くなったという感覚はなく、youtubeも快適に視聴できましたが、どうしても通信速度の低下が気になるといったような方はキャッシュ機能を持ったプロキシサーバー構築ソフトウェア(squidなど)も同時に導入してみてください。こうすることで、条件次第ではむしろ通常の通信より高速化させることも可能です。
導入の流れ
- Privoxyのインストールと設定
- フィルタ(ブロックする広告リスト)を登録
①Privoxyのインストール・設定
・Privoxyのインストール
まず、ラズパイをプロキシサーバーとして稼働させることができるPrivoxyというソフトウェアを、以下のコマンドでインストールします。
sudo apt-get install privoxy -y
・ Privoxyの設定
次に以下のコマンドでprivoxyの設定ファイルを変更します。
sudo nano /etc/privoxy/config
listen-address と書かれた行が2行あるのでこれを消し、
listen-address 自分のラズベリーパイのローカルIPアドレス:8118
と記載します。
※790行目くらいのところにあります。
変更例↓
#変更前
listen-address 127.0.0.1:8118
listen-address [::1]:8118
#変更後
listen-address 192.168.2.123:8118
最後にprivoxyのデーモンを再起動します。
sudo systemctl restart privoxy
この段階でラズパイをプロキシサーバーとして使えるようになります。
ただし、まだフィルタ設定をしていないので広告は消えません。
②フィルタ(ブロックする広告リスト)を登録
AdblockPlusフィルターの登録
続いて、ブロックする広告を指定するフィルターの設定をしていきます。
世の中には有志の方が作ってくださった広告フィルターがたくさん存在しており、この無数にある広告フィルターの中でも特に AdblockPlusリストが有名です。
ただ、 privoxyでは広告フィルターはそのまま使用できず、 privoxy用にフィルターファイルを修正する必要があります。
なのでまず、 AdblockPlusリスト を privoxyで利用できるように自動で修正してくれるプログラムをダウンロードします。
以下のコマンドでこちらのサイト(http://andrwe.org/scripting/bash/privoxy-blocklist)のシェルスクリプトをダウンロードします。
sudo sh -c "curl http://andrwe.org/_export/code/scripting/bash/privoxy-blocklist > /etc/privoxy/privoxy-blocklist.sh"
実行できるように権限を変更し、実行します。
sudo chmod 755 /etc/privoxy/privoxy-blocklist.sh
sudo sh -c "/etc/privoxy/privoxy-blocklist.sh"
実行すると AdblockPlusフィルター を privoxy が利用できる形に修正してくれて、さらに privoxy の config ファイルも自動で修正し、フィルターの登録までしてくれます。
sudo systemctl restart privoxy
・その他のフィルターの登録
AdblockPlusフィルター だけでも、アドセンス広告などの広告は削除してくれますが、youtubeの日本の広告等は削除されないことが多いです。
そこで日本のフィルターとして有名な豆腐フィルターというものと、ついでに他のいくつかのフィルターも登録します。
先ほどと同様にフィルターをprivoxy用に変換してくれるプログラムをダウンロードします。
cd /etc/privoxy/
sudo wget https://raw.githubusercontent.com/skroll/privoxy-adblock/master/privoxy-adblock.sh
このプログラムは以下のように -p オプションで修正後のフィルタを保存するディレクトリを指定し、-u オプションでフィルターファイルを指定して実行します。
sudo sh -c "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"
上のコードの例では、
- http://tofukko.r.ribbon.to/Adblock_Plus_list.txt
- https://raw.githubusercontent.com/k2jp/abp-japanese-filters/master/abpjf.txt
という二つの日本用の広告フィルターを指定しています。
※シェル(sh)で実行すると以下のようなエラーがでて実行できないので、バッシュ(bash)で実行してください。
Syntax error: "(" unexpected
このプログラムでは先ほどのプログラムとは違い、自動でprivoxyの設定はしてくれないので手動で設定していきます。
まず、 privoxyの設定ファイルを開きます。
sudo nano /etc/privoxy/config
先ほどのシェルスクリプトを実行すると、-pオプションで指定したディレクトリに.actionと.filterという拡張子がついたファイルが生成されます。
このファイル名を privoxyの設定ファイルに記載していきます。
アクションファイルの場合は
actionsfile xxxxxxxxx.action
というように、フィルターファイルの場合は
filterfile xxxxxxxxxx.filter
というように記載します。
記載場所は最終行でもどこでもいいですが、以下の記載例のように、アクションファイルは2.5. actionsfileと書かれた最後の行に、フィルターファイルは2.6. filterfileと書かれた最後の行に記載すると分かりやすいと思います。
# 2.5. actionsfile
# =================
・
・
・
# Actions files contain all the per site and per URL
# configuration for ad blocking, cookie management, privacy
# considerations, etc.
#
actionsfile match-all.action # Actions that are applied to all sites and maybe $
actionsfile default.action # Main actions file
actionsfile easylistgermany.script.action
actionsfile easylist.script.action
actionsfile Adblock_Plus_list.script.action
actionsfile abpjf.script.action
actionsfile user.action # User customizations
actionsfile 280blocker_adblock_nanj_supp.script.action
#
# 2.6. filterfile
# ================
# 2.6. filterfile
# ================
・
・
・
# It is recommended to place any locally adapted filters into a
# separate file, such as user.filter.
#
filterfile default.filter
filterfile easylistgermany.script.filter
filterfile easylist.script.filter
filterfile Adblock_Plus_list.script.filter
filterfile abpjf.script.filter
filterfile user.filter # User customizations
filterfile 280blocker_adblock_nanj_supp.script.filter
#
# 2.7. logfile
# =============
広告フィルターで検索するとたくさんのフィルターが出てくるので、 もし上記のフィルターで消えない広告があったら他のフィルターも導入してみてください。
おすすめのフィルターを2つ紹介しておきます。
・おすすめのフィルター
- https://raw.githubusercontent.com/tofukko/filter/master/Adblock_Plus_list.txt
- https://280blocker.net/files/280blocker_adblock_nanj_supp.txt
使い方
・スマホ・タブレット側のwifi設定
androidのスマホやタブレットでのプロキシ設定方法について解説します。
iPhoneやipadも同じような設定方法だと思うので、以下を参考にプロキシ設定を行ってください。
まず、設定からwi-fi設定を開き、接続済みのwi-fiの設定アイコンをタップします。
次に、画面上部のペンマークをタップします。
するとポップアップ画面が表示されるので、詳細オプションを開きます。
プロキシという項目があるので、手動に変更します。
するとさらにプロキシの詳細設定を行えるようになるので、
プロキシのホスト名という欄にラズベリーパイのローカルIPアドレスを、
プロキシポートに8118と入力し、保存をタップしてください。
以上でラズパイのプロキシサーバーへの接続は完了です。
この状態でWEBサイトを開くと以下の画像のように広告が表示されなくなります。
youtubeの広告もほぼ表示されなくなります。ただフィルターに登録されていない広告は表示されてしまうので、そのような場合はいろいろなフィルターを追加してみてください。
上手くいかない場合
・ファイアウォールの設定
もし上記のように設定を行っても動作しない場合はファイアウォールが原因である可能性があります。
僕の場合ufwというファイアウォールソフトウェアを入れていたので①、②の手順だけではアクセスできませんでした。
ufwを入れている場合は以下のコマンドを実行して、8118ポートの通信を許可してください。
sudo ufw allow 8118
参考サイト
https://pimylifeup.com/raspberry-pi-proxy-using-privoxy/