• 検索結果がありません。

$GENERATE

Sep 4 14:43:18 thomas named[35341]: general: error: dns_rdata_fromtext:

localhost:3: near '4294967297': out of range

Sep 4 14:43:18 thomas named[35341]: general: error: zone localhost/IN:

loading master file localhost: out of range

– 2004120201に設定したかったのに

3004120201とタイプしてしまい、reloadしてか

ら気付いた

;_;

• 3004120201

より「大きく」

2004120201

より「小さな」

番号に設定。

• secondary

にゾーン転送。

• 2004120201

に設定。

• secondary

にゾーン転送。

serial, comin’ back!(続き)

• n=3004120201+(2^31)-1=5151603848>2^32

• n'=n-2^32=856636552 3004120201 < n' n' < 2004120201

0 n' 3004120201 (2^32)-1

2004120201

n

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 121

運用編

rndc.key

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 123

namedの管理ツール

• BIND8: ndc

ファイルシステム中の

UNIX

ドメインソケット経由

– TCP

ソケットもサポートされているが、認証機構がない

ので、事実上使えない。

• BIND9: rndc

– TCPソケット経由

ネットワーク経由で別ホストからもアクセスできる。

– TSIGで認証

• BIND8

TCP

ソケットを使う場合とは非互換

rndc

• rndcはネットワーク経由で別ホストのnamedにも

アクセスできる。

• rndc.conf

鍵情報

デフォルトのアクセス先

デフォルトの鍵

• named.conf

– rndcからのアクセスを待ち受けるソケット –

アクセス制限

鍵情報

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 125

rndc(続き)

ネットワーク経由でのアクセスが前提なので、設定 が面倒。

同一ホストからアクセスできればいいのであれば

– named.confにcontrols{}ステートメントを書かない。

– rndc.confも作らない。

– rndc.key

というファイルを作る。

• rndc-confgen -a

• namedとrndcの双方がrndc.keyを参照して動作

する。

rndc.keyがあると

• named

– named.conf

controls{}

がなければ

• 127.0.0.1と::1の953/tcpだけで待ち受け

• /etc/rndc.keyの鍵で認証

– named.conf

controls{}

key{}

のない

inet…

があれば

• inet…にしたがって待ち受け

• /etc/rndc.keyの鍵で認証

– named.conf

に空の

controls{}

があれば

• [注意!]rndcからのアクセスを待ち受けるソケットを作成しない。

• rndc

– rndc.confがなければ/etc/rndc.keyに設定された鍵で

953/tcp@localhost

にアクセス

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 127

rndcの鍵情報

鍵情報が読めれば、rndcでnamedにアクセスでき る。

– rndc-confgen -a

rndc.key

を生成すると、

permission 400

で作成する。

– rndc.confを手で作るときはowner,group,permissionに

注意が必要。

逆に、例えば

wheel

に属している人は

su

しなくても

rndc

を実行できるような設定も可。

– named.confのkeyステートメントにも注意が必要。

技巧的にはkeyステートメントを適切なアクセス権の別ファイル に切り出して、includeする方法もあり。

1 台のホストで

2 つの named を動かす

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 129

1台のホストで2つのnamed

キャッシュサーバとコンテンツサーバを分けたい。

でもホストの台数に余裕がない。

いくら

PC

が安くなり、

Free

OS

が登場したといっても

素直に起動するとaddress in use

リソースの競合を回避すればいい。

– queryを待ち受けるソケット – (r)ndcを待ち受けるソケット –

読み込むnamed.conf

書き出すnamed.pid、named.statsなど

1台のホストで2つのnamed(続き)

• INETドメインソケットはIPアドレスとポート番号の組

で識別される。

– query

を待ち受けるポート番号は

53

から動かせない。

->IP

アドレスを使い分ける。

– ifconifg em0 … alias(FreeBSD) – ifconfig eth0:0 … (Linux)

• named.conf

– named -c /etc/named-contents.conf

• named.pid、named.stats、…

– named.conf

options{}

別々のディレクトリツリーにchroot() してもよい。

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 131

キャッシュサーバ

• localhostとその逆索き

• private addressの逆索き

• link local addressの逆索き(254.169.in-addr.arpa)

それぞれallow-transferでアクセス制限

ゾーン転送はDNSの動作の中では重い部類に入るので、

DoS

アタックのツールになり得る。

