DNS関連技術情報のトップへ戻る

---------------------------------------------------------------------
■設定ガイド:オープンリゾルバー機能を停止するには【BIND編】

                                株式会社日本レジストリサービス(JPRS)
                                            初版作成 2013/04/18(Thu)
---------------------------------------------------------------------

▼はじめに

  本資料は、オープンリゾルバーとして動作しているBINDを使ったDNSサーバー
  の設定を、簡単なステップで修正する事を目的としています。

  オープンリゾルバーについての技術的な解説は本資料では行いません。手順
  に沿った操作で設定を変更し、読者が運用するDNSサーバーがオープンリゾル
  バーではなくなることを目指しています。

  オープンリゾルバーおよびそれを利用した攻撃についての技術的な解説は以
  下をご覧ください。

    技術解説:「DNS Reflector Attacks(DNSリフレクター攻撃)」について
      <http://jprs.jp/tech/notice/2013-04-18-reflector-attacks.html>

▼本資料の前提

  ▽対象

    BINDを用いたDNSサーバーを運用している管理者、特にDNSサーバーを運用
    しているが、普段設定を自分で変更する事がなく、手順の解説が欲しいと
    思っている管理者を想定して記載しています。

    現行のBIND 9を対象としていますが、ほぼ同様の作業でBIND 8および
    9.4.0より古いBIND 9でもオープンリゾルバーの対策は可能です。この対応
    については文中、以下のマークで注意点を記載します。

        [B8]    BIND 8に関する注意点
        [旧B9]  9.4.0より古いBIND 9に関する注意点

    なお、これらの古いBINDは開発元であるISCのサポートが既に終了していま
    す。現在ISCまたはご利用のOSのベンダーによってサポートされている
    BIND 9の導入を推奨します。

    ISCのBIND 9サポート状況は以下のページをご覧ください。
      ISC's Software Support Policy
      <http://www.isc.org/softwaresupportpolicy>

  ▽記載内容について

    本資料では、BINDの一般的な設定に対するオペレーションを記載していま
    す。OSやディストリビューションに依存する点があり操作が不明な場合は、
    該当するベンダーのサポート窓口や保守業者にお問合せください。

▼オープンリゾルバーの修正手順

  BINDを運用している管理者は、以下の6つの手順を確認の上、適切な設定の修
  正を行ってください。これにより、オープンリゾルバーとして外部に公開す
  る危険性を取り除く事が出来ます。

      手順1: 事前確認
      手順2: 作業の準備
      手順3: 設定の確認
      手順4: 設定の修正
      手順5: 修正の反映
      手順6: 確認

  ▽手順1: 事前確認

    [説明]
      確認用のWebサイトで、オープンリゾルバーかどうかをチェックします。

    [実施内容]
      自ら運用しているサーバーがオープンリゾルバーかどうかを、公開され
      ているチェックサイトで確認します。

        The Measurement Factory: Open Resolver Test
        <http://dns.measurement-factory.com/cgi-bin/openresolvercheck.pl>

        このWebページに、対象サーバーのIPアドレス(*1)を入力すると、オー
        プンリゾルバーかどうかの判定が行われます。チェック結果の
        "Status" が"closed"であれば問題ありませんが、"open"と出る場合は
        オープンリゾルバーとなっています。

      オープンリゾルバーであると判明した場合、以下の手順に沿って対策を
      実施してください。

      (*1)対象サーバーがNATの内側にある場合、チェックは外部からアクセス
          されるグローバルアドレスで実施する必要があります。

  ▽手順2: 作業の準備

    [説明]
      修正をするにあたり、必要な情報、権限などを準備します。

      1) 設定ファイルの場所
      2) 権威DNSサーバーか、キャッシュDNSサーバーか
      3) キャッシュDNSサーバーとして答えてよい、クエリ元のアドレスのリスト
      4) BIND設定ファイル編集および再起動の権限
      5) BINDのバージョン

    [実施内容]
      1) 設定ファイルの場所の確認

        BINDの設定は、標準的には以下にあるテキストファイルに記載されま
        す。

          /etc/named.conf  もしくは  /usr/local/etc/named.conf

      2) 権威DNSサーバーか、キャッシュDNSサーバーか

        作業対象のサーバーが、何の機能を担っているかを確認します。

      3) キャッシュDNSサーバーとして答えてよいクエリ元のアドレスのリスト

        作業対象のサーバーがキャッシュDNSサーバーの場合、その機能を提供
        している先のIPアドレスを全て知る必要があります。

      4) BIND設定ファイル編集および再起動の権限

        設定ファイルの変更後に変更内容を反映させるためには、rndcコマン
        ドを用います。標準的なコマンドの場所は以下になります。

          /usr/sbin/rndc  もしくは  /usr/local/sbin/rndc

        --------------------------------------------------------------
        [B8] BIND 8の場合は、rndcコマンドの代わりにndcコマンドを用いま
             す。標準的なコマンドの場所は以下になります。

             /usr/sbin/ndc  もしくは  /usr/local/sbin/ndc
        --------------------------------------------------------------

        なお、設定ファイルの編集及び変更内容の反映にはroot権限が必要な
        場合があります。

      5) BINDのバージョン

        BINDのバージョンはrndcコマンドで確認できます。

          % rndc status
          version: 9.9.2-P2             ← バージョン
          number of zones: 1
          ...

        --------------------------------------------------------------
        [B8] BIND 8の場合は、rndcコマンドの代わりにndcコマンドを用いま
             す。

             % ndc status
             named 8.4.7-REL Mon Apr 15 19:49:23 JST 2013  foo@bar:/tmp/bind/src/bin/named
                   ^^^^^^^^^ バージョン
             config (/etc/named.conf) last loaded at age: Tue Apr 16 10:59:46 2013
             ...
        --------------------------------------------------------------

  ▽手順3: 設定の確認

    [説明]
      設定ファイル(named.conf)の中で、オープンリゾルバーとしての動作に
      関連するオプションの設定場所、内容を確認します。

    [実施内容]
      設定ファイルを開き、以下のオプションが記載されている場所と内容を
      確認します。

        - recursion
        - allow-query
        - allow-recursion
        - allow-query-cache

        --------------------------------------------------------------
        [B8][旧B9] allow-query-cacheはBIND 9.4.0で追加されたオプション
                   です。BIND 8および9.4.0より古いBIND 9には
                   allow-query-cacheのオプションが存在しません。

                   allow-query-cacheを指定しなくてもオープンリゾルバー
                   を回避する事は可能です。しかし、応答のサイズが大きく
                   なる事から、対策として必ずしも十分とはいえません。
        --------------------------------------------------------------

      BINDのデフォルト設定を用いている場合、記載がない場合もあります。

      ex.) オープンリゾルバーの例

      options {
        ...
        recursion yes;              // ← リゾルバーとして動作しています
        allow-query { any; };       // ← 何処からのクエリでも受取ります
        allow-recursion { any; };   // ← リゾルバーとしての応答を誰にでも返します
        allow-query-cache { any; }; // ← キャッシュの内容を誰にでも返します
                                    // [B8][旧B9]BIND 8および9.4.0より古い
                                    //           BIND 9には存在しません
        ...
      };

  ▽手順4: 設定の修正

    [説明]
      設定ファイルを修正します。

      A) 権威DNSサーバーのみを運用している場合は、リゾルバーとしての動
         作は不要であるため、機能を停止する設定を入れます。

      B) キャッシュDNSサーバーを運用している場合は、クエリを許可するア
         ドレスをaclに記載し、そこからのアクセスのみを許す設定にします。

      C) 権威DNSサーバーとキャッシュDNSサーバーを兼用している場合は、こ
         れを分離した構成をとることを推奨します。もし何らかの理由で兼用
         したままにしておく必要がある場合は、以下の[実施内容]B)の設定を
         施した上、allow-queryをanyと指定します。

    [実施内容]
      設定ファイルのrecursion、allow-query、allow-recursionの項と、acl
      を以下のように編集します(*2)。編集の前に、ファイルのバックアップ
      をとるようにしてください。

      (*2)ファイルの変更にはroot権限が必要な場合があります。その場合、
          suもしくはsudoコマンド等でroot権限を得て作業を行ってください。

      A) 権威DNSサーバーのみを運用している場合は、リゾルバーとしての動
         作を禁止します。

        options {
          ...
          recursion no;                // リゾルバーとして動作しません
          allow-query-cache { none; }; // キャッシュの内容を返しません
          ...
        };

        ----------------------------------------------------------------
        [B8][旧B9] allow-query-cacheのオプションが存在しないため、該当
                   する行は記載しないでください。
        ----------------------------------------------------------------

      B) キャッシュDNSサーバーとして運用している場合は、aclを作りそこか
         らのクエリだけを許可します。

        acl "TRUSTSRC" {            // TRUSTSRCというacl作成の設定を追加します
          192.0.2.0/24;             // クエリ元のネットワークを記載します
          2001:db8:1::/48;          // クエリ元のネットワークを記載します
          localhost;                // 標準で入る設定を残します
          localnets;                // 標準で入る設定を残します
        };

        options {
          ...
          recursion yes;                   // リゾルバーとして動作します
          allow-query { TRUSTSRC; };       // TRUSTSRCからのみクエリを許可します
          allow-recursion { TRUSTSRC; };   // TRUSTSRCからのみリゾルバーとして動作します
          allow-query-cache { TRUSTSRC; }; // TRUSTSRCからのみキャッシュの内容を返します
          ...
        };

        ----------------------------------------------------------------
        [B8][旧B9] allow-query-cacheのオプションが存在しないため、該当
                   する行は記載しないでください。
        ----------------------------------------------------------------

  ▽手順5: 修正の反映

    [説明]
      修正した設定を反映させます。

    [実施内容]

      rndcコマンドで変更した設定を反映させます。(*3)
      なお、事前にnamed-checkconfコマンドでエラーがないことを確認してお
      くとより安全です。

        % named-checkconf
        % rndc reload

      ------------------------------------------------------------------
      [B8] BIND 8の場合は、rndcコマンドの代わりにndcコマンドを用います。
           また、named-checkconfコマンドはBIND 9で提供されたものであり、
           存在しません。

             % ndc reload
      ------------------------------------------------------------------

      サーバーを再起動してもよいのであればrebootを行う事でも設定は反映
      されます。

      (*3)コマンドの実行にはroot権限が必要な場合があります。その場合、
          suもしくはsudoコマンドでroot権限を得てください。

  ▽手順6: 確認

    [説明]
      修正が正しく行われたことを、再度チェックサイトで確認します。

    [実施内容]
      事前確認で使ったチェックサイトで、再度確認をします(*4)。"open" と
      なっていた項目が"closed"に代わっていれば、正しく修正できています。

      もし、確認結果が"open"のままの場合は、以下の確認を行ったうえで、
      再度手順に従って作業を行ってください。

        - 設定ファイルが正しいか
        - 設定の修正は正しいか
        - 修正の反映が正しく出来ているか

      (*4)Measurement Factory: Open Resolver Testは、現在結果をキャッシュ
          する事で、頻繁なテストを行わないようにしています。再テストを
          行うには、該当サーバーから以下のコマンドを実行し、再テストを
          有効にする必要があります。

          % telnet dns-surveyor.measurement-factory.com 999

          コマンドを実行してしばらく待つと、再テストが行われる旨のメッ
          セージが表示されます。

---------------------------------------------------------------------

▼連絡先
  本文書に関するお問い合わせは <dnstech-info@jprs.jp> までご連絡ください。

▼更新履歴
  2013-04-18 11:00 初版作成


株式会社日本レジストリサービス Copyright©2001-2016 Japan Registry Services Co., Ltd.