はじめに
最近は盛んにプライバシーに関して色々と言われるご時世ですが、それよりも以前から頻繁に表示されるバナー広告などを除去するのも良く言われてきました(勿論、Webサイトを運用している方にとっての運用費にもつながるので一概に悪いわけではないですが)。
最近はAdguardが広告除去などを行う用のDNSサーバサービスなどを公開していますし、NExtDNSなども適用する広告ブロックリストを色々と選択したうえでセキュリティを高めることが出来るDNSサーバサービスなどを行っています。
家庭向けでもアプライアンスの形で提供されているものもあったりしますが、Adguardも構築するだけで広告ブロックDNSサーバを立てられるものを公開していました。
GitHub
対応プラットフォーム
2020年3月20日現在は以下のプラットフォームに対応しているようです。
- Docker Hub
- Beta builds
- Raspberry Pi (32-bit ARMv6)
- MacOS
- Windows 64-bit
- Windows 32-bit
- Linux 64-bit
- Linux 32-bit
- FreeBSD 64-bit
- Linux 64-bit ARM
- Linux 32-bit ARMv5
- MIPS
- MIPSLE
導入方法
基本的には公式のWikiを参照するだけで出来ます。
binaryをダウンロードしてきて実行するのも良いですが、今回は用意されているDockerイメージを利用する形にしました。
実験環境
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
$ docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:25:46 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:24:19 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
# ./AdGuardHome --version
AdGuardHome v0.101.0
手順
1.Dockerイメージを引っ張ってくる。
docker pull adguard/adguardhome
2. Dockerイメージにマウントする、data/
とconfig/
のためのディレクトリをホスト側に作成する。
3. containerを実行する。
docker run --name adguardhome -v /my/own/workdir:/opt/adguardhome/work -v /my/own/confdir:/opt/adguardhome/conf -p 53:53/tcp -p 53:53/udp -p 67:67/udp -p 68:68/tcp -p 68:68/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp -d adguard/adguardhome
4. http://<adguardを実行しているサーバのIPアドレス>:3000
にWebブラウザでアクセスする。
5. configのためのウィザードが始まるので設定していく。
- Admin Web InterfaceのためのListen Interface設定
- DNS ServerのためのListern Interface設定
- 管理コンソールにアクセスするためのユーザーとパスワードの設定
6. 設定が終わったら管理コンソールが表示されると思うので設定は完了。
DNS over HTTPSおよびDNS over TLSに対応するには
素の状態でのDNSサービスを利用するのでもまぁ構わないのですが、せっかく機能として持っているならDNS over HTTPSやDNS over TLSを利用できるように設定しましょう。
証明書を個別に用意できるのであればそれで構わないのですが、Let’s Encryptによる証明書でも問題ないです。設定について公式Wikiに用意されています。
ドメインを登録する
所有しているドメインで、今回使用するサーバのIPアドレスを紐づける形で登録する。AWS Route53やGoogle Cloud DNS、お名前ドットコムのDNSでもなんでも大丈夫です。
DNS-challengeを使用してSSL証明書を入手する
1.以下のWebサイトを参考にCertbotをインストールする。
2.以下のコマンドを実行して証明書の発行を行う。
以下の場合だと、DNS-challengeを使用して、かつ提示される問答に応えることで採取的にSSL証明書の発行が出来ます。
sudo certbot certonly --manual --preferred-challenges=dns -d <発行するドメイン名> -m <メールアドレス> --agree-tos
3.最終的にどのドメインに対して発行されたか、その証明書はどのパスに保存されたかが出力されるのでメモしておく。
Adguard Homeに設定する
1.Webインターフェースにログインする。
2.[設定] – [暗号化設定] へ進む。
3.ページ最初の方にある「サーバ名」に使用するドメイン込みの名前を入力する。さらに真ん中から後半の証明書の項目で、ホストとcontainerで共有しているようなところに証明書と秘密鍵を置いてあると仮定し、それぞれをフルパスで指定する。
いくつかのパラメータはWebUIからは設定できない
Webインターフェースからも大体のパラメータは設定できますが、公式Wikiを確認するといくつかのパラメータは設定ファイル(AdGuardHome.yaml
)のみに存在しています。Adguard Home自体がまだ開発中ということですからそのうちにWebインターフェースに実装されるとは思いますが。
-
web_session_ttl
:Webセッションの有効期限 -
blocked_response_ttl
:デフォルト10秒だけど少し伸ばした方が負荷が減りそう -
ratelimit_whitelist
:自宅などからのアクセスは問題ないという仮定でratelimitの対象外にしている -
cache_size
DNSのキャッシュサイズを大きくすることで問い合わせの負荷を減らす。単位がbyteなのも要注意。
ブロックリストはどこにある?
日本語に対応していそうなブロックリストだと以下のものが有名どころ何でしょうか?
なんJ AdGuard部
280blocker
NextDNSが使用しているブロックリスト
NextDNSが使用しているブロックリストについての情報はGitHubにあります。
なんかおススメのブロックリストなんかありますかね。280blocker とか Steven Black 、 Energized Blu 、Disconnect関連は良さそうですが・・・。
その他
- ユーザーとパスワードの初期化はWebインターフェースからは出来ない。またパスワード生成についても自前ではなくApache2の
htpasswd
を使用する。
- クエリログを取得することでどの問い合わせクエリをフィルタしたか確認しやすくなるが、大量のアクセスが想定される環境であれば大きな負荷ともなる。一旦状況が落ち着いたようであればクエリログの設定を無効にしても良いかもしれない。
- ブロックフィルタールールはAdblockなどの記法も使えるのでそんなに困らないと思う。
- DNS設定などにある、 上流DNSサーバやアクセス設定の許可されたクライアント、拒否するクライアントなどに大量のリストなどをWebインターフェースから入力し適用しようとするとプロセスが落ちる時がある。
大量に設定する必要がある場合は面倒でも設定ファイルに設定した方が良い。
注意事項
iptables
やufw
などを使用してセキュリティを高めておく必要がある。
最後に
まだ開発版の位置づけだと思うので設定だったり安定性はまだだと思いますが、とりあえず家庭用として試す分は使えるかと思います。
あとARMなども対応プラットフォームに入っているので、そこも導入しやすい点でもあるかもしれません。