• allow-queryでアクセス制限

– localhost

を忘れずに。

コンテンツサーバ

• recursion no;

• allow-transferで適切にアクセス制限。

• zone "." IN {type hint;…};は要らない。

– BIND9ではbuilt-inのデータが参照されるが。

– BIND8ではfetch-glue no;を併用すること。

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 133

設定例

適当な手法で1台のホストに

– 192.168.0.1 – 192.168.0.2

 の2つのIPアドレスを振る。

キャッシュサーバは192.168.0.1で提供する。

コンテンツサーバは192.168.0.2で提供する。

キャッシュサーバ(BIND8)

options {

directory "/etc/namedb";

allow-query {

適当なacl;

};

allow-transfer { localhost;

};

fetch-glue no;

pid-file "/var/run/named-cache.pid";

listen-on {

192.168.0.1;

};

};

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 135

キャッシュサーバ(BIND8:続き)

controls {

unix "/var/run/ndc-cache" perm 0600 owner 53 group 53;

};

zone "." IN {

type hint;

file "named.root";

};

zone "localhost" IN { type master;

file "localhost";

};

# localhostやprivate addressの逆索きなども

コンテンツサーバ(BIND8)

options {

directory "/etc/namedb";

allow-transfer {

適当なacl;

};

fetch-glue no;

recursion no;

pid-file "/var/run/named-contents.pid";

listen-on {

192.168.0.2;

};

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 137

コンテンツサーバ(BIND8:続き)

controls {

unix "/var/run/ndc-contents" perm 0600 owner 53 group 53;

};

zone "example.co.jp" IN { type master;

file "example.co.jp";

};

# 逆索きなど必要に応じて

ndc

ns# ndc -c /var/run/ndc-cache status

named 8.4.5-REL Fri Oct 1 12:22:57 JST 2004 kohi@ns:/.amd_mnt/alphonse/u/share/usr/local/s rc/bind/bind-8.4.5/src/bin/named

config (/etc/named-cache.conf) last loaded at age: Wed Sep 21 11:41:47 2005

number of zones allocated: 64 debug level: 0

xfers running: 0 xfers deferred: 0

soa queries in progress: 0 query logging is OFF

server is initialising itself

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 139

キャッシュサーバ(BIND9)

options {

directory "/etc/namedb";

allow-query {

適当なacl;

};

allow-transfer { localhost;

};

pid-file "/var/run/named-cache.pid";

listen-on {

192.168.0.1;

};

};

キャッシュサーバ(BIND9:続き)

controls {

inet 192.168.0.1 allow { localhost;

};

};

zone "localhost" IN { type master;

file "localhost";

};

# localhostやprivate addressの逆索きなども

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 141

コンテンツサーバ(BIND9)

options {

directory "/etc/namedb";

allow-transfer { localhost;

};

recursion no;

pid-file "/var/run/named-contents.pid";

listen-on {

192.168.0.2;

};

};

コンテンツサーバ(BIND9:続き)

controls {

inet 192.168.0.2 allow { localhost;

};

};

zone "example.co.jp" IN { type master;

file "example.co.jp";

};

# 逆索きなど必要に応じて

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 143

rndc

ns# rndc -s 192.168.0.1 status number of zones: 1

debug level: 0 xfers running: 0 xfers deferred: 0

soa queries in progress: 0 query logging is OFF

recursive clients: 0/1000 tcp clients: 0/100

server is up and running

元ネタは

この話題の元ネタはInternet Week 2003 DNS

DAYでの民田さんのプレゼン参照。

– DNS

サーバーの安全な設定

http://jprs.jp/tech/material/IW2003-DNS-DAY-secure-dns-minda.pdf

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 145

どのバージョンを 使えばいい ?

どのバージョンを使えばいい?

日ごろからアンテナを張ろう。

[email protected][email protected] – http://jprs.jp/tech/

新バージョンがリリースされたら、世間で騒ぎが起 きていないか数日様子を見て、大丈夫ならバージョ ンアップ。

最新版でenbugしたケースもある。

• 8.3.0, 8.4.3

現用バージョンのセキュリティホールが発見された 場合などは臨機応変に急ぐ。

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 147

どのバージョンを使えばいい?(続き)

セキュリティ情報はISCのWWWページ参照

– http://www.isc.org/index.pl?/sw/bind/bind-security.php

ごく簡単にサマライズすると…

– 8.x

• 8.3.7

• 8.4.3~8.4.6(8.4.3には別の問題があるので使ってはいけない)

– 9.x

• 9.2.3~9.2.5

• 9.3.1

 は、今(=資料作成時点)のところセキュリティ上の問 題は見つかっていない。

掲載されているバージョンのうち、ごく一部。

どのバージョンを使えばいい?(続き)

でも現用バージョンの精査に時間をかけるぐらい なら、最新にバージョンアップしてしまえば?

そうは言ってもドキドキしますよね

?

個人的お勧めは

• configure --prefix=/usr/local/bind-9.y.z

• BIND8はsrc/port/OSname/Makefile.setで設定

• ln -s /usr/local/bind-x.y.z /usr/local/bind

直前のバージョンを温存できるので切り戻しが楽。

某有識者のコメント

「自分の使ってるバージョンが把握できていないようじゃ、

すでにやられているようなものです」

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 149

-u(setuid),-t(chroot)

named -u

• setuid()するオプション

• namedを起動して、rootの特権を必要最低限行使

したところで非rootにsetuid()して、rootの特権を放 棄する。

• namedのプロセスを乗っ取られたときに、行われ

得る操作の内容を制限することにより、セキュリティ を向上させる。

• named.pidを書き出すディレクトリやrndc.keyなど

のアクセス権の調整が必要。

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 151

named -t

• chroot()するオプション

• namedのプロセスのrootディレクトリを本当のroot

ディレクトリから変更することにより、変更後のroot ディレクトリより上位のディレクトリにはアクセスで きなくなる。

• namedのプロセスを乗っ取られたときに、ファイル

システム中のアクセスできる範囲を限定することに より、セキュリティを向上させる。

-uと-t

• named -u

ディレクトリやファイルのアクセス権の調整が必要。

• named -t

– named

だけのディレクトリツリーを作成できる。

->-uと-tは相性がいい。

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 153

named -u bind -t /sandboxの挙動(BIND8)

起動

named.pidを書き出して chown()

chroot()

setuid()

named.pidを書き出して chown()

reload,reconfig syslog

ソケット

open()

syslogソケットopen() named-xferを起動

named -u bind -t /sandboxの挙動(BIND8:続き)

• named.pidを書き出すuidが、起動直後とreloadや reconfigのときとで異なる。

• /sandbox/var/run/log(syslogソケット)が必要。

– syslogd -l /sandbox/var/run/log(FreeBSD)

• ndcからのアクセスを待ち受けるソケットは /sandbox/var/run/ndc。

• slaveになるとき、named-xferはnamedの子プロ

セスとして起動される。

– /sandbox/usr/libexec/named-xferが必要。

– /sandbox/usr/lib/libc.so,…が必要。

もしくは

named-xfer

static link

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 155

named -u bind -t /sandboxの挙動(BIND9)

起動

named.pidを書き出し chroot()

setuid()

named.pidを書き出し reload,reconfig

syslogソケットopen()

syslogソケットopen() rndc.key読み出し

named -u bind -t /sandboxの挙動(BIND9:続き)

起動直後はchroot()前にopenlog()するが、reload やreconfigのときにもopenlog()する。

– syslogd -l /sandbox/var/run/log(FreeBSD)

これを忘れると、起動直後のログは採れるのにreloadや

reconfigした時点でログが途切れる。

• rndc.keyはユーザbindに読めないといけない。

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 157

named -t /sandboxの挙動

• /procを見せないと1 CPUで動いてしまった。

– Fedora Core 2+SMP kernel+HTT CPU

• /etc/localtimeを見せないとtimezoneがUTCになっ

てしまい、logのタイムスタンプがずれた。

– FreeBSD

stub レゾルバ、

大丈夫ですか ?

Dec/6/2005 Copyright© 2005, Koh-ichi Ito, All rights reserved 159

どのstubレゾルバを使っているか 把握していますか?

• BIND8のlibbind

– /usr/local/bind/lib

などにインストールされる。

• BIND9のlibbind

– configure

で指定しないとコンパイルすらされない。

• OSのlibc

意識的に指定しないと、このオブジェクトがリンクされる。

セキュリティfix? このマシンは最新のBIND9を追い かけてるから大丈夫だゼ!

大間違い!!

おわりに

関連したドキュメント