広告シバくべし
広告ブロックである。
Andoroid では平気で全画面広告は出るわ、Chrome は広告ブロックで使う API がなんかされそうになってるわ、おまけに出てくる広告は詐欺まがいばっかりだわ。
もうシバき倒すしかないわな!
ちうわけで、こんな広告ブロックの仕組みでどうだろう。
- ブラウザのプラグイン
- Android 端末に入れる広告ブロックツール
- 広告ブロック対応の Proxy サーバ
- 広告ブロック対応の DNS サーバ
- 広告ブロック機能を持ったルータ
ブラウザのプラグインとか Androidのツール、Ad-block Plus は有名ですよね。ただ、これの難点は、ブラックリスト、ホワイトリストを編集する場合、複数の端末があると、全部のリストを同期する必要があるわけです。けっこー面倒ですよね。加えて、Google様としちゃ、食い扶持壊されるわけにはイカンわけで、Chrome とかAndroid でこの仕組みがいつまで使えるかわからない。
ちうわけで、OSやアプリケーションに依存しない、ネットワークの仕組みとして、広告をシバいてしまえ。というのがここでのお話。
Proxyサーバによる広告シバき
Web上で情報を探すと、それなりに出てくるのが Proxy で広告ブロックを実現しようっていう話。
候補となるツールは2つです
- Privoxy
- Squid
広告ブロックだ!ってなると、よく出てくるのがやっぱり Privoxy で、公開されてる広告リストから Privoxy 用の設定ファイルを作ってくれるツールとかがあります。
ただ、Privoxy には大きな問題が1つ。設定ファイルである filterfle と actionsfile の書式が良くわからない!いや、おめーが理解できないだけだろ?って、その通りなんですが。ドキュメントとか設定例とか読んでも、イマイチ理解できなかった。
それの何が問題かというと、ブラックリスト、ホワイトリストへの追加ができないわけです。どーしたところで、広告ブロックは誤爆が出るので、これができないのは困るんですよね。
ちうわけで、acl を使って広告をブロックする Squid を使うことにします。
Squid にブラックリスト
こちらも先人がいらっしゃって、非常に参考になるページがあります。
この先人さんはたぶん、CentOS かなにか、Linux で実装されてるようですが、私は FreeBSD で行きます。
FreeBSD に Ports で Squid をインストールしたあと、先人さんのスクリプトを使うために、gsed と bash、wget、nkf をインストール。本当は、BSD sed でキメたいところなんですが、tab 文字の置換がうまくいかずに挫折しました。
スクリプトも少し変更したので、貼っておきます。
#! /usr/local/bin/bash
URL=()
# adaway default
URL=("${URL[@]}" "https://adaway.org/hosts.txt")
URL=("${URL[@]}" "http://winhelp2002.mvps.org/hosts.txt")
URL=("${URL[@]}" "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext")
URL=("${URL[@]}" "https://hosts-file.net/ad_servers.txt")
URL=("${URL[@]}" "https://sites.google.com/site/hosts2ch/ja")
URL=("${URL[@]}" "https://raw.githubusercontent.com/multiverse2011/adawaylist-jp/master/hosts")
URL=("${URL[@]}" "https://warui.intaa.net/adhosts/hosts.txt")
URL=("${URL[@]}" "https://280blocker.net/files/280blocker_host.txt")
#
echo "download hosts list"
for (( i = 0; i < ${#URL[@]}; ++i )); do
echo wget -q "${URL[$i]}" -O tmp-$i.txt
wget -q "${URL[$i]}" -O tmp-$i.txt
echo "create tmp-$i-list.txt"
cat tmp-$i.txt | \
grep -v localhost | \
grep -v 255.255.255.255 | \
grep -v ^# | \
grep -v ^white | \
sed '/^$/d' | \
sed -e 's/\t/ /g' | \
nkf -w -Lu -d > tmp-$i-list.txt
rm -f tmp-$i.txt
done
#
echo "merge tmp list"
for f in `/bin/ls -1 tmp-?-list.txt`; do
cat $f | grep -v ^# >> tmp-list.txt
rm -f $f
done
cat tmp-list.txt | \
sed '/^$/d' | \
sed -e 's/#.*$//g' | \
sed -e 's/^0\.0\.0\.0/127\.0\.0\.1/g' | \
sort -u > adaway.txt
sed -i -e '/apis.google.com/d' adaway.txt
sed -i -e '/google-analytics.l.google.com/d' adaway.txt
sed -i -e '/google-analytics.com/d' adaway.txt
sed -i -e 's/127.0.0.1 //g' adaway.txt
echo -n '' > adaway_hosts.txt
cat adaway.txt | while read line
do
echo 0.0.0.0 $line >> adaway_hosts.txt
done
# nginx hosts
cat adaway_hosts.txt | sed -e 's/^0\.0\.0\.0/server_name/g' -e 's/$/;/g' > adaway_nginx_hosts.txt
## ipv6
# cat adaway.txt | sed -e 's/127.0.0.1/::1/g' > adaway_ipv6.txt
# cat adaway.txt >> adaway_ipv6.txt
# mv adaway_ipv6.txt adaway.txt
echo "cleanup"
rm -f tmp-list.txt
rm -f tmp-white.txt
で、作ったリストを squid.conf に読ませます。
hosts_file adaway_hosts.txt
acl ad_allow url_regex "allow"
http_access allow ad_allow
acl ad_allow_domain dstdomain "allow-domain"
http_access allow ad_allow_domain
acl ad_block dstdomain "adaway.txt"
http_access deny ad_block
acl ad_block_url url_regex "deny"
http_access deny ad_block_url
スクリプトで生成する adaway_host.txt、adaway.txt のほかに、正規表現でURLを書くためのホワイトリストファイル allow、ドメイン名で書くホワイトリスト allow-domain、正規表現URLで書くブラックリスト deny があります。まぁ、このあたりは各自、ご自由に。
あと、この Proxy マシンの DNS サーバは /etc/resolv.conf ファイルで Pi-hole マシンに向けます
Pi-hole による DNS ブロック
こっちは先人さんどころか、構築されてる方がいっぱいいらっしゃるので、お任せします。私が参考にさせてもらったのはこちらのページ。
Pi-hole の最大のメリットは、GUI が付いてることですね。ブラックリスト、ホワイトリストへの追加・削除がGUIからポチポチでできます。
あと、Pi-hole を BSD 系 OS で動くっていう話がぽつぽつ見つかるんですが、うまくいきませんでした!
おとなしく CentOS で構築してます。
Fortigateで広告遮断
次世代 Firewall で有名(?)な Fortigate にも広告遮断機能があります。
この機能のメリットは、Firewall として動作するので、端末側の設定が何もいらないこと。既存のルータを置き換えて、Webフィルタを有効にするだけです。
ただ、残念ながらこのフィルタは使い物になりません。Gogle で Web 検索して、最上位に「広告」マークつきで出てくる検索結果をフィルタする程度のことしかできません。
まぁ、Fortigagte はウィルス対策とか、Botnet対策とか、そっち方面で使いましょう。
不具合対策
さてまぁ、これでめでたく広告をシバき倒せるネットワークになったわけですが、1つ問題が。
Android で d-アニメストアを使おうとすると開かない。
Windows 上の Chrome だと問題なく試聴できるんですが、Android のアプリケーションで開こうとすると、こんなんなっちゃう。
さーて?なんでだ??と調べてみたんですが、どうやらこの3つの FQDN を許可しないとダメらしい。
- www.google-analytics.com
- www.googleadservices.com
- www.googletagmanager.com
え・・・・?これを許可するって、それは広告ブロックの意味ないのでわ・・・?
しかも、d-アニメストアというアプリケーションの動作にはどー考えても必要ないような・・・・なんでこれが読めないだけでエラーにしちゃうんだろうなぁ。
なお、言わずもがななFQDNばっかりなんで、adaway.txt ファイル、adaway_hosts.txt ファイル、Pi-hole のリストすべてに、当然のようにブロック対象として入ってます。許可するにはおのおの対応が必要です。
コメントする