第5章 暗号化された DNS を使用したシステムの DNS トラフィックの保護
暗号化された DNS を有効にすると、DNS-over-TLS (DoT) を使用する DNS 通信を保護できます。暗号化 DNS (eDNS) は、安全でないプロトコルにフォールバックすることなく、すべての DNS トラフィックをエンドツーエンドで暗号化し、ゼロトラストアーキテクチャー (ZTA) の原則に準拠します。
RHEL における eDNS の現在の実装では、DoT プロトコルのみが使用されます。カスタムの起動可能な ISO を使用して eDNS を有効にした RHEL をインストールすることも、既存の RHEL インストールで eDNS を有効にすることもできます。
暗号化された DNS はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat では、実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
5.1. eDNS が有効な RHEL のインストール
暗号化 DNS (eDNS) が有効になっている RHEL システムをインストールし、DNS-over-TLS (DoT) を使用してすべての DNS トラフィックを保護します。これにより、DNS のクエリーとレスポンスがプライベートかつセキュアに保たれます。カスタム CA 証明書バンドルが必要な場合は、キックスタートファイルの %certificate
セクションを使用してのみインストールできます。
前提条件
-
sudo
または root ユーザーアクセス権によって提供される管理者特権。これは先頭にコマンドプロンプト#
が付いているコマンドに必要です。sudo
アクセス権を設定する方法については、非特権ユーザーが特定のコマンドを実行できるようにする を参照してください。 - Product Downloads ページから最小インストール用の Boot ISO イメージをダウンロードした。
-
%certificate
セクションを含むキックスタートファイルがある (カスタム CA バンドルが必要な場合)。 -
lorax
パッケージがインストールされている。
手順
オプション: カスタム CA をインストールする必要がある場合は、
%certificate
セクションを含むキックスタートファイルを作成します。証明書がtls-ca-bundle.pem
という名前のファイルに保存されていることを確認します。%certificate --dir /etc/pki/dns/extracted/pem/ --filename tls-ca-bundle.pem -----BEGIN CERTIFICATE----- <Base64-encoded_certificate_content> -----END CERTIFICATE----- %end
%certificate --dir /etc/pki/dns/extracted/pem/ --filename tls-ca-bundle.pem -----BEGIN CERTIFICATE----- <Base64-encoded_certificate_content> -----END CERTIFICATE----- %end
Copy to Clipboard Copied! キックスタートファイルとカーネル引数を ISO に追加します。
次のスクリプト例は、eDNS が有効なカスタムの起動可能な ISO を作成する方法を示しています。このプロセスを自動化するには、スクリプトファイルを作成する必要があります。
!/bin/bash set -ex KERNELARGS="" # Enable network KERNELARGS+="ip=dhcp " # Set DoT DNS server KERNELARGS+="rd.net.dns=dns+tls://<server_ip><dns_server_hostname> " # Set to 'exclusive' to disable fallback to unencrypted DNS. Other values: 'backup', 'prefer'. KERNELARGS+="rd.net.dns-resolve-mode=exclusive " # Set the dnsconfd plugin for NetworkManager KERNELARGS+="rd.net.dns-backend=dnsconfd " # Remove any existing ISO to prevent conflicts with the new build rm -f <output_iso_filename> # Create a new bootable ISO with the Kickstart config file and kernel arguments mkksiso --ks <kickstart_file> --cmdline "$KERNELARGS" <input_iso_filename> <output_iso_filename>
!/bin/bash set -ex KERNELARGS="" # Enable network KERNELARGS+="ip=dhcp " # Set DoT DNS server KERNELARGS+="rd.net.dns=dns+tls://<server_ip><dns_server_hostname> " # Set to 'exclusive' to disable fallback to unencrypted DNS. Other values: 'backup', 'prefer'. KERNELARGS+="rd.net.dns-resolve-mode=exclusive " # Set the dnsconfd plugin for NetworkManager KERNELARGS+="rd.net.dns-backend=dnsconfd " # Remove any existing ISO to prevent conflicts with the new build rm -f <output_iso_filename> # Create a new bootable ISO with the Kickstart config file and kernel arguments mkksiso --ks <kickstart_file> --cmdline "$KERNELARGS" <input_iso_filename> <output_iso_filename>
Copy to Clipboard Copied! スクリプトを実行します。
sh <script_filename>
sh <script_filename>
Copy to Clipboard Copied! - カスタマイズされた ISO ファイルを使用して RHEL をインストールします。
検証
eDNS 設定を確認します。
dnsconfd status
$ dnsconfd status
Copy to Clipboard Copied! 想定される出力:
Running cache service: unbound Resolving mode: exclusive Config present in service: { ".": [ "dns+tls://198.51.100.143#dot.dns.example.com" ] } State of Dnsconfd: RUNNING Info about servers: [ { "address": "198.51.100.143", "port": 853, "name": "dot.dns.example.com", "routing_domains": [ "." ], "search_domains": [], "interface": null, "protocol": "dns+tls", "dnssec": true, "networks": [], "firewall_zone": null } ]
Running cache service: unbound Resolving mode: exclusive Config present in service: { ".": [ "dns+tls://198.51.100.143#dot.dns.example.com" ] } State of Dnsconfd: RUNNING Info about servers: [ { "address": "198.51.100.143", "port": 853, "name": "dot.dns.example.com", "routing_domains": [ "." ], "search_domains": [], "interface": null, "protocol": "dns+tls", "dnssec": true, "networks": [], "firewall_zone": null } ]
Copy to Clipboard Copied! nslookup
を使用して DNS サーバーが応答することを確認します。nslookup <domain_name>
$ nslookup <domain_name>
Copy to Clipboard Copied! <domain_name>
は、照会するドメインに置き換えます。
トラブルシューティング
unbound
で詳細なロギングを有効にします。unbound-control verbosity 5
# unbound-control verbosity 5
Copy to Clipboard Copied! 関連するサービスのログを確認します。
journalctl -xe -u <service_name>
$ journalctl -xe -u <service_name>
Copy to Clipboard Copied! <service_name>
は、NetworkManager
、dnsconfd
、またはunbound
に置き換えます。