Squid+SSL-BUMPを使って、httpsなサイトでも広告をブロック

2019年11月22日サーバー構築Linux,squid,SSL-Bump,Ubuntu,VPN,プロキシ,広告ブロック

 

VPN接続やプロキシを使い、そこで広告ブロックをすることのメリットは、同様の処理をクライアント側で実施するよりも軽く、かつ通信量を削減することが可能であるためだ。

サーバーサイドで広告をブロックする理由

もう少し詳しく書いてみる。
AdblockやAdawayなどのアプリは、あくまでもクライアントまで広告がやってきたあと、端末のなかで広告であるものを認識し、広告である場合にそれをブロックする。
しかしながら、 以下の欠点がある。

  • 広告ブロックを端末内部で行うため、端末に大きな負荷がかかる
  • 広告はクライアント端末まで通信されているため、通信量の削減にはつながらない

そこで、今回はSSL-BumpをしたSquidを用いて、広告ブロックを行う。

Squidを使い広告ブロックをする

Squidを使うことにより、サーバーサイドで広告をブロックすることが出来る。これにより、通信量を削減することが可能。

Squidを透過型プロキシとしてVPN接続を使っても良いし、そのままプロキシとして利用しても良い。前者の場合には、端末に負荷がかかりバッテリ消費量が高くなってしまう一方で、後者であればそこまでバッテリ消費量に影響することはない。

これまでは、Privoxyを使うことでよく行われていたが、PrivoxyはHTTPS通信には対応していない。
そこで、SquidのSSL-BUMPを使ってSSL通信を確認することも出来るようにし、その中でhostsファイルベースの広告ブロックを実施する。

SquidのSSL-BUMPを有効にする

SSL-Bumpを行うと、httpsであるような通信に対しても制御を加えることが可能だ。
今後多くのサイトがhttpsに舵を切ることを考えると、これを行っておくことが望ましい。

以下のページに詳細を記載しているため、こちらをもとにSquidの設定を行っていただきたい。

Squidの設定を行う

Squidでは、特定のドメインや、特定の文字列に一致するドメインへの通信をブロックすることが出来る。
今回は、特定のドメインをブロックする処理を実施していく。

まず、Squidに「adblock」という条件を定義する。

acl adblock dstdomain "/etc/squid/blocklist.conf"

これで、adblockというaclは、宛先ドメインが"/etc/squid/blocklost.conf"に含まれている場合、という条件を意味する。

その後、以下の一文を記載する。

http_access deny adblock

これで、先ほどのリストに含まれている場合、アクセスを拒否し、クライアント端末に当該の通信を発生させない。

Squidのblocklist.confを編集する

blocklist.confには、ただただブロックしたいドメインのリストを並べていけばOKだ(hosts形式と同じ)。
280blockerであれば、Adblock用のファイルを用いれば良い。

また、以下のサイトのうち「広告避けのhostファイル」項で記載されているスクリプトを用いると、adaway形式のファイルをSquidに投入できる形式に変換をしてくれる。

Squidを再起動する

これで、squid自身が広告ブロックをしてくれる。

sudo systemctl restart squid

なお、さらにこれにZiproxyとPrivoxyを組み合わせることも可能なのだが、DNS等を適切に設定しないと動作しない模様。従って、私と同じように設定すれば出来るのかどうかはちょっと分からないのだが、今後紹介する予定。