Fedoraのセキュリティ:systemd-resolvedを使用して5分でDNS-over-TLS (DoT)を有効化する

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

なぜDNS-over-TLSを導入すべきなのか?

私は2年以上、Fedoraをメインの作業用マシンとして使用しています。このディストリビューションはパッケージの更新速度が非常に素晴らしいですが、多くの人が見落としがちなセキュリティ上の脆弱性があります。それがDNSです。通常、google.comと入力すると、コンピュータはDNSサーバーにIPアドレスを問い合わせますが、困ったことに、この「会話」は通常、平文(クリアテキスト)で行われます。

これは、郵便局経由でハガキを送るようなものだと想像してみてください。インターネットプロバイダー(ISP)からWi-Fiカフェのオーナー、ハッカーに至るまで、配送経路にいる誰もがあなたがどのウェブサイトにアクセスしているかを知ることができます。さらに、結果を改ざんして、一瞬でフィッシングサイトに誘導することさえ可能です。

DNS-over-TLS (DoT) は、この状況を終わらせるために誕生しました。DoTは、そのハガキをTLS暗号化された封筒に入れます(HTTPSがウェブを保護するのと同じ仕組みです)。Fedoraでは、サードパーティのアプリをインストールすることなく、標準の systemd-resolved を使用してこれを実現できます。

ステップ1:systemd-resolvedの「健康状態」を確認する

最近のFedora Workstationのほとんどでは、デフォルトで systemd-resolved が有効になっています。しかし、念には念を入れましょう。設定に取り掛かる前に、サービスの状態を確認します。

ターミナルに以下のコマンドを入力してください:

systemctl status systemd-resolved

緑色の active (running) という行が表示されれば問題ありません。もしサービスが停止している場合は、以下のコマンドで起動させます:

sudo systemctl enable --now systemd-resolved

次に、/etc/resolv.conf ファイルが正しく systemd-resolved を指しているか確認します。Fedoraでは、シンボリックリンク(symlink)を使用してこれを管理しています:

ls -l /etc/resolv.conf

正しい結果は ../run/systemd/resolve/stub-resolv.conf を指しているはずです。もしパスが間違っている場合は、以下のコマンドを実行して再作成してください:

sudo ln -sf ../run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

ステップ2:DNS暗号化の設定

ここからが本番です。TLSをサポートするDNSサーバーを使用するようにシステムに強制し、包括的な暗号化機能を有効にします。

nano(またはこだわりがある方は vi)で設定ファイルを開きます:

sudo nano /etc/systemd/resolved.conf

[Resolve] セクションを見つけ、以下のように修正します(行頭の # を消すのを忘れないでください):

[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net
DNSOverTLS=yes
DNSSEC=yes
Domains=~.

パラメータの解説:

  • DNS: ここではCloudflare (1.1.1.1) と Quad9 (9.9.9.9) を使用しています。IP#hostname という形式にすることで、TLSがサーバー証明書を検証し、なりすましを防ぐことができます。
  • DNSOverTLS=yes: すべてのクエリに暗号化を強制します。opportunistic に設定すると、サーバーがTLSをサポートしていない場合に自動的に平文にフォールバックされます(セキュリティが低下します)。
  • DNSSEC=yes: デジタル署名をチェックして、DNSデータが途中で改ざんされていないことを保証します。
  • Domains=~.: このチルダとドットは、すべてのドメイン(グローバル)に対して上記のサーバーを使用することを指定します。

Ctrl + OEnter で保存し、Ctrl + X で終了します。

ステップ3:変更を有効にする

新しい設定を反映させるには、サービスを再起動するだけです。このプロセスは1秒もかからず、インターネット接続が切れることもありません。

sudo systemctl restart systemd-resolved

NetworkManagerを使用している場合、プロバイダーのDNSを優先しようとすることがありますが、通常は resolved.conf での設定が最も高い優先順位を持ちます。

ステップ4:結果を確認する

設定が完了したからといって、必ずしも動作しているとは限りません。以下の方法で、正しく「隠身」できているか確認しましょう。

方法1:resolvectlコマンドを使用する

これは内部のDNSステータスを確認する最も速い方法です:

resolvectl status

使用中のネットワークインターフェース(wlp2s0 など)までスクロールします。Protocols: +DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=yes という行があれば成功です。

方法2:ウェブでチェックする

1.1.1.1/help にアクセスしてください。Using DNS over TLS (DoT) の項目を確認します。Yes と表示されていれば、おめでとうございます。ISPには無意味な暗号化データの塊しか見えていません。

方法3:パケットキャプチャ(上級者向け)

従来のDNSはポート53を使用しますが、DoTはポート853を使用します。実際にデータがポート853経由で送信されているか確認できます:

sudo tcpdump -i any port 853

上のコマンドを実行してから、適当なウェブサイトを読み込んでください。ターミナルにデータが継続的に表示されれば、暗号化は完璧に動作しています。

DoTを使用する際の実際の経験談

Fedoraで長期間DoTを使用してきた中で、いくつか注意点があります:

  1. 社内ネットワークの問題: オフィスのファイアウォールによっては、社員に社内DNSの使用を強制するためにポート853をブロックしている場合があります。もしインターネットに接続できない場合は、一時的に DNSOverTLSopportunistic に変更してください。
  2. 遅延(レイテンシ): DoTは最初のTLSハンドシェイクに約100〜200ms追加で時間がかかります。しかし、キープアライブ(keep-alive)メカニズムのおかげで、日常的なブラウジングで違いを感じることはほとんどありません。
  3. VPNとの競合: VPNアプリは通常、DNS設定を上書きします。VPNを使用する場合は、DNS漏洩(DNS leak)を防ぐために、そのアプリに独自のDoTオプションがあるか確認することをお勧めします。

わずか数行のコマンドで、Fedoraマシンのセキュリティレイヤーをアップグレードできました。これは、リスクの多い現在のインターネット環境において、プライバシーを保護するための基本的かつ非常に価値のある設定ステップです。

Share: