Ubuntu16.04でPi-holeとOpenVPNを使用してDNSレベルでアドバタイズメントをブロックする方法

提供:Dev Guides
移動先:案内検索

序章

オンライン広告は、刺激を与えるだけでなく、デバイス上のマルウェアの潜在的な発生源でもあります。 アプリケーションごと/デバイスごとに広告をブロックするように設計されたプラグインがありますが、 DNSレベルで広告を停止すると、すべてのアプリケーションとデバイスで一度にはるかに完全なソリューションが提供されます。

Pi-holeRaspberryPiシングルボードコンピューターで使用するために最初に作成されたDNSサーバー—広告配信ドメインへのリクエストを除外し、広告をブロックしてネットワークパフォーマンスを向上させます。 Pi-holeを使用すると、ネットワーク上で行われたすべてのDNS要求をアクティブに監視し、その場で要求をブロックできます。 この機能はWebブラウザーを超えて拡張され、適切なDNSクエリをターゲットにすることで他のアプリケーション内の広告を除外できます。

Pi-holeは、仮想プライベートネットワーク(VPN)と組み合わせて使用すると特に効果的です。 VPNは、クライアントとサーバー間の論理ネットワーク接続であるトンネルを介して接続を確立および維持します。 さらに、VPNが Secure Socket Layer (SSL)をサポートしている場合、トランザクション全体が暗号化され、データ送信用の安全なリンクが提供されます。

このチュートリアルでは、OpenVPNとPi-holeをインストールして構成し、ネットワークに接続されているすべてのデバイスに対して、ネットワーク全体のDNSベースの独自のプライベート広告ブロックフィルターとして機能します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

ステップ1—ネットワーク情報の収集

インストールを開始する前に、Pi-holeがVPNとの通信に使用するネットワーク情報を収集する必要があります。 Pi-holeのインストールプロセスがターミナルセッションを引き継ぐため、開始する前にこの情報を手元に用意しておくと、プロセス全体がはるかにスムーズに進みます。

まず、ipコマンドをaddrおよびshowサブコマンドとともに使用して、tun0ネットワークインターフェイスのIPアドレスを特定します。 VPNトンネルがアクティブになっています。

ip addr show tun0

出力は、インターフェースに関する詳細情報を提供します。

Output from ip addr show tun01: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> 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行目は、現在このインターフェイスで使用できるリンク層デバイスがないことを示しています。
  • 3行目には、このネットワークインターフェイスのIPアドレス値が含まれています。
  • 4行目は、インターフェイスのIPv6の有効な有効期間と優先リース期間の両方がforeverに設定されていることを示しています。 この場合、アドレスはVPNのインストール中にインターフェイスに特別に割り当てられたため、IPアドレスのリース時間は変更されません。

inetに続くIPアドレスをメモします。これは、VPNサーバーのアドレスです。 Pi-holeをインストールするときは、これを知っておく必要があります。

VPNサーバーのIPアドレスに加えて、Pi-holeはIPv4トラフィックに使用するゲートウェイも知っている必要があります。 ゲートウェイは、異なるネットワーク間のアクセスポイントと考えることができます。

ipコマンドをもう一度使用します。今回は、routeおよびshowサブコマンドを使用して、サーバーのルーティングテーブル情報を取得します。 ルーティングテーブル情報grepにパイプします。これにより、出力で文字列defaultが解析および検索されます。 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をダウンロードしてインストールする準備が整います。

ステップ2—Pi-holeをダウンロードする

公式インストール手順に従って、Gitを使用してGitHubPi-holeリポジトリを~/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をインストールして構成する時が来ました。

ステップ3—インストールスクリプトの実行

Pi-holeのインストールと構成は、端末ベースのウィザードを使用して行われます。 次のコマンドでウィザードを開始します。

bash basic-install.sh

まず、インストールスクリプトは、パッケージのインストールであり、インストールに必要な追加のファイルを取得していることを示しています。

次の画面は、 Pi-hole自動インストーラーからのメッセージで、ネットワーク全体の広告ブロッカーをインストールしていることを通知します。

ENTERを押して続行します。

次に、インストールウィザードは、Pi-holeがフリーでオープンソースであることを通知し、Pi-holeプロジェクトに寄付する方法を通知します。

ENTERを押してインストールを続行します。

インストールスクリプトは、サービスが正しく機能するために静的IPアドレスが必要であることを通知します。

もう一度、ENTERを押して続行します。

次の画面では、'Pi-holeがリッスンするインターフェイスを選択するように求められます。 VPNのネットワークインターフェースを監視するにはPi-holeが必要なため、キーボードの矢印キーを使用して tun0 を強調表示し、SPACEを押して選択します。 次に、TABを押して、画面下部のオプションにジャンプします。 と'強調表示して、を押しますENTER設定を保存して続行します。

ウィザードで、アップストリームDNSプロバイダーを指定するように求められます。 これは、Pi-holeがドメイン名を解決するために使用するサービスです。 わかりやすくするために、この設定をデフォルト値のGoogleのままにしておくことができます。

プレスTAB画面の下部にジャンプするには、を押しますENTERいつ'が強調表示されます。

次の画面で、Pi-holeは、フィルタリングするインターネットプロトコルを選択するように求めます。 IPv4やIPv6などのプロトコルは、パケットの技術的な形式と、コンピューターがネットワークを介して通信するためのアドレス指定スキームを指定します。 IPv4は、デバイスをネットワークに接続するために最も広く採用されているインターネットプロトコルです。

Pi-holeを効果的に実行するには、IPv4とIPv6の両方をフィルタリングする必要があるため、両方のプロトコルを選択したまま、TABを押して画面下部のオプションにジャンプします。 選択する'次にを押しますENTER

Pi-holeは、現在のネットワーク設定を静的IPアドレスとして使用するかどうかを尋ねます。 VPNを利用するにはPi-holeが必要なので、次の画面でこの情報を手動で入力します。

矢印キーを使用して選択します'次にを押しますENTER

Pi-holeは、IPv4アドレスの入力を求めるプロンプトを表示します。 ここにVPNサーバーのアドレスを入力します。 これは、ipコマンドを最初に実行したときに受け取った出力のinetの後に続くステップ1のIPアドレスです。

前提条件Ubuntu16.04上のOpenVPNサーバーガイドに従った場合、IPアドレスは次のスクリーンショットのものと同じである必要があります。 IPアドレスの末尾に/24を追加して、VPNのサブネットマスクを指定します。

選択する'を押してENTER続ける。

次の画面では、Pi-holeがインターネットにアクセスするために使用する IPv4ゲートウェイ(ルーター)を入力する必要があります。 サーバーのデフォルトゲートウェイのIPアドレスをここに入力します。 これは、ipコマンドを2回実行したときに受信した出力のviaの後に続くステップ1のIPアドレスです。

選択する'を押してENTER情報を入力した後。

次の画面で、IPアドレスゲートウェイが正しいことを確認してからPi-holeの構成に適用します。 変更が必要な場合は、' を押してENTER 。 それ以外の場合は、' を押してENTERインストールを続行します。

コマンドラインインターフェイスに加えて、Web管理インターフェイスを介してPi-holeを管理することもできます。 Webインターフェイスの主な利点の1つは、ライブDNSクエリとブロッキング統計を表示できることです。

デフォルトでは、Web管理インターフェースOnに設定されています。 これは推奨設定であり、このチュートリアルのステップ7ステップ8に必要です。

このチュートリアルではWebインターフェイスを使用してPi-holeを管理しますが、開発中にプロジェクトのさまざまなブランチを確認したい場合、または単にターミナルセッションを介して作業したい場合は、Pi-holeのコマンドについて詳しく知ることができます。 -この公式FAQのラインインターフェイス

使用するTAB選ぶ'次にを押しますENTER

Web管理インターフェイスの機能を使用してライブDNSクエリとブロック統計を表示するには、ログクエリにPi-holeを構成する必要があります。

これはデフォルト設定と推奨設定の両方であるため、TAB 選ぶ'次にを押しますENTER

この時点で、Pi-holeは、ブロックリストとブラックリストのデフォルトデータとともに、残りの依存関係をダウンロードしてインストールします。 そこから、Pi-holeは前の画面で入力したすべてのネットワーク構成設定を適用します。

この手順の間に、Pi-holeはファイアウォールが使用中であることを通知し、インストーラーはサービスが正しく機能するために必要なファイアウォール設定を受け入れるようにプロンプトを出します。

使用するTAB選ぶ'次にを押しますENTER

ここから、Pi-holeは独自にインストールを続行します。 終了すると、ダイアログのタイトルがインストール完了!に変わり、Pi-holeが自動的に開始され、ネットワーク上のすべてのDNSクエリのフィルタリングが開始されます。

ENTERを押して、インストールウィザードを終了します。

これでPi-holeがインストールおよび構成されましたが、先に進む前に、すべてが期待どおりに機能していることをテストしましょう。

ステップ4—DNSフィルタリングのテスト

OpenVPNとPi-holeの両方が完全にセットアップされ、連携している場合、ネットワーク上で行われたすべてのDNS要求はPi-holeに転送され、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が正しくインストールされ、リクエストがフィルタリングされるようになったので、DNSリクエストがPi-holeを指すようにOpenVPNを構成するときが来ました。

ステップ5—OpenVPNの設定

OpenVPNは現在、前提条件でインストール中に指定したDNSサーバーにすべてのDNSトラフィックを転送するように構成されています。 Pi-holeを広告ブロッカーとして利用するには、代わりにDNSトラフィックがPi-holeを指すようにOpenVPNを再構成する必要があります。

まず、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設定はデフォルトでコメント化されているため、後で再度参照する必要がある場合に備えて、そのままにしておきます。

ここで、すべてのDNS要求に10.8.0.1にあるPi-holeを使用するようにクライアントに指示するようにOpenVPNに指示する新しい設定を追加します。

/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に送信するように構成されましたが、すべてを機能させるにはファイアウォールを調整する必要があります。

ステップ6—ファイアウォールルールの調整

Pi-holeとOpenVPNの両方が構成され、実行されているので、ポート53を開いて、Pi-holeのフィルターを通過したDNS要求がアップストリームDNSサーバーに続行できるようにします。

sudo ufw allow 53

Webブラウジングを正しく機能させるには、HTTPおよびHTTPSトラフィック用のファイアウォールを開きます。

sudo ufw allow http
sudo ufw allow https

次に、ポート5310.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トラフィックが、ポート8010.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のフィルタリング機能を調べることができます。

ステップ7—ブロックリストを使用したフィルタリング

Pi-holeには、プロジェクトの開発チームによって維持されている一連のデフォルトのブロックリストが付属しています。 ただし、これらのリストだけでは必ずしも十分ではありません。 理想的には、特定の閲覧習慣や使用するアプリケーションに合わせてブロックリストを調整する必要があります。 Pi-holeの管理Webインターフェイスを使用して、ブロックリストなどを管理できます。

ウェブインターフェースを介してPi-holeを管理するには、最初にOpenVPNネットワークに接続する必要があります。 接続したら、Webブラウザをhttp://10.8.0.1/adminにあるWebインターフェイスのデフォルトのホームページに移動します。

過去24時間にブロックされたクエリの数過去24時間にブロックされたクエリの数過去24時間にブロックされたクエリの割合を報告するウィジェットを含む画面が表示されます、およびブロックリスト上のドメインの数過去24時間のクエリ、Pi-hole Status インジケーター、 Dashboardのナビゲーションオプションのチャートも表示されます。ログイン画面、およびPayPalのDonateページ。

ログインをクリックして、完全なインターフェースにアクセスします。 プロンプトが表示されたら、ステップ3の最後のPi-holeインストール画面で受け取ったパスワードを入力します。

ログイン後、インターフェースの一般的なレイアウトは同じままですが、画面の左側にメニューオプションが追加され、クエリタイプの時間および用のウィジェットが追加されます。 ]時間の経過に伴う宛先の転送

Pi-holeにブロックリストを追加する前に、プロジェクトのメンテナからの公式ブロックリストデータを最初に更新する必要があります。最新の更新には、手動で追加しようとしているデータソースの一部またはすべてが含まれている可能性があるためです。

画面の左側で、ツールをクリックしてナビゲーションメニューを展開し、リストの更新を選択します。

次の画面で、画面中央の青いリストの更新ボタンをクリックして、公式のブロックリストソースの最新バージョンを取得します。

Pi-holeが更新を実行すると、リストデータを取得しているソース、前回の更新以降にソースが変更されているかどうか、インストールにデータがインポートされているかどうかが表示されます。 完了すると、画面上部の緑色のバーに Success!と表示されます。

公式のブロックリストデータが更新されたら、独自のブロックリストを追加する準備が整います。

画面左側のナビゲーションメニューで[設定]をクリックすると、Pi-holeの主な構成オプションが表示されます。

次の画面で、Pi-Holeのブロックリストというラベルの付いたボックスの+記号をクリックして、現在のブロックリストデータを表示します。

デフォルトでは、Pi-holeはフィルタリングに次のブロックリストを使用します。

インストールに新しいリストを追加するには、ペインの下部にある入力フィールドにリストのソースURLを入力し、保存して更新ボタンを押して追加を保存し、を再実行します。リストの更新機能。 これにより、新しいブロックリストソースに関連付けられたデータが自動的に取得されます。

疑わしいリスト、広告リスト、追跡およびテレメトリリストなど、カテゴリに分類された追加のブロックリストについては、を参照してください。 ビッグブロックリストコレクション

デフォルトのブロックリストを更新し、手動でさらに追加する方法を学習したので、ブラックリストとホワイトリストを使用したリクエストのフィルタリングを見てみましょう。

ステップ8—ブラックリストとホワイトリストによるフィルタリング

Pi-holeがDNS要求をフィルタリングするために使用するブロックリストに加えて、ブラックリストを使用して個々のドメインをターゲットにすることもできます。 ブラックリストは、特定のドメインとの間の送受信リクエストを自動的にドロップします。 これは、仕事に適さないコンテンツや、ウイルスやその他のマルウェアのホストとして知られているコンテンツを含むドメインをブロックする必要がある企業やその他の組織にとって特に便利です。

ドメインをブラックリストに登録するには、画面左側のメインナビゲーションでブラックリストをクリックします。

次の画面で、excateまたはwildcardブロッキングをドメインに追加できます。

excate ブロッキングを使用すると、 Add adomain入力フィールドに入力した値と完全に一致するドメインのみがブロックされます。 つまり、入力フィールドにexample.comと入力すると、example.comとの間で行われたリクエストはブロックされますが、www.example.comとの間で行われたリクエストはブロックされません。

ワイルドカードブロックを使用すると、入力したドメインと関連するサブドメインの両方がブロックされます。 この場合、example.comwww.example.comの両方がブロックされることを意味します。

ドメインの追加入力フィールドにpi-hole.netと入力し、追加(正確)ボタンをクリックして、ブラックリストの機能をテストします。 pi-hole.net が、ブラックリスト画面の正確なブロッキングの下に表示されるようになりました。

pi-hole.netとの間で行われたすべてのリクエストは、Pi-holeのブラックリストフィルターによってブロックされるようになりました。 Webブラウザをhttps://pi-hole.netに移動してみてください。 エラーメッセージはブラウザごとに異なりますが、このアドレスにアクセスできなくなります。

正確なブロックからpi-hole.netを削除するには、ドメインの右側にある白いゴミ箱アイコンが付いた赤いボタンをクリックします。

スペクトルの反対側で、ホワイトリストはPi-holeに、特定のドメインとの間のすべての要求がそのフィルターを通過することを常に許可するように指示します。 ホワイトリストは、正当なドメインが使用しているブロックリストに含まれる場合や、広告ベースのコンテンツと広告以外のコンテンツが混在するドメインとの間のトラフィックを許可する場合に役立ちます。

ドメインをホワイトリストに登録するには、画面左側のメインナビゲーションでホワイトリストをクリックします。

次の画面で、ホワイトリストに登録する新しいドメインを追加して、どのドメインがすでにホワイトリストに登録されているかを確認できます。

自分でドメインをホワイトリストに登録していない場合でも、デフォルトでは、Pi-holeはブロックリストの更新に使用するドメインをホワイトリストに登録します。 これは、あるブロックリストが別のブロックリストをブロックしないようにするためです。

さらに、ワイルドカードでブロックされたドメインのサブドメインをホワイトリストに登録できないことを説明するに注意してください。 つまり、example.comにすでにワイルドカードブロックがある場合、www.example.comをホワイトリストに登録しても、サブドメインにアクセスすることはできません。 example.comをブラックリストに登録し、www.example.comをホワイトリストに登録するには、代わりにexample.comに正確なブロックを適用する必要があります。

ドメインをホワイトリストに登録するには、ドメインの追加入力フィールドにドメインを入力し、追加ボタンを押します。 Pi-holeは、次のような1つのメッセージを短時間点滅させます。 ホワイトリストへの追加… 、続いて、次のような2番目のメッセージが表示されます。 成功! リストが更新されます 。 その後、両方のメッセージが消え、ホワイトリストに登録されたドメインのリストに、入力したドメインが含まれます。

ホワイトリストからドメインを削除するには、ホワイトリストに登録したくないドメインの右側にある白いゴミ箱アイコンが付いた赤いボタンをクリックします。

最後に、インストールのブラックリストとホワイトリストの機能をテストするには、Pi-holeのページの公式リストを参照して、セットアップの広告ブロックパフォーマンスをテストしてください。

結論

これで、ネットワーク上のDNS要求をフィルタリングする簡単で効果的な方法ができましたが、個人のブラウジングの習慣に合わせてブロックリストを少し調整する必要がある場合があることに注意してください。

Pi-holeを実行する別の方法については、DockerコンテナーにPi-holeを配置するこのプロジェクトを参照してください。

または、ネットワークセキュリティをさらに強化するには、現在のPi-holeインストールでDNSCrypt 有効にして、プライベートで安全なイントラネットを作成する方法を確認してください。

一般的な情報やその他の質問については、公式のPi-holeディスカッションフォーラムにアクセスしてください。