前書き
オンライン広告は刺激的なだけでなく、デバイス上のマルウェアの潜在的なソースでもあります。 アプリケーションごと/デバイスごとに広告をブロックするように設計されたプラグインがありますが、DNS levelで広告を停止すると、すべてのアプリケーションとデバイスで一度にはるかに完全なソリューションが提供されます。
Pi-hole —元々Raspberry Pi single-board computerで使用するために作成されたDNSサーバー—は、広告配信ドメインへの要求を除外し、広告をブロックし、ネットワークパフォーマンスを向上させます。 Pi-holeを使用すると、ネットワークで行われたすべてのDNS要求をアクティブに監視し、その場で要求をブロックできます。 この機能はWebブラウザーを超えて拡張されており、適切なDNSクエリをターゲットにすることで、他のアプリケーション内の広告を除外できます。
Pi-holeは、Virtual Private Network(VPN)と組み合わせて使用すると特に効果的です。 VPNは、クライアントとサーバー間の論理ネットワーク接続であるtunnelsを介して接続を確立および維持します。 さらに、VPNがSecure Socket Layer(SSL)をサポートしている場合、トランザクション全体が暗号化され、データ送信用の安全なリンクが提供されます。
このチュートリアルでは、OpenVPNとPi-holeをインストールして構成し、ネットワークに接続されているすべてのデバイスに対して、独自のネットワーク全体のDNSベースの広告ブロックフィルターとして機能するようにします。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
このUbuntu 16.04 initial server setup tutorialに従って、2GBのメモリをセットアップした1つのUbuntu16.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
-
OpenVPNは、このOpenVPN Server on Ubuntu 16.04 guideに従ってインストールおよび構成されます。
[[step-1 -—- gathering-network-information]] ==ステップ1—ネットワーク情報の収集
インストールを開始する前に、Pi-holeがVPNとの通信に使用するネットワーク情報を収集する必要があります。 Pi-holeのインストールプロセスがターミナルセッションを引き継ぐため、開始前にこの情報を手元に置いておくことで、プロセス全体がよりスムーズに進みます。
まず、ip
コマンドをaddr
およびshow
サブコマンドとともに使用して、VPNトンネルがアクティブになっているtun0
のIPアドレスを特定します。
ip addr show tun0
出力は、インターフェイスに関する詳細な情報を提供します。
Output from ip addr show tun01: tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
すなわち:
-
最初の行はインターフェース名
tun0
を示し、その後にネットワークソケットの特性を説明する一連のフラグが続きます。 -
2行目は、現在このインターフェイスで使用できるlink layerデバイスがないことを示しています。
-
3行目には、このネットワークインターフェイスのIPアドレス値が含まれています。
-
4行目は、インターフェイスのIPv6の有効なリース期間と優先リース期間の両方が
forever
に設定されていることを報告しています。 この場合、IPアドレスのリース時間は変更されません。これは、アドレスがVPNのインストール中にインターフェイスに明確に割り当てられたためです。
これはVPNサーバーのアドレスであるため、inet
に続くIPアドレスをメモします。 Pi-holeをインストールするときにこれを知る必要があります。
VPNサーバーのIPアドレスに加えて、Pi-holeはIPv4トラフィックに使用するgatewayも知っている必要があります。 ゲートウェイは、異なるネットワーク間のアクセスポイントと考えることができます。
もう一度ip
コマンドを使用し、今回はroute
およびshow
サブコマンドを使用して、サーバーのルーティングテーブル情報を取得します。 Pipe the routing table informationからgrep
は、文字列default
に対してparse and search the outputになります。 default
は、サーバーが使用するデフォルトゲートウェイを示します。
ip route show | grep default
次の例では、出力は、デフォルトゲートウェイのIPアドレスが198.51.100.1
であり、ゲートウェイがeth0
インターフェイスで到達可能であり、ゲートウェイのonlink
オプションがオンになっていることを示しています。これは、トンネル接続のデフォルトです。
Output from ip r | grep defaultdefault via 198.51.100.1 dev eth0 onlink
これはサーバーのデフォルトゲートウェイアドレスであるため、via
に続くIPアドレスをメモします。 Pi-holeをインストールするときにこれを知る必要があります。
ネットワーク情報を入手したら、Pi-holeをダウンロードしてインストールする準備ができました。
[[step-2 -—- downloading-pi-hole]] ==ステップ2—Pi-holeのダウンロード
the official installation instructionsごとに、Gitを使用してPi-hole repository on GitHubを~/Pi-hole
に複製します。これは、複製プロセス中に自動的に作成されるディレクトリです。 --depth 1
オプションを使用して、履歴が最後のリビジョンに切り捨てられたクローンを作成します。これにより、追加の履歴リビジョンなしで最新バージョンのPi-holeが提供されます。
ホームディレクトリに移動し、リポジトリを複製します。
cd ~
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
出力は、クローン先の場所を確認し、Gitがコピーすると予想されるオブジェクトの数や、実際にコピーした数など、プロセスのリアルタイムレポートを提供します。
Output from git cloneCloning into 'Pi-hole'...
remote: Counting objects: 65, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 65 (delta 5), reused 26 (delta 1), pack-reused 0
Unpacking objects: 100% (65/65), done.
Checking connectivity... done.
次に、新しく作成されたPi-hole/automated\ install/
ディレクトリに移動します。ここには、Pi-holeのインストールスクリプトがあります。
cd Pi-hole/automated\ install/
インストールスクリプトを開いて、スクリプトの動作に満足していることを確認するか、必要に応じて変更します。
nano basic-install.sh
ファイルを保存して閉じ、続行します。
これで、Pi-holeの最新バージョンのコピーがあり、潜在的な問題について自動インストールスクリプトを調べました。 Pi-holeをインストールして構成します。
[[step-3 -—- running-the-installation-script]] ==ステップ3—インストールスクリプトの実行
Pi-holeのインストールと構成は、ターミナルベースのウィザードを使用して行われます。 次のコマンドでウィザードを開始します。
bash basic-install.sh
まず、インストールスクリプトは、それがInstalling packagesであり、インストールに必要な追加のファイルを取得していることを示します。
次の画面は、ネットワーク全体の広告ブロッカーをインストールしていることを通知するPi-hole automated installerからのメッセージです。
ENTER
を押して続行します。
次に、インストールウィザードは、Pi-holeがFree and open sourceであることを通知し、Pi-holeプロジェクトに寄付する方法を通知します。
ENTER
を押して、インストールを続行します。
インストールスクリプトは、サービスが正しく機能するためにStatic IP Addressが必要であることを通知します。
もう一度、ENTER
を押して続行します。
次の画面では、Pi-holeがリッスンするようにChoose An Interfaceを要求します。 VPNのネットワークインターフェイスを監視するにはPi-holeが必要なため、キーボードの矢印キーを使用してtun0を強調表示し、SPACE
を押して選択します。 次に、TAB
を押して、画面下部のオプションにジャンプします。 <Ok>を強調表示した状態で、ENTER
を押して設定を保存し、続行します。
ウィザードで、Upstream DNS Providerを指定するように求められます。 これは、Pi-holeがresolve domain namesに使用するサービスです。 簡単にするために、これをデフォルト値のGoogleのままにしておくことができます。
TAB
を押して画面の下部にジャンプし、<Ok>が強調表示されたら%(t1)sを押します。
次の画面で、Pi-holeは、フィルタリングするinternet protocolsを選択するように求めます。 プロトコル(IPv4やIPv6など)は、パケットの技術的な形式と、ネットワークを介して通信するコンピューターのアドレス指定スキームを指定します。 IPv4は、デバイスをネットワークに接続するために最も広く採用されているインターネットプロトコルです。
Pi-holeを効果的に実行するには、IPv4とIPv6の両方をフィルタリングする必要があるため、両方のプロトコルを選択したまま、TAB
を押して画面下部のオプションにジャンプします。 <Ok>を選択し、ENTER
を押します。
Pi-holeは、現在のネットワーク設定をStatic IP Addressとして使用するかどうかを尋ねます。 VPNを使用するにはPi-holeが必要なので、次の画面でこの情報を手動で入力します。
矢印キーを使用して<No>を選択し、ENTER
を押します。
Pi-holeは、IPv4 addressの入力を求めるプロンプトを表示します。 ここにVPNサーバーのアドレスを入力します。 これは、ip
コマンドを最初に実行したときに受け取った出力でinet
の後に来るStep 1からのIPアドレスです。
PrerequisitesのOpenVPN Server on Ubuntu 16.04 guideをたどった場合、IPアドレスは次のスクリーンショットのものと同じである必要があります。 IPアドレスの末尾に/24
を追加して、VPNのsubnet maskを指定します。
<Ok>を選択し、ENTER
を押して続行します。
次の画面では、Pi-holeがインターネットにアクセスするために使用するIPv4 gateway (router)を入力する必要があります。 サーバーのデフォルトゲートウェイのIPアドレスをここに入力します。 これは、ip
コマンドを2回実行したときに受け取った出力でvia
の後に来るStep 1からのIPアドレスです。
情報を入力したら、<Ok>を選択し、ENTER
を押します。
次の画面で、IP addressとGatewayが正しいことを確認してから、Pi-holeの構成に適用します。 変更が必要な場合は、<No>を選択し、ENTER
を押します。 それ以外の場合は、<Yes>を選択し、ENTER
を押してインストールを続行します。
コマンドラインインターフェイスに加えて、web admin interfaceを介してPi-holeを管理することもできます。 ウェブインターフェースの主な利点の1つは、ライブDNSクエリとブロック統計を表示できることです。
このチュートリアルではWebインターフェイスを使用してPi-holeを管理しますが、開発中にプロジェクトのさまざまなブランチをチェックアウトしたい場合、または単にターミナルセッションを介して作業したい場合は、Pi-holeのコマンドについて詳しく知ることができます。 -ラインインターフェイスin this official FAQ。
TAB
を使用して<Ok>を選択し、ENTER
を押します。
ライブDNSクエリとブロック統計を表示するweb admin interface’s機能を利用するには、Pi-holeをlog queriesに構成する必要があります。
これはデフォルト設定と推奨設定の両方であるため、TAB
を使用して<Ok>を選択し、ENTER
を押します。
この時点で、Pi-holeはブロックリストとブラックリストのデフォルトデータとともに残りの依存関係をダウンロードしてインストールします。 そこから、Pi-holeは前の画面で入力したすべてのネットワーク構成設定を適用します。
このステップの間に、Pi-holeはFirewall in useがあることを通知し、インストーラーはサービスが正しく機能するために必要なファイアウォール設定を受け入れるようにプロンプトを出します。
TAB
を使用して<Yes>を選択し、ENTER
を押します。
ここから、Pi-holeは単独でインストールを続行します。 終了すると、ダイアログのタイトルがInstallation Complete!に変わり、Pi-holeが自動的に開始され、ネットワーク上のすべてのDNSクエリのフィルタリングが開始されます。
ENTER
を押して、インストールウィザードを終了します。
Pi-holeのインストールと構成は完了しましたが、先に進む前に、すべてが期待どおりに機能していることをテストしましょう。
[[step-4 -—- testing-dns-filtering]] ==ステップ4—DNSフィルタリングのテスト
OpenVPNとPi-holeの両方が完全にセットアップされて連携すると、ネットワークで行われたすべてのDNS要求がPi-holeに転送され、要求されたドメインがブロックリストまたはブラックリスト。 その場合、フィルターはドメインを完全に削除します。そうでない場合、フィルターはドメインの通過を許可します。
Pi-holeはOpenVPNで動作するようにまだ構成されていませんが、サーバーから広告配信ドメインをフィルタリングするPi-holeの機能をテストすることにより、現在のインストールを確認できます。
テストを実行するには、host
コマンドを使用してgoogle.com
でDNSルックアップを実行し、クエリするネームサーバーとしてデフォルトゲートウェイ10.8.0.1
を指定します。 これにより、リクエストがPi-holeのフィルターを通過します。
host google.com 10.8.0.1
出力にはドメインのパブリックIPアドレスが含まれているため、google.com
がブロックリストまたはブラックリストのどのドメインとも一致しなかったことがわかります。
Output from host google.com 10.8.0.1...
google.com has address 216.58.194.174
...
ここで、host
コマンドを再試行します。今回は、既知の広告配信ドメインであるpagead2.googlesyndication.com
を渡します。
host pagead2.googlesyndication.com 10.8.0.1
ドメインのパブリックIPアドレスではなく、今回はデフォルトゲートウェイのアドレスを取得します。 これは、Pi-holeが広告配信ドメインを正常に識別し、リクエストをドロップして応答したことを意味します。
Output from host pagead2.googlesyndication.com 10.8.0.1...
pagead2.googlesyndication.com has address 10.8.0.1
...
出力にデフォルトゲートウェイのアドレスが表示されない場合は、クエリするネームサーバーとして10.8.0.1
が含まれていることを再確認してから、Pi-のインストールまたは起動に問題があったことを示すメッセージがないか端末を確認してください。穴。
Pi-holeが正しくインストールされ、リクエストがフィルタリングされるようになったため、OpenVPNを設定してDNSリクエストがPi-holeを指すようにします。
[[step-5 -—- configuring-openvpn]] ==ステップ5—OpenVPNの構成
OpenVPNは現在、インストール中にPrerequisitesで指定したDNSサーバーにすべてのDNSトラフィックを転送するように構成されています。 広告ブロッカーとしてPi-holeを使用するには、代わりにOpenVPNを再構成してDNSトラフィックをPi-holeに向ける必要があります。
まず、OpenVPNのメイン構成ファイルを編集用に開きます。
sudo nano /etc/openvpn/server.conf
次の行を見つけます。
/etc/openvpn/server.conf
...
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
...
これらの設定により、DNS設定を含むDHCPオプションをVPNに接続されたクライアントにプッシュできます。
server.conf
に含まれる2つのdhcp-option
設定はデフォルトでコメント化されているため、後で再度参照する必要がある場合に備えて、そのままにしておきます。
ここで、OpenVPNに、すべてのDNS要求に10.8.0.1
にあるPi-holeを使用するようにクライアントに指示する新しい設定を追加します。
/etc/openvpn/server.conf
...
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 10.8.0.1"
...
ファイルを保存して閉じ、続行します。
変更を適用するには、OpenVPNをリロードします。
sudo systemctl restart openvpn@server
最後に、OpenVPNが正常にバックアップされたことをテストします。
sudo systemctl status openvpn@server
すべてが機能した場合、出力はOpenVPNがactive (running)
であることを示します。
Output from systmctl...
Active: active (running) since Mon 2017-11-27 22:08:43 UTC; 1 day 23h ago
...
サービスの開始に失敗した場合は、前の手順に戻って問題を解決してください。
OpenVPNは現在、DNS要求をPi-holeに送信するように構成されていますが、ファイアウォールを調整してすべてを機能させる必要があります。
[[step-6 -—- adjusting-firewall-rules]] ==ステップ6—ファイアウォールルールの調整
Pi-holeとOpenVPNの両方が構成され、実行されているので、ポート53
を開いて、Pi-holeのフィルターを通過したDNS要求がアップストリームDNSサーバーに続行できるようにします。
sudo ufw allow 53
Webブラウジングが正しく機能するには、HTTPおよびHTTPSトラフィック用のファイアウォールを開きます。
sudo ufw allow http
sudo ufw allow https
次に、ポート53
の10.8.0.0/24
から10.8.0.1
のIP範囲で発生するすべてのudp
とtcp
の送信を許可するようにUFWに指示します。 これにより、VPNのIP範囲からのDNSクエリがフィルタリングのためにPi-holeに渡されます。
sudo ufw allow proto udp from 10.8.0.0/24 to 10.8.0.1 port 53
sudo ufw allow proto tcp from 10.8.0.0/24 to 10.8.0.1 port 53
同様に、10.8.0.0/24
IP範囲で発信されたWebトラフィックが、ポート80
の10.8.0.1
でVPNサーバーを通過できるようにします。
sudo ufw allow proto tcp from 10.8.0.0/24 to 10.8.0.1 port 80
変更を適用するには、UFWをリロードします。
sudo ufw reload
成功すると、出力は次のようになります。
Output from ufw reloadFirewall reloaded
問題が発生した場合は、画面上のメッセージに従って問題を解決してください。
ファイアウォールがOpenVPNとPi-hole用に構成されたので、Web管理インターフェースにログインして、Pi-holeのフィルタリング機能を調べることができます。
[[step-7 -—- filtering-with-block-lists]] ==ステップ7—ブロックリストを使用したフィルタリング
Pi-holeには、プロジェクトの開発チームが管理するデフォルトのブロックリストのセットが付属しています。ただし、これらのリストだけでは必ずしも十分ではありません。 理想的には、特定の閲覧習慣と使用するアプリケーションに合わせてブロックリストを調整する必要があります。 Pi-holeの管理ウェブインターフェースでブロックリストなどを管理できます。
Webインターフェイスを介してPi-holeを管理するには、最初にconnect to your OpenVPN networkを実行する必要があります。 接続したら、WebブラウザをWebインターフェイスのデフォルトのホームページ(http://10.8.0.1/admin
)に移動します。
Queries Blocked Last 24 Hoursの数、Queries Last 24 Hoursの数、Queries Blocked Last 24 Hoursの割合、およびDomains on Blocklistsの数を報告するウィジェットを含む画面が表示されます。 また、Queries over last 24 hoursのチャート、Pi-holeStatusインジケーター、およびDashboard、Login画面、およびDonateのナビゲーションオプションも表示されます。 PayPalのページ。
Loginをクリックして、完全なインターフェースにアクセスします。 プロンプトが表示されたら、最後のPi-holeインストール画面で受け取ったパスワードをStep 3で入力します。
ログイン後、インターフェースの一般的なレイアウトは同じままですが、画面の左側にメニューオプションが追加され、Query Types over TimeとForward Destinations over Timeのウィジェットが追加されます。
追加のブロックリストをPi-holeに追加する前に、プロジェクトのメンテナーから公式のブロックリストデータを更新する必要があります。最新の更新には、手動で追加するデータソースの一部またはすべてが含まれている可能性があります。
画面の左側で、Toolsをクリックしてナビゲーションメニューを展開し、Update Listsを選択します。
次の画面で、画面中央の青いUpdate Listsボタンをクリックして、公式ブロックリストソースの最新バージョンを取得します。
Pi-holeが更新を実行すると、リストデータを取得するソース、前回の更新以降ソースが変更されているかどうか、インストールにデータがインポートされたかどうかが表示されます。 完了すると、画面上部の緑色のバーにSuccess!と表示されます。
公式のブロックリストデータが更新されたら、独自のブロックリストを追加できます。
画面左側のナビゲーションメニューでSettingsをクリックすると、Pi-holeの主な構成オプションが表示されます。
次の画面で、Pi-Hole’s Block Listsというラベルの付いたボックスの+記号をクリックして、現在のブロックリストデータを表示します。
デフォルトでは、Pi-holeはフィルタリングに次のブロックリストを使用します。
インストールに新しいリストを追加するには、ペインの下部にある入力フィールドにリストのソースURLを入力し、Save and Updateボタンを押して追加を保存し、Update Lists関数を再実行します。 これにより、新しいブロックリストソースに関連付けられたデータが自動的に取り込まれます。
疑わしいリスト、広告リスト、追跡およびテレメトリリストなど、カテゴリに分類された追加のブロックリストについては、The Big Blocklist Collectionを参照してください。
デフォルトのブロックリストを更新し、手動でさらに追加する方法を学習したので、ブラックリストとホワイトリストを使用したリクエストのフィルタリングを見てみましょう。
[[step-8 -—- filtering-with-blacklists-and-whitelists]] ==ステップ8—ブラックリストとホワイトリストによるフィルタリング
Pi-holeがDNS要求をフィルタリングするために使用するブロックリストに加えて、ブラックリストで個々のドメインをターゲットにすることもできます。 ブラックリストは、特定のドメインとの間で送受信されるリクエストを自動的にドロップします。 これは、仕事に適していないコンテンツやウイルスやその他のマルウェアをホストしていることが知られているコンテンツを含むドメインをブロックする必要がある企業やその他の組織にとって特に役立ちます。
ドメインをブラックリストに登録するには、画面左側のメインナビゲーションでBlacklistをクリックします。
次の画面で、exactまたはwildcardブロッキングをドメインに追加できます。
exactがブロックされると、Add a domain入力フィールドに入力した値と完全に一致するドメインのみがブロックされます。 つまり、入力フィールドにexample.com
を入力すると、example.com
との間で行われた要求はブロックされますが、www.example.com
との間で行われた要求はブロックされません。
wildcardがブロックされると、入力したドメインと関連するsubdomainsの両方がブロックされます。 この場合、example.com
とwww.example.com
の両方がブロックされることを意味します。
Add a domain入力フィールドにpi-hole.net
を入力してブラックリスト機能をテストし、Add (exact)ボタンをクリックします。 pi-hole.netは、Blacklist画面のExact blockingの下に表示されるようになりました。
pi-hole.net
との間で行われたすべての要求は、Pi-holeのブラックリストフィルターによってブロックされるようになりました。 Webブラウザをhttps://pi-hole.net
に移動してみてください。 エラーメッセージはブラウザごとに異なりますが、このアドレスにアクセスすることはできなくなります。
Exact blockingからpi-hole.net
を削除するには、ドメインの右側にある白いゴミ箱アイコンが付いた赤いボタンをクリックします。
スペクトルの反対側では、ホワイトリストはPi-holeに、特定のドメインとの間のすべてのリクエストが常にフィルターを通過できるように指示します。 ホワイトリストは、正当なドメインが使用中のブロックリストに含まれる場合、または広告ベースのコンテンツと広告以外のコンテンツが混在するドメインとの間のトラフィックを許可する場合に役立ちます。
ドメインをホワイトリストに登録するには、画面の左側にあるメインナビゲーションでWhitelistをクリックします。
次の画面で、ホワイトリストに登録する新しいドメインを追加し、どのドメインがすでにホワイトリストに登録されているかを確認できます。
自分でドメインをまだホワイトリストに登録していない場合でも、デフォルトでは、Pi-holeはブロックリストの更新に使用するドメインをホワイトリストに登録します。 これは、あるブロックリストが別のブロックリストをブロックしないようにするためです。
さらに、ワイルドカードでブロックされたドメインのサブドメインをホワイトリストに登録できないことを説明するNoteに注意してください。 つまり、example.com
にワイルドカードブロックが既に存在する場合でも、www.example.com
をホワイトリストに登録しても、サブドメインにアクセスすることはできません。 example.com
をブラックリストに登録し、www.example.com
をホワイトリストに登録するには、代わりに正確なブロックをexample.com
に適用する必要があります。
ドメインをホワイトリストに登録するには、Add a domain入力フィールドにドメインを入力してから、Addボタンを押します。 Pi-holeは、Adding to the Whitelist …という1つのメッセージを短時間点滅させた後、Success! The list will refreshという2番目のメッセージを点滅させます。 両方のメッセージが消え、ホワイトリストに登録されたドメインのリストに入力したドメインが含まれます。
ホワイトリストからドメインを削除するには、ホワイトリストに登録したくないドメインの右側にある白いゴミ箱アイコンの付いた赤いボタンをクリックします。
最後に、インストールのブラックリストとホワイトリストの機能をテストするには、Pi-holeのpages to test your setup’s ad-blocking performanceの公式リストを参照してください。
結論
これで、ネットワーク上のDNS要求をフィルタリングするシンプルで効果的な方法が得られましたが、個人のブラウジングの習慣に合わせてブロックリストを少し調整する必要がある場合があることに注意してください。
Pi-holeを実行する別の方法については、this project that puts Pi-hole in a Docker containerを参照してください。
または、ネットワークセキュリティをさらに強化するには、現在のPi-holeインストールでenable DNSCryptを実行して、プライベートで安全なintranetを作成する方法を確認してください。
一般的な情報やその他の質問については、the official Pi-hole discussion forumにアクセスしてください。