家庭内 DNS リゾルバで広告をブロックする

インターネット上の有益なサイトの多くで、その運営費が広告で賄われていることは重々承知だが、2ch まとめサイト等で散見される下品な広告や、昨今の不正広告問題等のセキュリティの上の懸念があり、思い切って広告をブロックすることにした。

広告ブロックは、自宅サーバ内に Unbound で DNS リゾルバを立てて、適当なブロッキングリストを流し込むことで実現することとする。

環境

  • Ubuntu 16.04 Server
  • Unbound 1.5.X

Unbound の用意

まず Ubuntu に Unbound をインストールする。

$ sudo apt update
$ sudo apt install -y unbound

LAN 内から名前解決要求を受け付けるように設定する (IP アドレスの部分は適宜変更)。

/etc/unbound/unbound.conf.d/unbound.conf:

server:
    interface: 0.0.0.0
    access-control: 192.168.0.0/24 allow

Unbound を再起動する。

$ sudo systemctl restart unbound

Unbound と同じネットワークにいる適当な端末から、名前解決ができるか試してみる。

$ dig @UnboundのIP yahoo.co.jp. soa +short
yahoo.co.jp. postmaster.yahoo.co.jp. 2018083122 1800 900 86400 900

ブロッキングリストの用意

今回は 280blocker さんのリストを使用させていただくことにする。個人用途なら自由に利用して良いとのこと。

上記サイトで配布されている「host ファイル」をダウンロードして、Unbound で NXDOMAIN を返すようにリストを加工するスクリプトを作る。

update_list.sh:

#!/usr/bin/env bash

set -e

cd $(dirname $0)

curl -O https://280blocker.net/files/280blocker_host.txt
sed -e 's/.$//' 280blocker_host.txt \
  | grep -E '^[a-z0-9]' \
  | awk '{print "local-zone: \""$1".\" static"}' \
  > /etc/unbound/unbound.conf.d/blocking.conf

unbound-checkconf
systemctl reload unbound.service

実行権限を付けて、root 権限で実行する。

$ sudo chmod +x update_list.sh
$ sudo ./update_list.sh

出来上がったリストを確認してみる。

$ head -5 /etc/unbound/unbound.conf.d/blocking.conf
local-zone: "100651.advision-adnw.jp." static
local-zone: "2.chmato.me." static
local-zone: "2mdn.info." static
local-zone: "4clvr.jp." static
local-zone: "a-c-engine.com." static

名前解決できないようになっているか、Unbound と同じネットワークにいる適当な端末で確認する。

$ dig @8.8.8.8 2.chmato.me. a +short
107.182.224.68
$ dig @UnboundのIP 2.chmato.me. a +short

いい感じだ。あとは update_list.sh を1週間に1回くらい自動実行するように、cron でも仕込んでおく。

DHCP サーバの設定変更

LAN 内の DHCP サーバで、Unbound の IP をリゾルバとして通知するように、設定変更する。

筆者の場合、OpenWrt を使っているので、dnsmasq の設定を変更した。

/etc/config/dhcp:

config dnsmasq
    (中略)
    list 'dhcp_option' '6,UnboundのIP'

以上で広告ブロックが実現できた。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA