VPN 接続時には広告を表示させない ~N-06C の VPN 事情

以下の3つのコンテンツの最終回です。

  1. N-06C の VPN 事情
  2. PPTP を Cent OS 5.x にインストールする ~N-06C の VPN 事情
  3. VPN 接続した N-06C にプロキシを通す ~N-06C の VPN 事情

前回までで、Android端末 Medias N-06C は VPN接続した際には Squid を通してインターネット等にアクセスされるようになりました。

Squid がキャッシュサーバとして動作するので、静的なページなどは表示が早くなったりしていることでしょう。

しかしながら、Squid をキャッシュだけに使うのはもったいない(?)ので、ついでに Androidアプリの邪魔な広告を表示させないようにしてみようかと思います。

 

BlackList

前回の Squid の設定では、

acl BlackList url_regex -i "/etc/squid/blacklist"
http_access deny BlackList

というのがありました。

これは、正規表現で /etc/squid/blacklist を読み込んで、合致する URL については、deny せよ、と意味になります。

なので、/etc/squid/blacklist に、広告配信サーバを指定すればよいわけです。

実はお気づきだと思いますが、当サイトも何年も前から a8.net などのアフィリエイト広告が表示されています。アフィリエイト広告による収入が、当サイト運営における唯一の収入源なので、広告が表示されないようにすることは、自分で自分の首を絞めるような物なのですが、Android のアプリの場合、表示される広告の内容がアニメや MORPG のちょいエロな感じだったりで、少し広告が気になりますよね。

私は、広告表示付きの無料版と、広告表示の無い有料版の2つが使用したいアプリにある場合には、できるだけ有料版を購入して作者様に還元するようにしていますので、このようなコンテンツを書くことをお許しくださいませ。。。

 

» /etc/squid/blacklist の内容

今の所、以下のようにしています。

ad-maker\.info
admob\.com
amoad\.com
ameba\.d\.ad-cloud\.jp

おや、何で、a8\.net と書かないんだ? とお思いの方、別に私のアフィリエイト広告まで表示されたりアクセス出来なくなったりすることを防いでいるわけではありません :mrgreen:

a8.netを BlackList に追加しない理由は、ブログ等の中にも a8.net へのリンクはよく含まれており、広告とはわからずにさり気なく記事の中にリンクが入っていることがあるため、気になるリンクをクリックできないのでは意味が無いので、a8.net は含めていないだけです。

なので、広告は全部嫌って方は、上記のリストに a8\.net を含めるのも良いかと思います。

ただ、全ての広告、特に海外の分については一切把握していないので、新しく広告が表示されるようになったら、リストに追加していけば良いでしょう。広告配信サーバを調べて、ホームページやブログ等に公開されている方もいらっしゃるようです

 

Squid-Cache の変更

ここまでで、Squid をリロードすれば、BlackList が有効となり、広告は表示されなくなるのですが、

ERROR

という大きな文字と、その下に Squid 自身のフッターが表示され、広告バナースペースを占領することになります。以下のような感じです。(これが、広告表示エリアを占領)

BlackList に引っかかった URL については、フッターを表示せずに、「Blocked ad」とだけ表示されるように Squid を変更しておきたいと思います。

  1. サーバにログインし、以下を実行
    # cd /usr/share/squid/errors/English
    # echo "<html><head><title>403</title></head><body><i>blocked ad (%s)</i></body></html>" > ERR_BLACKLIST
  2. vi で /etc/squid/squid.conf を開き、deny_info を追加
    deny_info ERR_BLACKLIST BlackList
  3. Squid をリロード
    # service squid reload

実際に N-06C を VPN 接続して広告が表示されるアプリを起動すると、広告が表示されないことに気がつくと思います。

 

%s について

上記のように、カスタムのエラー画面を作って Black List に合致したときに、そのエラー画面を表示させると、以下のように広告エリアに表示されます。

で、上記のエラーメッセージのフォーマットは「Blocked ad (%s)」と %sワザワザ入れていますが、実はこの %s が無いと、Squid は常に Squid 自身のフッターをエラーメッセージに追加してしまい、エラー画面が長くなってしまいます。

Cent OS 5.x の標準レポジトリに入っている Squid Version 2.6 STABLE21 のソースコードをダウンロードしてきて、中を覗いてみると、src/errorpage.c の 198行目、errorTryLoadText()関数内にて、%s がエラーメッセージフォーマットに含まれていない場合は、%S をエラーメッセージに常に追加するように書かれています。

198
199
if (text && strstr(text, "%s") == NULL)
    strcat(text, "%S");	/* add signature */

%S は Squid のデフォルト・シグネチャ(必ず入るフッター)を意味しており、このコードのために %s が含まれていないエラーメッセージ・フォーマットには、必ずフッターが入るというわけです。

なぜ、%s だけを除外しているのかはよくわかりませんが、小文字の方の %s は Squid-Cache の名前とバージョンを表示することを意味しており、これが入れば、フッターの代わりになるという解釈なのかもしれません。

というわけで、「Blocked ad」だけしか表示したくない、と言った場合には、ソースコードを直接変更する必要があります。


 

関連するコンテンツ


  1. I’m wondering how I might be notified when a new post has been made. I have subscribed to your RSS feed which must do the trick! Have a nice day.

コメントを残す


メモ - 以下の HTML タグと属性が利用できます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください