GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu 20.04 / 18.04でDNSプライバシーを保護する(DNS over TLS)

このチュートリアルでは、 DNS overTLSを使用してUbuntu20.04/18.04デスクトップでDNSプライバシーを保護する方法を説明します。 。 stubbyというツールを使用します それを達成するために。しかし、最初に、DNSが安全でない理由をお話ししましょう。

DNSの脆弱性

DNSクエリは暗号化されていないため、DNSは安全ではありません。これは、中間エンティティによって悪用される可能性があります。 DNSキャッシュポイズンは、中国のインターネットを検閲するためにグレートファイアウォールオブチャイナ(GFW)によって広く使用されているDNSの悪用の1つです。 GFWは、中国国外のDNSサーバーに送信されるすべてのDNSクエリをチェックします。プレーンテキストのDNSプロトコルはコネクションレス型プロトコルであるUDPに基づいているため、GFWはクライアントIPとサーバーIPの両方をスプーフィングできます。 GFWは、ブロックリストでドメイン名を見つけると、DNS応答を変更します。たとえば、中国のインターネットユーザーがgoogle.comにアクセスしたい場合、中国のグレートファイアウォールは、Googleの実際のIPアドレスではなく、中国にあるIPアドレスをDNSリゾルバーに返します。次に、DNSリゾルバーは偽のIPアドレスをユーザーのコンピューターに返します。

DNS over TLSとは何ですか?プライバシーをどのように保護しますか?

DNS over TLSは、DNSクエリがTLSで暗号化された安全な接続を介して送信されることを意味します。これは、HTTPトラフィックを暗号化するのと同じテクノロジーであるため、第三者がDNSクエリを見ることができません。 HTTPSおよび暗号化されたSNI(Server Name Indication)とともに、閲覧履歴はISPスパイから完全に保護されます。

Stubbyは、getdnsチームによって開発されたオープンソースのDNSスタブリゾルバーです。 getdnsライブラリを使用します。スタブリゾルバーは、FirefoxなどのアプリケーションからDNS要求を受信し、1.1.1.1や8.8.8.8などの再帰的リゾルバーに要求を転送するエンドユーザーのコンピューター上の小さなDNSクライアントです。 Stubbyは、DNSoverTLSをサポートするという点で特別です。デフォルトでは、暗号化されたDNSリクエストのみを送信します。 cloudflaredと呼ばれる別のオープンソーススタブリゾルバーがあります DNS over HTTPSをサポートしていますが、stubbyはすでにUbuntu 20.04 / 18.04リポジトリにあり、非常に使いやすいです。

Ubuntu 20.04/18.04デスクトップにStubbyをインストールして使用する方法

StubbyはUbuntu20.04/18.04リポジトリにあります。ターミナルウィンドウを開き、次のコマンドを実行してインストールします。

sudo apt install stubby

これにより、ずんぐりしたものと getdnsがインストールされます 図書館。インストールすると、スタビーはバックグラウンドで実行されます。次のコマンドでステータスを確認します:

systemctl status stubby

Stubbyは、次のコマンドを実行するとわかるように、ローカルホスト(127.0.0.1)のTCPおよびUDPポート53でリッスンします。

sudo netstat -lnptu | grep stubby

systemd-resolvedによって提供されるデフォルトのスタブリゾルバー 127.0.0.53のTCPおよびUDPポート53でリッスンします。

sudo netstat -lnptu | grep systemd-resolv

注:dnsmasqが127.0.0.1のTCPポート53でリッスンしている場合、Stubbyは127.0.0.1のUDPポート53でのみリッスンします。

メインの設定ファイルは/etc/stubby/stubby.ymlです。 。通常、別のリゾルバまたは独自の再帰リゾルバを使用する場合を除いて、変更を加える必要はありません。いくつかのデフォルト構成について説明します。次のコマンドでファイルを開くことができます:

sudo nano /etc/stubby/stubby.yml

次の行は、stubbyを完全な再帰的リゾルバーではなくスタブリゾルバーとして実行するため、stubbyという名前が付けられています。

resolution_type: GETDNS_RESOLUTION_STUB

次の構成では、TLSで暗号化されたDNSクエリをずんぐりして送信します。プレーンテキストでクエリを送信することはありません。

dns_transport_list:
- GETDNS_TRANSPORT_TLS

この次の行には、リモート再帰リゾルバーに有効なTLS証明書が必要です。

tls_authentication: GETDNS_AUTHENTICATION_REQUIRED

次の行は、スタビーデーモンのリッスンアドレスを設定します。デフォルトでは、IPv4とIPv6の両方が有効になっています。

listen_addresses:
- 127.0.0.1
- 0::1

次の行は、ラウンドロビン方式でずんぐりしたクエリの再帰的リゾルバを作成します。 0に設定されている場合 、Stubbyは、使用できなくなるまで各アップストリームサーバーを順番に使用し、次に次のサーバーを使用します。

round_robin_upstreams: 1

デフォルトでは、スタビー構成ファイルで3つの再帰リゾルバーが有効になっています。それらはずんぐりした開発者によって実行され、TLSを介したDNSをサポートします。推奨されるサーバーの完全なリストは、DNSプライバシーWebサイトで確認できます。

dnsovertls.sinodun.com     145.100.185.15
dnsovertls1.sinodun.com    145.100.185.16
getdnsapi.net              185.49.141.37

追加サーバーには他のDNSサーバーがあります デフォルトで無効になっているセクション。

dns.quad9.net
unicast.censurfridns.dk
dnsovertls3.sinodun.com (supporting TLS1.2 and TLS 1.3)
dnsovertls2.sinodun.com
dns.cmrg.net
dns.larsdebruin.net
......

ポート443でリッスンしているDNSサーバーもあります。ネットワークでポート853がブロックされている場合は、それらのサーバーのコメントを解除して、これらのサーバーを使用できます。

dnsovertls.sinodun.com
dnsovertls1.sinodun.com
dns.cmrg.net
dns.neutopia.org

これで、 Ctrl + Xを押してnanoテキストエディタを終了できます。 。

スタビーへの切り替え

/etc/resolve.confの編集 ネームサーバーを変更するファイルはもうお勧めしません。以下の手順に従って、 systemd-resolvedを作成します DNSクエリをずんぐりしたものに送信します。

GNOMEデスクトップ

デスクトップの右上隅にあるNetworkManagerアイコンをクリックします。次に、有線設定を選択します。 (Wi-Fiを使用している場合は、Wi-Fi設定を選択します。)

歯車ボタンをクリックします。

IPv4を選択します タブをクリックし、DNS設定で自動を切り替えます オフにすると、UbuntuシステムがルーターからDNSサーバーアドレスを取得できなくなります。 127.0.0.1と入力します DNSフィールドに入力します。 適用をクリックします ボタンをクリックして変更を保存します。

次に、NetworkManagerを再起動して、変更を有効にします。

sudo systemctl restart NetworkManager

再接続すると、Ubuntuシステムが DetailsのDNSサーバーとして127.0.0.1を使用していることがわかります。 タブ。

ユニティデスクトップ

推奨読書:Ubuntu 20.04/18.04にUnityデスクトップ環境をインストールする方法。

デスクトップの右上隅にあるネットワークマネージャーアイコンをクリックしてから、接続の編集をクリックします 。

接続名を選択し、歯車のアイコンをクリックします。

[IPv4設定]タブを選択し、 Automatic(DHCP)からメソッドを変更します 自動(DHCP)アドレスのみへ 、これにより、UbuntuシステムがルーターからDNSサーバーアドレスを取得できなくなります。次に、DNSサーバー(127.0.0.1)を指定します。 Stubbyは127.0.0.1でリッスンします。

変更を保存します。次に、NetworkManagerを再起動して、変更を有効にします。

sudo systemctl restart NetworkManager

再接続したら、Network Managerアイコンをもう一度クリックして、接続情報を選択します。 。 UbuntuシステムがDNSサーバーとして127.0.0.1を使用していることがわかります。

コマンドラインからDNSサーバーを変更する

デスクトップ環境でNetworkManagerを使用している限り、以下の方法を使用してDNSサーバーを変更できます。

ターミナルウィンドウを開き、NetworkManager接続プロファイルディレクトリに移動します。

cd /etc/NetworkManager/system-connections/

次に、システムで使用可能な接続名を一覧表示します。

ls

ご覧のとおり、システムにはいくつかの接続があり、そのうちの1つは有線接続です。一部はワイヤレス接続で、1つはVPN接続です。デスクトップコンピューターはイーサネットケーブルを介してルーターに接続されているため、 nanoを使用して有線接続プロファイルを編集する必要があります。 コマンドラインテキストエディタ。

sudo nano 'Wired connection 1'

コンピューターがWi-Fi経由で接続されている場合は、ワイヤレス接続プロファイルを編集する必要があります。このファイルで、 [ipv4]を見つけます 構成。デフォルトでは、次のようになります。

[ipv4]
dns-search=
method=auto

システムでStubbyを使用するには、構成を次のように変更します。

[ipv4]
dns=127.0.0.1;
dns-search=
ignore-auto-dns=true
method=auto

Nanoテキストエディタでファイルを保存するには、 Ctrl + Oを押します。 、Enterキーを押して確認します。 Ctrl + Xを押します 出る。次に、ネットワークマネージャーを再起動して、変更を有効にします。

sudo systemctl restart NetworkManager

次のコマンドを実行して、現在のDNSサーバーを確認できるようになりました。

systemd-resolve --status

サンプル出力:

Link 2 (enp5s0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 127.0.0.1

127.0.0.1がDNSサーバーとしてリストされている場合、システムはStubbyを使用しています。

DHCPサーバーによって提供されるDNS設定を無視する

Ubuntuサーバーエディションを使用する場合 、 systemdを構成できます DHCPサーバーによって提供されるDNS設定を無視して、システムが誤って間違ったDNSサーバーを使用しないようにします。

まず、ネットワークインターフェースのステータスを確認します。

networkctl status enp5s0

このインターフェースのネットワークファイルが表示されます。このネットワークファイルを編集します。

sudo nano /run/systemd/network/10-netplan-enp5s0.network

[DHCP]を見つけます セクションを作成し、次の行を追加します。

UseDNS=false

このように:

[DHCP]
RouteMetric=100
UseMTU=true
UseDNS=false

ファイルを保存して閉じます。次に、 systemd-netweorkd.serviceを再起動します 変更を有効にするため。

sudo systemctl restart systemd-networkd

次のコマンドを実行して、各ネットワークインターフェイスのDNSサーバーを確認します。すべてが正しければ、DHCPサーバーによって提供されるDNSサーバーは表示されません。

resolvectl status

ネットワークファイルの変更は、新しいパッケージの更新によって上書きできます。サーバーがnetplanを使用している場合 ネットワーク接続を管理するために、DHCPDNS設定を無視するようにnetplanを構成することもできます。

sudo nano /etc/netplan/50-cloud-init.yaml

次の2行をファイルに追加します。

       dhcp4-overrides:
           use-dns: no

このように:

network:
    ethernets:
        eth0:
            dhcp4: true
            dhcp4-overrides:
                use-dns: no
            optional: true
            set-name: eth0
            nameservers:
               search: [ invalid ]
               addresses: 127.0.0.1
    version: 2

ファイルを保存して閉じます。次に、変更を適用します。

sudo netplan apply

DNSトラフィックが暗号化されているかどうかを確認する方法

WireSharkを使用してDNSトラフィックを監視できます。 Ubuntu 20.04/18.04リポジトリからWireSharkをインストールします。

sudo apt install wireshark

「スーパーユーザー以外のユーザーがパケットをキャプチャできるようにする必要がありますか?」という質問が表示された場合は、「はい」と答えます。インストールしたら、次のコマンドを実行してユーザーアカウントをwiresharkグループに追加し、パケットをキャプチャできるようにします。

sudo adduser your-username wireshark

変更を有効にするには、ログアウトしてから再度ログインします。次に、アプリケーションメニューからWireSharkを開き、WireSharkでネットワークインターフェイスを選択します。たとえば、私のイーサネットインターフェイス名はenp5s0です。次に、 port 853と入力します キャプチャフィルターとして。これにより、WireSharkはDNSoverTLSで使用されるポートであるポート853でのみトラフィックをキャプチャします。

左上隅のボタンをクリックして、キャプチャを開始します。その後、ターミナルウィンドウで次のコマンドを実行し、 digを使用してドメイン名を照会します。 効用。たとえば、ドメイン名のAレコードをクエリできます。

dig A linuxbabe.com

これで、キャプチャされたDNSトラフィックをWireSharkで確認できます。ご覧のとおり、私のDNSクエリは 185.49.141.37に送信されました 、 145.100.185.15 および145.100.185.16 、スタビー構成ファイルで定義されている3つのデフォルトDNSリゾルバーです。接続はTCPを介して行われ、TLSで暗号化されました。これが私が望んでいることです。

DNSクエリが暗号化なしで送信された場合、コンピュータはポート53でDNSサーバーに接続します。ポート53を使用してパケットを再度キャプチャできます。 キャプチャフィルタとして使用しますが、WireSharkにはパケットが表示されません。これは、スタビーがDNSクエリを暗号化していることを意味します。

CloudFlareDNSをStubbyに追加する方法

コンピューターと3つのデフォルトDNSサーバーの間に高いレイテンシー(200ミリ秒以上)があるのに対し、CloudFlare DNSサーバー(1.1.1.1、1.0.0.1)では非常に低いレイテンシー(20ミリ秒未満)であることがわかりました。 CloudFlareはDNSoverTLSもサポートしています。 CloudFlare DNSサーバーを追加するには、ずんぐりした構成ファイルを編集します。

sudo nano /etc/stubby/stubby.yml

upload_recursive_servers:まで下にスクロールします セクションを作成し、他のDNSサーバーの上に次のテキストを追加します。

#CloudFlare servers
  - address_data: 1.1.1.1
    tls_auth_name: "cloudflare-dns.com"
  - address_data: 1.0.0.1
    tls_auth_name: "cloudflare-dns.com"

次に、次の行を見つけます。

round_robin_upstreams: 1

1を変更します 0へ 。これにより、ずんぐりした人は常にCloudFlareDNSサーバーを使用するようになります。 CloudFlareが利用できない場合、stubbyは他のDNSサーバーを使用します。ファイルを保存し、変更を有効にするためにスタビーを再起動します。

sudo systemctl restart stubby

DNSoverHTTPSサポート

Stubbyは、バージョン0.3でDNSoverHTTPSをサポートします。 Ubuntu20.10にはバージョン0.2.6が付属しています。 Stubbyのバージョンを確認するには、

を実行します。
stubby -V

Ubuntu
  1. Wine 6.15がリリースされました! Ubuntu 20.04 / 21.04/18.04にインストールする方法

  2. プライバシーを保護するための12のシンプルなツール

  3. Ubuntu 16.04/18.04でのMySQL/MariaDBルートパスワードのリセット

  1. Ubuntu 20.04/18.04にKodiMediaCenter19.0をインストールする方法

  2. Ubuntu 16.04 / Ubuntu 18.04、19.04にKDEPlasma5.16をインストールする方法

  3. Ubuntu 20.04/18.04にFlatpakをインストールする方法

  1. Ubuntu 16.04/18.04にSABnzbdUsenetクライアントをインストールする方法

  2. Ubuntu 20.04 /Ubuntu18.04にAndroidStudioをインストールする2つの方法

  3. Ubuntu 20.04/18.04で独自のWireGuardVPNサーバーをセットアップする