変更要約: 初版(主題2.08・副主題2.08.1〜2.08.3に対応)
2.3セキュアなDNSサーバーの実現
DNSサーバーを堅牢化する手法としてchroot環境・forwardersの限定、そしてDNSSEC(dnssec-keygen・dnssec-signzone)による署名検証、通信の完全性を守るTSIG、証明書を DNS に紐づけるDANEを学びます。
DNS はキャッシュ汚染や応答偽装など、古くから狙われてきたサービスです。プロセスの被害範囲を絞る基盤面の対策(chroot・forwarders 限定)と、応答の真正性を保証するプロトコル面の対策(DNSSEC・TSIG・DANE)の両輪で理解します。
2.3.1プロセスと転送先の制限
- chroot 環境=named プロセスが見えるファイルシステムを限定したルート配下だけに制限する。侵害されても実際の
/etc等へ到達できず、被害範囲を局所化できる。 - forwarders=再帰問い合わせを転送する先サーバーを named.conf の
forwarders { }で明示的に限定する。無制限にどこへでも再帰させないことで、意図しない外部応答やキャッシュ汚染のリスクを抑える。
2.3.2DNSSECとTSIG・DANE
- DNSSEC=ゾーンデータに電子署名を付け、応答が改ざんされていないことをリゾルバ側で検証できるようにする仕組み。鍵生成はdnssec-keygen、ゾーンへの署名はdnssec-signzoneで行う。
- TSIG(Transaction SIGnature)=ゾーン転送や動的更新などサーバー間通信を共有鍵で認証・完全性保護する仕組み。DNSSEC がゾーンデータそのものの署名なのに対し、TSIG は通信メッセージ単位の保護。
- DANE(DNS-based Authentication of Named Entities)=TLS証明書の情報を DNS(TLSA レコード)に載せ、DNSSEC で保護された経路を通じて証明書の正当性を補強する仕組み。
「DNSSEC=ゾーンデータの署名検証」「TSIG=サーバー間通信(ゾーン転送等)の鍵認証」「DANE=証明書情報をDNSSEC経由で補強」 の3者の役割の切り分けが最頻出です。鍵生成がdnssec-keygen、署名がdnssec-signzoneというコマンドと成果物の対応も狙われます。
堅牢化は「壊れても被害を抑える層」と「そもそも偽物を見抜く層」を組み合わせて考えると整理できます。まず基盤面では、named をchroot配下(例 /var/named/chroot/)で稼働させることで、脆弱性が突かれても実ファイルシステムへの到達を防ぎます。あわせて named.conf の forwarders { 192.0.2.53; }; のようにforwardersを信頼できる社内・上流サーバーだけに絞り、任意の外部への再帰を許さない構成にします。次にプロトコル面では、ゾーンへの署名フローが定番です。dnssec-keygenでゾーン署名鍵(ZSK)と鍵署名鍵(KSK)を生成し、dnssec-signzoneでゾーンファイルに署名を付与すると、DNSKEY・RRSIG・NSEC 等のレコードが追加されたゾーンファイルが生成されます。これによりリゾルバは応答の署名を検証し、経路上の改ざん(キャッシュ汚染含む)を検出できます。プライマリ・セカンダリ間のゾーン転送や動的更新にはTSIGの共有鍵を設定し、正当なサーバーからの通信であることをメッセージ単位で確認します。さらに公開鍵基盤の証明書をDANE(TLSAレコード)でDNSに紐づけておけば、DNSSECで保護された経路を通じて証明書が正規の発行元のものであることを補強でき、認証局の信頼だけに依存しない多層防御になります。
| 対策 | 保護対象 | 主なコマンド/設定 |
|---|---|---|
| chroot | プロセスの到達範囲を局所化 | named を限定ルート配下で稼働 |
| forwarders 限定 | 再帰転送先の限定 | named.conf の forwarders { } |
| DNSSEC | ゾーンデータの真正性 | dnssec-keygen / dnssec-signzone |
| TSIG | サーバー間メッセージの認証 | 共有鍵によるゾーン転送認証 |
ひっかけ: 「TSIG はゾーンデータそのものに電子署名を付与する仕組みである」は誤りです。ゾーンデータへの署名はDNSSECの役割で、TSIG はサーバー間の通信メッセージを共有鍵で認証する仕組みです。また「DANE はDNSSECに依存せず単独で証明書を検証できる」も誤り=DANEの保証はDNSSECで保護された経路が前提です。
2.3.3この節のまとめ
- 基盤対策=chroot(到達範囲の局所化)/forwarders 限定(再帰転送先の制限)
- DNSSEC=ゾーン署名検証(dnssec-keygen→dnssec-signzone)/TSIG=サーバー間通信の鍵認証/DANE=DNSSEC経由で証明書を補強
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. DNSサーバーが侵害された場合でも、実際のシステムファイルへの到達を防ぎ被害を局所化したい。有効な対策は?
Q2. ゾーンファイルに DNSSEC の署名を付与する一連の作業で、鍵生成の次に実行するコマンドはどれ?
Q3. プライマリとセカンダリ間のゾーン転送が正当なサーバーからの通信であることを、共有鍵で認証したい。用いる仕組みはどれ?

