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

UbuntuでNginxを使用してDNSoverTLSリゾルバーを簡単に設定する方法

このチュートリアルでは、独自の DNS overTLSを設定する方法を紹介します。 (DoT)Nginxを使用したUbuntuのリゾルバー。DNSクエリを暗号化して、詮索好きな目から保護できます。

DNSoverTLSとは何ですか。なぜそれが重要なのか

DNS(ドメインネームシステム)は、ドメイン名をIPアドレスに変換する役割を果たします。 1987年に設計され、セキュリティやプライバシーを考慮していません。デフォルトでは、DNSクエリは暗号化されていません。それらはネットワーク上でプレーンテキストで送信され、中間エンティティによって悪用される可能性があります。たとえば、中国のグレートファイアウォール( GFW DNSキャッシュポイズンと呼ばれる手法を使用します 中国のインターネットを検閲する。 (他の方法も使用しますが、この記事の範囲を超えています。)

GFWは、中国国外のDNSサーバーに送信されるすべてのDNSクエリをチェックします。プレーンテキストのDNSプロトコルはコネクションレス型プロトコルであるUDPに基づいているため、GFWはクライアントIPとサーバーIPの両方をスプーフィングできます。 GFWは、ブロックリストでドメイン名を見つけると、DNS応答を変更します。たとえば、中国のインターネットユーザーがgoogle.comにアクセスしたい場合、GFWはGoogleの実際のIPアドレスではなく中国にあるIPアドレスをユーザーのDNSリゾルバーに返します。次に、DNSリゾルバーが偽のIPアドレスをユーザーのコンピューターに返すため、ユーザーはgoogle.comにアクセスできません。

DNS over TLSは、DNSクエリがTLSで暗号化された安全な接続を介して送信されることを意味します。これは、HTTPトラフィックを暗号化するのと同じテクノロジーです。

独自のDoTリゾルバーを実行する理由

DNS over TLSをサポートする1​​.1.1.1や9.9.9.9などのパブリックDNSリゾルバーがすでにいくつかあるため、独自に実行するスキルや時間がない場合は、それらを使用できます。ただし、これにより、大規模なDNSサービスプロバイダーがユーザーに関する情報を収集できるようになると主張する人もいます。彼らはISPをより信頼しているようです。ただし、プライバシーに偏執的である場合は、独自のDoTリゾルバーを実行する必要があります。そうすれば、大規模なDNSサービスプロバイダーもISPもあなたをスパイすることはできません。

現在、すべてのDNSリゾルバー(BIND、Unbound、Knotリゾルバー、PowerDNSリゾルバーなど)がDNSoverTLSをサポートしているわけではありません。特定のリゾルバーのガイドを作成する代わりに、既存のDNSリゾルバーにNginx TLSプロキシを設定してDoTサービスを提供する方法を紹介します。したがって、使用しているDNSリゾルバーに関係なく、このチュートリアルに従うことができます。

前提条件

UbuntuサーバーでDNSリゾルバーが実行されていることを前提としています。任意のDNSリゾルバー(BIND、Unbound、Knotリゾルバー…)を使用できます。私は個人的にBINDを使用しています。

  • Ubuntu 16.04/18.04で独自のBIND9DNSリゾルバーを設定する
  • Ubuntu20.04で独自のBIND9DNSリゾルバーを設定する

DNSクライアントはDNSリゾルバーとの安全なTLS接続を確立する必要があるため、ドメイン名も必要です。ドメイン名をNameCheapから登録しました。これは、価格が低く、whoisのプライバシー保護が一生無料になるためです。

上記の要件を満たしたら、以下の手順に従ってください。

ステップ1:UbuntuサーバーにNginxをインストールする

とても簡単です。次のコマンドを実行するだけです。

sudo apt install nginx

ステップ2:Let’sEncryptから信頼できるTLS証明書を取得する

DNS over TLSでは、サーバー側にTLS証明書をインストールする必要があります。 Let'sEncrypt証明書を取得してインストールします。 Let’s Encrypt証明書を使用する利点は、無料で、セットアップが簡単で、クライアントソフトウェアによって信頼されていることです。

次のコマンドを実行して、デフォルトのUbuntuリポジトリからLet’s Encryptクライアント(certbot)をインストールします。

sudo apt install certbot

Let’s Encrypt TLS証明書を取得するには、次のコマンドを使用してNginx仮想ホストを作成できます。 dot.example.comを交換します あなた自身のドメイン名で。このサブドメインのDNSAレコードを作成することを忘れないでください。

sudo nano /etc/nginx/conf.d/dot.example.com.conf

次のテキストをコピーして、仮想ホストファイルに貼り付けます。

server {
      listen 80;
      server_name dot.example.com;

      root /usr/share/nginx/html/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

ファイルを保存して閉じます。変更を有効にするためにNginxをリロードします。

sudo systemctl reload nginx

仮想ホストを作成して有効にしたら、次のコマンドを実行して、webrootプラグインを使用してLet’sEncrypt証明書を取得します。

sudo certbot certonly --webroot --agree-tos --email [email protected] -d dot.example.com -w /usr/share/nginx/html/

ステップ3:NginxでDNSoverTLSプロキシを作成する

Nginxのメイン構成ファイルを編集します。

sudo nano /etc/nginx/nginx.conf

このファイルの最後に次の行を追加します。 httpの外に配置する必要があることに注意してください コンテキスト。

stream {
    # DNS upstream pool
    upstream dns {
        zone dns 64k;
        server 127.0.0.1:53;
    }

   # DoT server for decryption
   server {
        listen 853 ssl;
        ssl_certificate /etc/letsencrypt/live/dot.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/dot.example.com/privkey.pem;
        proxy_pass dns;
    }
}

上記の構成では、Nginxにポート853でTLS接続を終了させ、 127.0.0.1:53でリッスンしているローカルDNSリゾルバーにDNS要求をリダイレクトします。 。

ファイルを保存して閉じます。次に、Nginx構成をテストして再起動します。

sudo nginx -t
sudo systemctl restart nginx

Ubuntuサーバーでファイアウォールが実行されている場合は、TCPポート853を開く必要があります。たとえば、UFWファイアウォールを使用している場合は、次のコマンドを実行します。

sudo ufw allow 853/tcp

DNS over TLSを使用しているため、DNS増幅攻撃について心配する必要はありません。

ステップ5:UbuntuデスクトップでStubbyDoTクライアントを構成する

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

デフォルトのリポジトリからUbuntuデスクトップにStubbyをインストールします。

sudo apt install stubby

インストールすると、スタビーはバックグラウンドで実行されます。ステータスを確認する:

systemctl status stubby

Stubbyは、ローカルホスト(127.0.0.1)のTCPおよびUDPポート53でリッスンします。デフォルトでは、StubbyはサードパーティのDNSoverTLSリゾルバーを使用します。独自に使用するように構成する必要があります。

sudo nano /etc/stubby/stubby.yml

upload_recursive_servers:まで下にスクロールします セクションを作成し、他のDNSサーバーの上に次のテキストを追加します。 12.34.56.78をDoTリゾルバーのIPアドレスに置き換えます。

# My Own DNS over TLS resolver
  - address_data: 12.34.56.78
    tls_auth_name: "dot.example.com"

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

round_robin_upstreams: 1

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

sudo systemctl restart stubby

ステップ6:Stubbyを使用するようにUbuntuデスクトップを構成する

Stubbyは実行されていますが、オペレーティングシステムでは使用されていません。デスクトップの右上隅にある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を使用していることがわかります。 タブ。

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

WireSharkを使用してDNSトラフィックを監視できます。 Ubuntuデスクトップに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で確認できます。接続はTCPを介して行われ、TLSで暗号化されました。これは私たちが望んでいることです。 [宛先]列にDoTリゾルバーのIPアドレスが含まれているかどうかを確認する必要があります。

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


Ubuntu
  1. Ubuntu20.04でDNSネームサーバーを設定する方法

  2. Ubuntu18.04でDNSネームサーバーを設定する方法

  3. Ubuntu20.04でUnboundDNSリゾルバーを設定する方法

  1. Ubuntu20.04でUFWを使用してファイアウォールを設定する方法

  2. Ubuntu20.04でNginxサーバーブロックを設定する方法

  3. Ubuntu16.04にNginxでMediaWikiをインストールする方法

  1. Ubuntu15.10にNginxを使用してMagentoをインストールする方法

  2. Ubuntu15.10にNginxでMailpileをインストールする方法

  3. Ubuntu15.10でNginxを使用してRedmine3をインストールする方法