もうちょっと前の話ですが、bindの動作検証をする必要があったため、その時のメモ。
わけあって、バージョンは9.7.1-P2ですが、9.7.4とかでもだいたい一緒でしょう!(多分。。)
先にOpenSSLをインストールしておく。
OpenSSL自体はおそらく既にインストールされているので、下記コマンドで確認。
# openssl version
# which openssl
入ってなかったら、とりあえずyumで入れとく。
※脆弱性対策とかを考えると、ホントはopensslも最新のものをソースからインストールする方が望ましいです。
# yum install openssl
で、openssl だけだと、bind をインストールする時に引っかかるので、opennssl-devel も入れる。
# yum install openssl-devel
ここまでそろったら、いよいよbindのインストール。
# tar zxvf bind-9.7.1-P2.tar.gz
# cd bind-9.7.1-P2
# .configure --with-openssl --enable-ipv6 --with-libtool ※ipv6の部分はいらないかも
# make depend
# make all
# make install
で、ひとまずインストールは終了。
次に初期設定。
rndc鍵を作成する。
# rndc-confgen -a
# ls -l /etc/rndc.key
-rw------- 1 root root 77 8月 9 06:28 /etc/rndc.key
# cat /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "1uO8DAPSLsR/Tri4ar4Lyg==";
};
設定ファイルを作成する。
# rndc-confgen > /etc/rndc.conf
# ls -l /etc/rndc.conf
-rw-r--r-- 1 root root 479 8月 9 06:29 /etc/rndc.conf
# cat /etc/rndc.conf
# Start of rndc.conf
## rndcの共有鍵
key "rndc-key" {
algorithm hmac-md5;
secret "RTIoq8RxmGxQ3sRRfiicUA==";
};
## rndcの制御を受け付けるアドレス・ポートとそれに対応する共有鍵を定義
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 "RTIoq8RxmGxQ3sRRfiicUA==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
rndc.conf の、Use with ~ End of named.conf の部分をコピって、
named.conf を作成する。コメントアウトは全て外す。
# vi named.conf
## rndcの共有鍵 key "rndc-key" { algorithm hmac-md5; secret "RTIoq8RxmGxQ3sRRfiicUA=="; }; ## rndcの制御を受け付けるアドレス・ポートとそれに対応する共有鍵を定義 controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; };
で、ここまで来たらひとまずbindの制御ツールであるrndcコマンドを使って確認してみる。
# rndc status
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
rndc: connect failed: 127.0.0.1#953: connection refused
なんか、WARNINGが出た。
/etc/rndc.key があるのに、/etc/rndc.conf を使ってますよ、と。
ということで、rndc.confを修正してみる。
---
## rndcの共有鍵
key "rndc-key" {
algorithm hmac-md5;
secret "RTIoq8RxmGxQ3sRRfiicUA==";
};
---
この部分を、
---
## rndcの共有鍵
include "/etc/rndc.key"
---
としてみた。
rndc.conf の rndc.key と、named.conf の rndc.key の値は一致していないと
いけないので、/etc/named.conf も同様に修正した。
ここで、再度rndcコマンドを実施。
# rndc status
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
rndc: connect failed: 127.0.0.1#953: connection refused
、、、また同じのが出た。
なんか手元の書籍とかでそれぞれ違うことが書いてあって、混乱したのですが、
結局のところ、rndc.key がある場合は、rndc.conf はいらないみたい。
ということで、rndc.conf は削除。
# rm -i /etc/rndc.conf
そして、再度rndcコマンドを実行。
# rndc status
rndc: connect failed: 127.0.0.1#953: connection refused
お、今度はWARNINGが消えた☆
っていうかそもそもrndc.keyを作る必要がなかったという噂もあるけど、、、。
まぁよしとして、ここからが本題。
connection refused となっているのは、bind が起動してないからかな。
では、起動する前に named.conf の最低限の設定をやっておこう。
現時点でのnamed.confは下記の通り。
## rndcの共有鍵 include "/etc/rndc.key"; ## rndcの制御を受け付けるアドレス・ポートとそれに対応する共有鍵を定義 controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; };
上記に、最低限の設定を追加。
## rndcの共有鍵 include "/etc/rndc.key"; ## rndcの制御を受け付けるアドレス・ポートとそれに対応する共有鍵を定義 controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; ## ゾーンファイル設置ディレクトリを指定 options { directory "/var/named"; }; ## hintファイル(rootサーバの情報を記載)の位置を指定 zone "." IN { type hint; file "named.ca"; };
では、定義した通り、/var/named 配下に、 hintファイルを named.ca として保存する。
hintファイルは、ftp://ftp.internic.net/domain/named.root として公開されている。
# mkdir /var/named
# cd /var/named
# wget ftp://ftp.internic.net/domain/named.root
--2011-08-10 12:37:15-- ftp://ftp.internic.net/domain/named.root
=> `named.root'ftp.internic.net をDNSに問いあわせています... 208.77.188.26
ftp.internic.net|208.77.188.26|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。 ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。 ==> CWD /domain ... 完了しました。
==> SIZE named.root ... 3048
==> PASV ... 完了しました。 ==> RETR named.root ... 完了しました。
長さ: 3048 (3.0K)
100%[==========================================================>] 3,048 --.-K/s 時間 0.001s
2011-08-10 12:37:17 (4.73 MB/s) - `named.root' へ保存終了 [3048]
# ls -l
合計 4
-rw-r--r-- 1 root root 3048 8月 10 12:37 named.root
# mv named.root named.ca
# ll
合計 4
-rw-r--r-- 1 root root 3048 8月 10 12:37 named.ca
最低限の設定が終わったので、bindを起動してみる。
# named -c /etc/named.conf
# ps auxww | grep named
root 4441 0.5 3.8 7892 4780 ? Ss 12:48 0:00 named -c /etc/named.conf
root 4446 0.0 0.5 5076 752 pts/0 R+ 12:48 0:00 grep named
無事に起動した模様。
※rootユーザで起動してしまっているが、それはあとで対応しよう。
では、再度rndcコマンドを打ってみる。
# rndc status
version: 9.7.1-P2
number of zones: 17
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
キターーーーー!
いちいち躓いたけど、無事にインストール~動作確認が出来ました~(・∀・)
ではこれにて終了~、、、
と、行きたいところなんだけど、このままだとセキュリティ的に望ましくないらしい。
bind(に特定される話ではないようにも思うけど)を動作させるのはchroot環境で、
っていうのが定石みたい。
======
ということで、次はchroot環境の設定を行う。(もう疲れたよ。。)
概要としては、
1.bindを動かす一般ユーザ(named)の作成。
2.chroot環境の構築および権限・所有者(named)の設定。
3.設定ファイルをchroot先のディレクトリ配下に置く。
4.chroot先のetcディレクトリ配下に、「localtime」ファイルを置く。
5.chroot先に「/var/run」ディレクトリを作成する。※pidファイルを置くため
6.chroot先に「dev」ディレクトリを作成し、mknodコマンドでデバイスファイルを作成する。
となります。(Amazonリンクの本の受け売りです。。)
まずは、ユーザの作成。
# groupadd named
# cat /etc/group | grep named
named:x:500:
# useradd -g named named
# usermod -s /bin/false named ←ログイン出来ないようにする。
# cat /etc/passwd | grep named
named:x:500:500::/home/named:/bin/false
んで次に、chroot環境の構築。
まずはディレクトリの作成
# mkdir /var/named/chroot
# mkdir /var/named/chroot/dev
# mkdir /var/named/chroot/etc
# mkdir /var/named/chroot/var
# mkdir /var/named/chroot/var/named
# mkdir /var/named/chroot/var/run
# mkdir /var/named/chroot/var/run/named
# mkdir /var/named/chroot/var/log ※これはログ用なので任意で。
次に設定ファイルの配置。
# mv /var/named/named.ca chroot/var/named/
# mv /etc/named.conf /var/named/chroot/etc/
# ln -s /var/named/chroot/etc/named.conf /etc/named.conf
# mv /etc/rndc.key /var/named/chroot/etc/
# ln -s /var/named/chroot/etc/rndc.key /etc/rndc.key
# cp -p /etc/localtime chroot/etc/
デバイスファイルの配置。
# mknod /var/named/chroot/dev/null c 1 3
# mknod /var/named/chroot/dev/zero c 1 5
# mknod /var/named/chroot/dev/randome c 1 8
所有者の設定。
# chown -R named:named /var/named
権限の設定。
# chmod 750 /var/named
# chmod 750 /var/named/chroot
# chmod 750 /var/named/chroot/*
で、最終的にこんな感じになる。
# tree -pug /var/named
/var/named
`-- [drwxr-x--- named named ] chroot
|-- [drwxr-x--- named named ] dev
| |-- [crw-r--r-- named named ] null
| |-- [crw-r--r-- named named ] random
| `-- [crw-r--r-- named named ] zero
|-- [drwxr-x--- named named ] etc
| |-- [-rw-r--r-- named named ] localtime
| |-- [-rw-r--r-- named named ] named.conf
| `-- [-rw------- named named ] rndc.key
`-- [drwxr-x--- named named ] var
|-- [drwxr-xr-x named named ] log
|-- [drwxr-xr-x named named ] named
| `-- [-rw-r--r-- named named ] named.ca
`-- [drwxr-xr-x named named ] run
`-- [drwxr-xr-x named named ] named
chroot/etc 配下の、named.conf および rndc.key は、/etc 配下(元の場所)へシンボリックリンクを貼ってある。
# ls -l /etc/rndc.key
lrwxrwxrwx 1 root root 30 8月 10 14:22 /etc/rndc.key -> /var/named/chroot/etc/rndc.key
# ls -l /etc/named.conf
lrwxrwxrwx 1 root root 32 8月 10 14:17 /etc/named.conf -> /var/named/chroot/etc/named.conf
さぁ、これでいよいよ準備が整ったので、chroot環境でnamedを起動してみる。
# ps auxww | grep named
root 2990 0.0 0.5 5076 752 pts/0 R+ 14:56 0:00 grep named
# named -u named -t /var/named/chroot/ -c /etc/named.conf
# ps auxww | grep named
named 3001 0.4 3.8 7940 4772 ? Ss 14:58 0:00 named -u named -t /var/named/chroot/ -c /etc/named.conf
root 3012 0.0 0.5 5076 752 pts/0 R+ 14:59 0:00 grep named
ちゃんとchroot環境で動作しているようです。
さて、これでめでたくbindのインストール完了!
と、言いたいところですが。。(まだあるのか。。)
実は、、、bindの落とし方が分からないのですが。。
起動スクリプトとかってありますか、、、?
ということで、作るのが面倒だったので同僚に貰いました~。
# mv ~/named /etc/init.d/
# chmod 755 /etc/init.d/named
停止してみる。
# ps auxww | grep named
named 3295 0.2 3.8 7940 4780 ? Ss 16:01 0:00 /usr/local/sbin/named -u named -t /var/named/chroot
root 3306 0.0 0.5 5076 752 pts/0 R+ 16:01 0:00 grep named
# ls -l /var/named/chroot/var/run/named/
合計 8
-rw-r--r-- 1 named named 5 8月 10 16:01 named.pid
-rw------- 1 named named 102 8月 10 16:01 session.key
# service named stop
named を停止中: [ OK ]
# ps auxww | grep named
root 3355 0.0 0.5 5076 748 pts/0 R+ 16:03 0:00 grep named
# ls -l /var/named/chroot/var/run/named/
合計 0
起動してみる。
# service named start
named を起動中: [ OK ]
# ps auxww | grep named
named 3396 0.1 3.8 7940 4784 ? Ss 16:04 0:00 /usr/local/sbin/named -u named -t /var/named/chroot
root 3404 0.0 0.5 5076 752 pts/0 R+ 16:04 0:00 grep named
# ls -l /var/named/chroot/var/run/named/
合計 8
-rw-r--r-- 1 named named 5 8月 10 16:04 named.pid
-rw------- 1 named named 102 8月 10 16:04 session.key
rndc でも確認してみる。
# rndc status
version: 9.7.1-P2
number of zones: 17
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
と、いうことで、中身についてはそれほど精査していませんが、問題なさそうです。
パッケージについてくる起動スクリプトを書き換えたみたいなので、まぁ大丈夫でしょう。
とはいえ未検証のものを載せるのは、たとえブログでも気が引けるのでやめておきます(・。・;
長くなりましたが、、、
これにてめでたくbindのソースからのインストール完了!(多分)
設定は次回ということで~
おしまい。
※下記の書籍を参考にさせて頂きました。
どちらも分かりやすかったです。実践DNSの方は、DNSSECのことも詳しく載っています。
0 件のコメント:
コメントを投稿