IT pass HikiWiki - [EPA2008]bindのインストールと設定 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

[((<EPAサーバ構築ドキュメント>)) へ戻る]

== 作業前の準備

DNS サーバの設定作業では,
上位ドメインを管理する別マシン (例: 2008 年 7 月現在, scitec.kobe-u.ac.jp は gradis.scitec.kobe-u.ac.jp が管理している) にログインして
ファイルを書き換えることがある.
予めそのマシンのアカウントおよび root になれる権限を取得していると
スムーズに作業が行える.

また, 研究室や研究科などの組織の変更の影響を受けやすい
(以下の構築ドキュメントにも古い設定が残っている)
ので,
去年の設定をそのまま引き継げないことがある.
予め計算機セミナーや研究室ミーティングなどで変更内容を確認しておくとよい.

== ビルドとインストール

  $ sudo -s
  # cd /usr/local/src

配布サイト ((<URL:http://www.isc.org/index.pl?/sw/bind/index.php>))
からアーカイブを取得.

  # wget http://ftp.isc.org/isc/bind9/9.4.2-P1/bind-9.4.2-P1.tar.gz
  # tar zxfv bind-9.4.2-P1.tar.gz
  # cd bind-9.4.2-P1

  # mkdir /usr/local/bind
  # ./configure --prefix=/usr/local/bind

OpenSSL のバージョンが古いのでセキュリティ脆弱性があると
警告が出るが,
Debian の場合はバージョン番号が古いままでもセキュリティパッチは
当たっているので, --disable-openssl-version-check を指定して
バージョンチェックを無視する.

なお, 具体的に修正された脆弱性一覧は
((<URL:http://www.debian.org/security/>)) にある.
configure 時に指摘されている CAN-2002-0659, CAN-2006-4339,
CVE-2006-2937, CVE-2006-2940は全て対処されていることを確認.

openssl が debian パッケージであれば, /usr/share/doc/openssl 以下にある changelog.gz の中身から, パッチが当てられているか確認することができる.

  # ./configure --prefix=/usr/local/bind \
      --disable-openssl-version-check
  # make
  # make install

インストールした Bind には host 等のコマンドも同梱されているため,
既にインストールされている bind9-host, libbind9-0, dnsutils は削除する.

  # apt-get remove bind9-host libbind9-0 dnsutils


== インストールした実行ファイルへのパスの設定

インストールされた Bind の実行ファイル群へパスを通す.

((<[EPA2008]パスの設定>)) の((* <一般ユーザ用コマンドのパス> *))
に ((*/usr/local/bind/bin*)) を,
((* <システム管理用コマンドのパス> *))
に ((*/usr/local/bind/sbin*)) を追加する.


== インストールしたマニュアルへのパスの設定

/etc/manpath.config に以下の行を追加する.
詳しくは ((<[EPA2008]パスの設定#man 関連のパスの設定>)) を参照のこと.

  MANDATORY_MANPATH                          /usr/local/bind/man
  MANPATH_MAP        /usr/local/bind/bin     /usr/local/bind/man
  MANPATH_MAP        /usr/local/bind/sbin    /usr/local/bind/man
  MANDB_MAP          /usr/local/bind/man     /usr/local/bind/man


== ユーザとグループ追加

Bind の実行ユーザとして bind ユーザを作成する.
vipw(1) を実行して以下の行を追加.

  bind:x:53:53:Bind Sandbox:/usr/local/bind/var:/bin/false

vipw -s を実行して以下の行を追加.

  bind:!:13749:0:99999:7:::

同様に bind グループを追加する.
vigr を実行して以下の行を追加.

  bind:x:53:

vigr -s を実行して以下の行を追加.

  bind:*::


== パーミッション設定

pid ファイル置場を bind 所有にする.

  # chown bind:bind ../../var/run


== ゾーンファイルの用意

/usr/local/bind/etc/namedb に old の /usr/local/bind/etc/namedb を移植.


=== 2008 年度前期の DNS の設定

念のため DNS の設定について示す.

* 2008 年度前期の運用方針
  * ahs, aoe, epa, cps は tako が担当, 逆引きも tako が担当.
  * セカンダリ DNS は置かない

上記の場合に変更が行われる設定を列挙する.
特に明記しない限り, /usr/local/bind/etc/namedb/ 内のファイルを指す.
* epa.zone の変更内容
  * MX レコード
    * 変更前
      *         IN      MX      10      ika.epa.scitec.kobe-u.ac.jp.
    * 変更後
      *         IN      MX      10      tako.epa.scitec.kobe-u.ac.jp.
  * CNAME レコード
    * 変更前
      * www             IN      CNAME   ika.epa.scitec.kobe-u.ac.jp.
    * 変更後
      * www             IN      CNAME   tako.epa.scitec.kobe-u.ac.jp.
  * A レコード
    * 変更前
      * ns              IN      A       133.30.109.22
      * mail            IN      A       133.30.109.22
      * @               IN      A       133.30.109.22
    * 変更後
      * ns              IN      A       133.30.109.21
      * mail            IN      A       133.30.109.21
      * @               IN      A       133.30.109.21
* ahs.rev, ahs.zone, named.conf などについては変更の必要なし
* ika:/usr/local/bind/etc/namedb/epa.zone の変更内容
  * tako の epa.zone と同様
* gradis.scitec.kobe-u.ac.jp:/etc/named.conf
  * epa.scitec.kobe-u.ac.jp. ゾーンの master の IP を ika の IP(133.30.109.22) から tako の IP (133.30.109.21) に変更.
* gradis.scitec.kobe-u.ac.jp:/var/named/scitec.zone
  * epa.scitec.kobe-u.ac.jp. ゾーンのネームサーバを ika から tako に変更.
    * 変更前
      * ns.epa.scitec.kobe-u.ac.jp.     IN      A       133.30.109.22
    * 変更後
      * ns.epa.scitec.kobe-u.ac.jp.     IN      A       133.30.109.21
* その他
  * aoe.scitec.kobe-u.ac.jp ドメインの MX レコードの設定が gradis
    に直接書かれていることに注意 (変更の必要はないが)

=== namedb の変更

/usr/local/bind/etc/namedb/ 内のファイルに変更を加える.

==== epa.zone

epa.zone 内の項目について,
それぞれ, 上の行を下の行に書き換えた.

               IN      MX      10      ika.epa.scitec.kobe-u.ac.jp.
               IN      MX      10      tako.epa.scitec.kobe-u.ac.jp.

       www             IN      CNAME   ika.epa.scitec.kobe-u.ac.jp.
       www             IN      CNAME   tako.epa.scitec.kobe-u.ac.jp.

       ns              IN      A       133.30.109.22
       ns              IN      A       133.30.109.21

       mail            IN      A       133.30.109.22
       mail            IN      A       133.30.109.21

       @               IN      A       133.30.109.22
       @               IN      A       133.30.109.21

==== ahs.zone

ahs.zone 内の項目について,
それぞれ, 上の行を下の行に書き換えた.

               IN      MX      10      ika.epa.scitec.kobe-u.ac.jp.
               IN      MX      10      tako.epa.scitec.kobe-u.ac.jp.

       ns              IN      A       133.30.109.22
       ns              IN      A       133.30.109.21

       mail            IN      A       133.30.109.22
       mail            IN      A       133.30.109.21

       @               IN      A       133.30.109.22
       @               IN      A       133.30.109.21

== 上流 DNS サーバの設定

上流 DNS サーバの設定については, 大半の作業が
2007 年の ika 構築時に行われており, 新たに行うことは少ない.

念のため, 確認を行う.

=== epa.scitec.kobe-u.ac.jp ゾーンなどのエントリ確認

scitec.kobe-u.ac.jp を担当している
gradis.scitec.kobe-u.ac.jp の /etc/named.conf に
epa.scitec.kobe-u.ac.jp ゾーンのエントリがあることを確認する.

なお, 以下は古い設定 (ika を DNS サーバとしている) であるが,
本運用開始時には tako を DNS サーバとするよう書き換える必要がある.

gradis.scitec.kobe-u.ac.jp:/etc/named.conf 内に以下の記述を確認した.

  zone "ahs.scitec.kobe-u.ac.jp" {
          type slave;
          file "slave/ahs.zone";
          masters {
                  133.30.109.22;
          };
          allow-query { any; };
  };

  zone "epa.scitec.kobe-u.ac.jp" {
          type slave;
          file "slave/epa.zone";
          masters {
                  133.30.109.22;
          };
          allow-query { any; };
  };


gradis.scitec.kobe-u.ac.jp:/var/named/scitec.zone 内に
以下の記述を確認.

  ;; for 133.30.109.22 domain
  ; ahs
  ahs.scitec.kobe-u.ac.jp.        IN      NS      ika.epa.scitec.kobe-u.ac.jp.
  ika.epa.scitec.kobe-u.ac.jp.    IN      A       133.30.109.22
  ahs.scitec.kobe-u.ac.jp.        IN      NS      gradis.scitec.kobe-u.ac.jp.
  ; epa
  epa.scitec.kobe-u.ac.jp.        IN      NS      ns.epa.scitec.kobe-u.ac.jp.
  ns.epa.scitec.kobe-u.ac.jp.     IN      A       133.30.109.22
  epa.scitec.kobe-u.ac.jp.        IN      NS      gradis.scitec.kobe-u.ac.jp.
  ; aoe
  aoe.scitec.kobe-u.ac.jp.        IN      A       133.30.109.22
  ; cps
  cps.scitec.kobe-u.ac.jp.        IN      A       133.30.109.22

gradis 側の逆引きゾーンファイルを見て
0/25 の権限を ns.epa.scitec.kobe-u.ac.jp にあることを確認.

gradis:/etc/named.conf 内で "109.30.133" で検索すると, 以下の記述を見つけた.

  zone "109.30.133.in-addr.arpa" {
          type master;
          file "master/ahs/ahs.rev";
          allow-query { any; };
  };

gradis 側の逆引きゾーンファイルは /var/named/master/ahs/ahs.rev
にあった.
/var/named/master/ahs/ahs.rev に以下の記述を確認.

  0/25    3600    IN      NS      ns.epa.scitec.kobe-u.ac.jp.


== ゾーンファイルの確認

tako:/usr/local/bind/etc/namedb/ahs.rev について以下を確認した.

* 逆引きのゾーンファイル ahs.rev が epa の名前を返すことを確認

すべての PTR レコードが "xxxx.epa.scitec.kobe-u.ac.jp" というリソース
を持っていることを確認した.

* 逆引きの権限は ns.epa.scitec.kobe-u.ac.jp が持っていることを確認

以下の行を確認.

  @       IN      NS      ns.epa.scitec.kobe-u.ac.jp.


== rndc の設定

rndcコマンドは zone のリロード, 再起動, コンフィグファイルの読み直しなどを行うコマンドである.

まず, rndc-confgenを実行することで, 必要な設定ファイルの「もと」を生成する.

  root@tako:/usr/local/bind/etc/namedb# rndc-confgen
  # Start of rndc.conf
  key "rndc-key" {
          algorithm hmac-md5;
          secret "SZN/mCIMkFJmFJ/98jlcMQ==";
  };
  
  options {
          default-key "rndc-key";
          default-server 127.0.0.1;
          default-port 953;
  };
  # End of rndc.conf
  
  # Use with the following in named.conf, adjusting the allow list as needed:
  # key "rndc-key" {
  #       algorithm hmac-md5;
  #       secret "SZN/mCIMkFJmFJ/98jlcMQ==";
  # };
  #
  # controls {
  #       inet 127.0.0.1 port 953
  #               allow { 127.0.0.1; } keys { "rndc-key"; };
  # };
  # End of named.conf

secret "SZN/mCIMkFJmFJ/98jlcMQ=="; は認証に用いる共通鍵(パスワード)を表す. 従って, ここに挙げているのは例であって, 実際の設定とは異なる.

rndc-confgen を試しに何度か実行してみたが, 実行するたびに鍵の内容が変わった.

rndc-confgen の出力を /usr/local/bind/etc/rndc.conf として保存する.

  # rndc-confgen > /usr/local/bind/etc/rndc.conf

生成された rndc.conf のコメントアウトされている箇所のうち,
controls 以下を named.conf の末尾に追記する
(ika から持ってきたので, 既に追記されていた).

また, 次の一行を named.conf に追記する (これも既に追記されていた).

  include "/usr/local/bind/etc/rndc.key";

rndc.conf コメントアウトされている箇所のうち,
key で始まる4行を /usr/local/bind/etc/rndc.key として保存する.

念のため, rndc.conf のコメントアウトされている箇所を削除する.

パーミッションを以下のように設定する.

  root@ika:/usr/local/bind/etc# chgrp -R epaadmin .

epaadmin グループを作っていないので設定できない.
とりあえず root を使っているときにデフォルトの staff にしておく.
gate の設定待ち.

  root@ika:/usr/local/bind/etc# chgrp -R staff .   # とりあえず

  root@ika:/usr/local/bind/etc# chown bind rndc.key
  root@ika:/usr/local/bind/etc# chmod 600 rndc.key
  root@ika:/usr/local/bind/etc# chmod 640 rndc.conf
  root@ika:/usr/local/bind/etc# chown bind namedb/named.conf
  root@ika:/usr/local/bind/etc# chmod 640 namedb/named.conf


== 起動テスト

  # /usr/local/bind/sbin/named -u bind \
      -c /usr/local/bind/etc/namedb/named.conf

/var/log/syslog を見て, 起動したことを確認.
ps(1) コマンドなどでも走っていることを確認.

== ファイルフォーマットチェック

  root@tako:/usr/local/bind/etc# named-checkconf /usr/local/bind/etc/namedb/named.conf

何も出力されないので OK.

== rndc のテスト

  root@tako:/usr/local/bind/etc# rndc reload
  server reload successful

成功.

epaadmin グループが設定されていれば,
epaadmin グループに属しているユーザなら
上記のコマンドを実行可能である.

== 起動スクリプトの用意

サーバの起動時に自動的に起動させるため, bind の起動スクリプト
を用意する.

Debian の bind パッケージに含まれる/etc/init.d/bind を元に
起動スクリプトを bind 用に多少書き換えたものが
((<bind|URL:../epa/bind/bind>))
から入手できる. このファイルを /etc/init.d/bind にコピーし,
以下のようにパーミッションを設定する.

  # cd /etc/init.d
  # wget http://epa.scitec.kobe-u.ac.jp/~itpass/epa/bind/bind
  # chown root:root /etc/init.d/bind
  # chmod 755 /etc/init.d/bind

なお, この実行ファイル bind には冒頭部に named や rndc,
named.conf ファイルのパスを設定する箇所がある.
インストールの場所が変更される場合にはこれも変更すること.

念のため, bind スクリプトの start, stop, restart の動作確認を行う.

ランレベルごとに bind の動作を設定する.

  # update-rc.d bind defaults
  Adding system startup for /etc/init.d/bind ...
    /etc/rc0.d/K20bind -> ../init.d/bind
    /etc/rc1.d/K20bind -> ../init.d/bind
    /etc/rc6.d/K20bind -> ../init.d/bind
    /etc/rc2.d/S20bind -> ../init.d/bind
    /etc/rc3.d/S20bind -> ../init.d/bind
    /etc/rc4.d/S20bind -> ../init.d/bind
    /etc/rc5.d/S20bind -> ../init.d/bind

サーバを再起動し, 起動時に bind が起動することを確認した.


== サーバ停止

このままの設定では, 何らかの原因で tako を DNS サーバとして参照してしまうと tako が epa.scitec.kobe-u.ac.jp であるとなりすましてしまう不具合が発生することが分かった. よって, DNS サーバは EPA サーバ交代の時まで停止する.

DNS サーバ (bind) を停止.

  # /etc/init.d/bind stop

起動時に bind を起動しないようにする.

  # update-rc.d -f bind remove

サーバを再起動し, bind が起動していないことを確認した.



== 参考資料

* DNS の仕組み解説 (初学者向け)
  * ((<3 Minutes Networking|URL:http://www5e.biglobe.ne.jp/~aji/3min/index.html>))
* OpenSSL のセキュリティ脆弱性
  * ((<opensslのセキュリティアップデート|URL:http://www.jp.redhat.com/support/errata/RHSA/RHSA-2006-0695J.html>))
  * ((<米国政府のぜい弱性対策に関する取り組み|URL:http://itpro.nikkeibp.co.jp/article/COLUMN/20071015/284567/>))
[((<EPAサーバ構築ドキュメント>)) へ戻る]