Ubuntu16.04でPi-holeとOpenVPNを使用してDNSレベルでアドバタイズメントをブロックする方法
序章
オンライン広告は、刺激を与えるだけでなく、デバイス上のマルウェアの潜在的な発生源でもあります。 アプリケーションごと/デバイスごとに広告をブロックするように設計されたプラグインがありますが、 DNSレベルで広告を停止すると、すべてのアプリケーションとデバイスで一度にはるかに完全なソリューションが提供されます。
Pi-hole — RaspberryPiシングルボードコンピューターで使用するために最初に作成されたDNSサーバー—広告配信ドメインへのリクエストを除外し、広告をブロックしてネットワークパフォーマンスを向上させます。 Pi-holeを使用すると、ネットワーク上で行われたすべてのDNS要求をアクティブに監視し、その場で要求をブロックできます。 この機能はWebブラウザーを超えて拡張され、適切なDNSクエリをターゲットにすることで他のアプリケーション内の広告を除外できます。
Pi-holeは、仮想プライベートネットワーク(VPN)と組み合わせて使用すると特に効果的です。 VPNは、クライアントとサーバー間の論理ネットワーク接続であるトンネルを介して接続を確立および維持します。 さらに、VPNが Secure Socket Layer (SSL)をサポートしている場合、トランザクション全体が暗号化され、データ送信用の安全なリンクが提供されます。
このチュートリアルでは、OpenVPNとPi-holeをインストールして構成し、ネットワークに接続されているすべてのデバイスに対して、ネットワーク全体のDNSベースの独自のプライベート広告ブロックフィルターとして機能します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
このUbuntu16.04初期サーバーセットアップチュートリアルに従って、2GBのメモリをセットアップした1台のUbuntu16.04サーバー(sudo非rootユーザーとファイアウォールを含む)。
-
このUbuntu16.04ガイド上のOpenVPNサーバーに従ってOpenVPNをインストールおよび構成します。
ステップ1—ネットワーク情報の収集
インストールを開始する前に、Pi-holeがVPNとの通信に使用するネットワーク情報を収集する必要があります。 Pi-holeのインストールプロセスがターミナルセッションを引き継ぐため、開始する前にこの情報を手元に用意しておくと、プロセス全体がはるかにスムーズに進みます。
まず、 ip
とのコマンド addr
と show
のIPアドレスを識別するサブコマンド tun0
、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アドレスのリース時間は変更されません。
次のIPアドレスをメモします inet
、これは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
次のIPアドレスをメモします via
、これはサーバーのデフォルトゲートウェイアドレスであるため。 Pi-holeをインストールするときは、これを知っておく必要があります。
ネットワーク情報が手元にあれば、Pi-holeをダウンロードしてインストールする準備が整います。
ステップ2—Pi-holeをダウンロードする
公式のインストール手順に従って、Gitを使用してGitHubのPi-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サーバーのアドレスを入力します。 これは、ステップ1の後に続くIPアドレスです。 inet
初めて実行したときに受け取った出力で ip
指図。
前提条件のUbuntu16.04上のOpenVPNサーバーガイドに従った場合、IPアドレスは次のスクリーンショットのものと同じである必要があります。 追加 /24
IPアドレスの末尾に追加して、VPNのサブネットマスクを指定します。
選択するENTER
続ける。
次の画面では、Pi-holeがインターネットにアクセスするために使用する IPv4ゲートウェイ(ルーター)を入力する必要があります。 サーバーのデフォルトゲートウェイのIPアドレスをここに入力します。 これは、ステップ1の後に続くIPアドレスです。 via
2回目に実行したときに受け取った出力で 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
DNSルックアップを実行するコマンド google.com
、デフォルトゲートウェイを指定し、 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-holeのインストールまたは起動に問題があったことを示すメッセージがないか端末を照会して確認します。
Pi-holeが正しくインストールされ、リクエストがフィルタリングされるようになったので、DNSリクエストがPi-holeを指すようにOpenVPNを構成するときが来ました。
ステップ5—OpenVPNの設定
OpenVPNは現在、前提条件でインストール中に指定したDNSサーバーにすべてのDNSトラフィックを転送するように構成されています。 Pi-holeを広告ブロッカーとして利用するには、代わりにDNSトラフィックがPi-holeを指すようにOpenVPNを再構成する必要があります。
まず、OpenVPNのメイン設定ファイルを開いて編集します。
- sudo nano /etc/openvpn/server.conf
次の行を見つけます。
...
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
...
これらの設定により、DNS設定を含むDHCPオプションをVPNに接続されているクライアントにプッシュできます。
二人として dhcp-option
に含まれる設定 server.conf
デフォルトではコメントアウトされていますが、後で再度参照する必要がある場合に備えて、そのままにしておきます。
次に、OpenVPNにクライアントにPi-holeを使用するように指示する新しい設定を追加します。 10.8.0.1
、すべてのDNS要求に対して。
...
;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
次に、UFWにすべてを許可するように指示します udp
と tcp
で発生する送信 10.8.0.0/24
に 10.8.0.1
ポートのIP範囲 53
. これにより、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
でVPNサーバーを通過するIP範囲 10.8.0.1
ポートで 80
.
- 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ブラウザを次のWebインターフェイスのデフォルトのホームページに移動します。 http://10.8.0.1/admin
.
過去24時間にブロックされたクエリの数、過去24時間にブロックされたクエリの数、過去24時間にブロックされたクエリの割合を報告するウィジェットを含む画面が表示されます、およびブロックリスト上のドメインの数。 過去24時間のクエリ、Pi-hole Status インジケーター、 Dashboard 、のナビゲーションオプションのチャートも表示されます。ログイン画面、およびPayPalのDonateページ。
ログインをクリックして、完全なインターフェースにアクセスします。 プロンプトが表示されたら、ステップ3の最後のPi-holeインストール画面で受け取ったパスワードを入力します。
ログイン後、インターフェースの一般的なレイアウトは同じままですが、画面の左側にメニューオプションが追加され、クエリタイプの時間および用のウィジェットが追加されます。 ]時間の経過に伴う宛先の転送。
Pi-holeにブロックリストを追加する前に、プロジェクトのメンテナからの公式ブロックリストデータを最初に更新する必要があります。最新の更新には、手動で追加しようとしているデータソースの一部またはすべてが含まれている可能性があるためです。
画面の左側で、ツールをクリックしてナビゲーションメニューを展開し、リストの更新を選択します。
次の画面で、画面中央の青いリストの更新ボタンをクリックして、公式のブロックリストソースの最新バージョンを取得します。
Pi-holeが更新を実行すると、リストデータを取得しているソース、前回の更新以降にソースが変更されているかどうか、インストールにデータがインポートされているかどうかが表示されます。 完了すると、画面上部の緑色のバーに Success!と表示されます。
公式のブロックリストデータが更新されたら、独自のブロックリストを追加する準備が整います。
画面左側のナビゲーションメニューで[設定]をクリックすると、Pi-holeの主な構成オプションが表示されます。
次の画面で、Pi-Holeのブロックリストというラベルの付いたボックスの+記号をクリックして、現在のブロックリストデータを表示します。
デフォルトでは、Pi-holeはフィルタリングに次のブロックリストを使用します。
- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
- https://mirror1.malwaredomains.com/files/justdomains
- http://sysctl.org/cameleon/hosts
- https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
- https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
- https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
- https://hosts-file.net/ad_servers.txt
インストールに新しいリストを追加するには、ペインの下部にある入力フィールドにリストのソースURLを入力し、保存して更新ボタンを押して追加を保存し、を再実行します。リストの更新機能。 これにより、新しいブロックリストソースに関連付けられたデータが自動的に取得されます。
疑わしいリスト、広告リスト、追跡およびテレメトリリストなど、カテゴリに分類された追加のブロックリストについては、を参照してください。 ビッグブロックリストコレクション 。
デフォルトのブロックリストを更新し、手動でさらに追加する方法を学習したので、ブラックリストとホワイトリストを使用したリクエストのフィルタリングを見てみましょう。
ステップ8—ブラックリストとホワイトリストによるフィルタリング
Pi-holeがDNS要求をフィルタリングするために使用するブロックリストに加えて、ブラックリストを使用して個々のドメインをターゲットにすることもできます。 ブラックリストは、特定のドメインとの間の送受信リクエストを自動的にドロップします。 これは、仕事に適さないコンテンツや、ウイルスやその他のマルウェアのホストとして知られているコンテンツを含むドメインをブロックする必要がある企業やその他の組織にとって特に便利です。
ドメインをブラックリストに登録するには、画面左側のメインナビゲーションでブラックリストをクリックします。
次の画面で、excateまたはwildcardブロッキングをドメインに追加できます。
excate ブロッキングを使用すると、 Add adomain入力フィールドに入力した値と完全に一致するドメインのみがブロックされます。 言い換えれば、あなたが入力した場合 example.com
入力フィールドで、次に行われた要求とからの要求 example.com
ブロックされますが、 www.example.com
しない。
ワイルドカードブロックを使用すると、入力したドメインと関連するサブドメインの両方がブロックされます。 この場合、それは両方を意味します example.com
と www.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ディスカッションフォーラムにアクセスしてください。