なんかてきとうに

わりと個人的な忘備録的ですよ。

BIND

BINDを触ってみる。

そもそもBINDとは

BINDとはLinuxで使用されている有名なDNSサーバ。
権威サーバとしての機能とキャッシュサーバとしての機能を持っている。
またchrootで実行でき、セキュリティに配慮されている。
その他、DNSsecなどのセキュリティ関連機能も使用できる。

DNSとは

DomainNameSystemの略。
Domain名とIPアドレスの相互変換をするためのもの。
これのおかげで各Webサイトにアクセスするときなどにわかりにくくまた、変更される可能性があるIPアドレスを用いずにアクセスできている。

BINDのインストール

BINDは有名なので各種パッケージシステムから直接インストールできる。

CentOS7

yum install bind bind-chroot bind-utils

Debian8

apt-get install bind9 dnsutils

なお、bind-utilsやdnsutilsは必須ではないが、ないとdigやnslookupなどの確認コマンドが使用できない。

chroot

セキュリティのことを考えると外部に公開するサービスはchrootで利用したい。
BINDはchrootに対応しているため、各種設定を行うことでchroot環境にて使用できる。
ここではchroot先として/var/named/chroot/を想定している。
CentOS7は bind-chrootというchrootにするためのパッケージが用意されているのでお手軽です。 debianについてはBind9 - Debian Wikiにやり方が記載されています。

CentOS7

/usr/libexec/setup-named-chroot.sh /var/named/chroot/ on

Debian8

  1. /lib/systemd/system/bind9.service を編集する。
    ExecStart=/usr/sbin/named -f -u bind -t /var/named/chroot/
    と -t に続けてchroot先を指定するとchrootで動かせる。
    systemctl daemon-reload
    にて変更を有効化する。
  2. chroot環境の作成
    1. mkdir -p /var/named/chroot/{etc,dev,var/cache/bind,/var/run/named}
      にて必要なディレクトリを作成する。

    2. mknod /var/named/chroot/dev/null c 1 3
      mknod /var/named/chroot/dev/random c 1 8
      chmod 600 /var/named/chroot/dev/{null,random}
      にて/dev/nullと/dev/randomを作成する。

    3. mv /etc/bind /var/named/chroot/etc
      ln -s /var/named/chroot/etc/bind /etc/bind
      とbind関連ファイルをchroot環境下へ移動させたあと、元の場所へシンボリックリンクを作成する。

    4. syslogなどでタイムゾーン情報が必要であれば
      cp /etc/localtime /var/named/chroot/etc/
      のようにタイムゾーン情報をchroot環境へコピーする。

    5. chown -R bind:bind /etc/bind/*
      chmod 775 /var/named/chroot/var/{cache/bind,run/named}
      chgrp bind /var/named/chroot/var/{cache/bind,run/named}
      にて各種ファイルの所有者情報やパーミッションを変更する。

    6. 最後に、必要があればsyslog設定を変更する。
      echo #\$AddUnixListenSocket /var/named/chroot/dev/log > /etc/rsyslog.d/bind-chroot.conf