Linux/Source/NSD
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
ns-lab
nowsky system-lab
DigiLoog
Linux
Windows
開始行:
*NSD [#g2acfc62]
権威DNSに特化したサーバアプリケーションであり、オランダ企...
RFCに準拠した最低限の機能のみ実装している為、脆弱性が少な...
最低限の機能しか無い為、&color(#ff0000){DNSクエリを取得出...
また、NSDをslaveとして構築した際にserialの比較を行わない[...
DNSルートサーバでも採用されており、グローバルの稼働実績も...
BINDとNSDのハイブリッド構成を取って脆弱性対策をするケース...
BIND脱却としてオールNSD構成を取る日本企業も増えてきた。
~
*参考サイト [#h7d17d85]
-[[NLnet Labs:+https://nlnetlabs.nl/]]
-[[NSD Documentation:+https://nlnetlabs.nl/documentation/...
-[[日本Unboundユーザー会:+https://unbound.jp/nsd4/nsd-con...
~
*構築環境 [#n7822bae]
OSはCentOSを利用。普通は出来ないDNSクエリ取得を実現すべく...
ソースコードからビルドを実施している。
- 共通環境
OS : CentOS 8.2.2004 x86_64
NSD : NSD v4.3.3
user : nsd
group : nsd
chroot: /var/nsd/chroot
~
*インストール [#k06c4a06]
-&size(16){&font(b){0. ソース改変};};
NSDでDNSクエリを取得する事は出来ないが、
下記サイトで公開している独自パッチを適用する事でログ取得...
サポート外となるが、ログ取得が必要な時はソースコードを変...
#region(&color(#ff0000){変更部分};)
-参考サイト
[[あ~ゆ~どりま~:+http://ayd.jp/p_blog/archive-201410/a...
[[どさにっき:+http://ya.maya.st/d/201305b.html#s20130517_...
-NSD v4.3.3
[root@server nsd-4.3.3]# diff -up query.c query.c-4.3.3
--- query.c 2020-10-08 16:14:25.000000000 +0...
+++ query.c-4.3.3 2020-10-10 14:20:49.000000000 +0...
@@ -1406,6 +1406,7 @@ query_process(query_type *q, nsd_t...
nsd_rc_type rc;
query_state_type query_state;
uint16_t arcount;
+ char address[128];
/* Sanity checks */
if (buffer_limit(q->packet) < QHEADERSZ) {
@@ -1543,6 +1544,19 @@ query_process(query_type *q, nsd_...
return QUERY_PROCESSED;
}
+ /* Query logging. */
+ addr2str(&q->addr, address, sizeof(address));
+ log_msg(LOG_INFO, "client %s: query %s %s %s %s%...
+ address,
+ q->qname ? dname_to_string(q->qname, NUL...
+ rrclass_to_string(q->qclass),
+ rrtype_to_string(q->qtype),
+ RD(q->packet) ? "+" : "-",
+ q->edns.status == EDNS_OK ? "E" : "",
+ q->tcp ? "T" : "",
+ q->edns.dnssec_ok ? "D" : "",
+ CD(q->packet) ? "C" : "");
+
query_prepare_response(q);
if (q->qclass != CLASS_IN && q->qclass != CLASS_...
#endregion
~
-&size(16){&font(b){1. インストール};};
systemdを用いるOSを使っている場合、configure時にオプショ...
だが、NSDのconfigureスクリプトに相性があり、必要なパッケ...
未インストールと判定されるケースがある。
その場合はsystemd有効化オプションを無効化し、起動スクリプ...
今回は相性問題が発生した為、CentOSを用いているがsystemdを...
# dnf install libevent-devel
# ./configure --prefix=/usr/local/nsd-4.3.3 --enable-pie \
--enable-relro-now --enable-ratelimit-default-is-off \
--disable-nsec3 --disable-radix-tree
# make
# make install
# vi /usr/lib/systemd/system/nsd.service
---
[Unit]
Description=Name Server Daemon
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/nsd
ExecStartPre=/usr/local/nsd/sbin/nsd-checkconf /etc/nsd/...
ExecStart=/usr/local/nsd/sbin/nsd -d -c /etc/nsd/nsd.con...
ExecReload=/usr/local/nsd/sbin/nsd-control -c /etc/nsd/n...
ExecStop=/usr/local/nsd/sbin/nsd-control -c /etc/nsd/nsd...
Restart=on-abort
LimitNOFILE=1048576
LimitNPROC=1048576
[Install]
WantedBy=multi-user.target
~
-&size(16){&font(b){2. ディレクトリ作成};};
NSDのデフォルト動作はchroot無しを想定しているので、chroot...
リモート操作やローカルAPIを実行する為の公開鍵も作成し、ch...
# mkdir /var/nsd/chroot
# mkdir /var/nsd/chroot/tmp
# mkdir /var/nsd/chroot/etc/nsd
# mkdir /var/nsd/chroot/var/log
# mkdir /var/nsd/chroot/var/run
# mkdir /var/nsd/chroot/var/db/nsd
# ln -s /usr/local/nsd-4.3.3 /usr/local/nsd
# ln -s /var/nsd/chroot/etc/nsd /etc/nsd
# ln -s /var/nsd/chroot/var/log /var/log/nsd
# groupadd nsd
# useradd -g nsd -d /var/nsd -s /sbin/nologin nsd
# chown -R nsd.nsd /var/nsd/chroot/tmp
# chown -R nsd.nsd /var/nsd/chroot/var/run
# chown -R nsd.nsd /var/nsd/chroot/var/log
# /usr/local/nsd/sbin/nsd-control-setup
# cp -a /usr/local/nsd/etc/nsd/* /var/nsd/chroot/etc/nsd/
# vi /etc/logrotate.d/nsd
---
/var/log/nsd/*.log {
create 0644 nsd nsd
missingok
sharedscripts
postrotate
systemctl restart nsd > /dev/null 2>/dev/null ||...
endscript
}
~
-&size(16){&font(b){3. 設定ファイル};};
サンプルでは、example.comをDNSゾーンマスター、example.net...
LISTEN-IPは実際にDNSクエリに応答するグローバルIPと、
ゾーン転送用のプライベートIP(クラスA)を書いている。
# vi /etc/nsd/nsd.conf
---
##
## Copyright (C) 2001-2020, NLnet Labs. All rights reser...
##
## See LICENSE for the license.
##
server:
server-count: 1
ip-address: 192.168.0.1
ip-address: 203.0.113.1
ip-address: 2001:db8::203:0:113:1
port: 53
username: nsd
chroot: "/var/nsd/chroot"
zonesdir: "/var/nsd/chroot/etc/nsd"
zonelistfile: "/var/nsd/chroot/var/db/nsd/zone.list"
database: "/var/nsd/chroot/var/db/nsd/nsd.db"
logfile: "/var/nsd/chroot/var/log/nsd.log"
pidfile: "/var/nsd/chroot/var/run/nsd.pid"
xfrdfile: "/var/nsd/chroot/var/db/nsd/xfrd.state"
xfrdir: "/var/nsd/chroot/tmp"
version: "unknown"
identity: "unknown"
hide-version: yes
hide-identity: yes
remote-control:
control-enable: yes
control-interface: 127.0.0.1
control-port: 8952
server-key-file: "/var/nsd/chroot/etc/nsd/nsd_server...
server-cert-file: "/var/nsd/chroot/etc/nsd/nsd_serve...
control-key-file: "/var/nsd/chroot/etc/nsd/nsd_contr...
control-cert-file: "/var/nsd/chroot/etc/nsd/nsd_cont...
zone:
name: "example.com"
zonefile: "master/example.com"
# notify: 192.168.0.3@53 NOKEY
# notify-retry: 5
# provide-xfr: 53 NOKEY
zone:
name: "example.net"
zonefile: "slave/example.net"
allow-notify: 192.168.0.2 NOKEY
request-xfr: 192.168.0.2@53 NOKEY
allow-axfr-fallback: yes
# outgoing-interface: 192.168.0.1
~
-&size(16){&font(b){4. 動作確認};};
NSDを実際に起動させて動作確認を行う。
今回はDNSクエリログ出力パッチを適用している為、BINDの様な...
# systemctl enable nsd
# systemctl start nsd
# cat /var/log/nsd.log
---
[2020-10-XX 13:48:52.753] nsd[100080]: notice: nsd start...
[2020-10-XX 13:48:52.813] nsd[100081]: notice: nsd start...
[2020-10-XX 13:49:51.041] nsd[100083]: info: client 192....
終了行:
*NSD [#g2acfc62]
権威DNSに特化したサーバアプリケーションであり、オランダ企...
RFCに準拠した最低限の機能のみ実装している為、脆弱性が少な...
最低限の機能しか無い為、&color(#ff0000){DNSクエリを取得出...
また、NSDをslaveとして構築した際にserialの比較を行わない[...
DNSルートサーバでも採用されており、グローバルの稼働実績も...
BINDとNSDのハイブリッド構成を取って脆弱性対策をするケース...
BIND脱却としてオールNSD構成を取る日本企業も増えてきた。
~
*参考サイト [#h7d17d85]
-[[NLnet Labs:+https://nlnetlabs.nl/]]
-[[NSD Documentation:+https://nlnetlabs.nl/documentation/...
-[[日本Unboundユーザー会:+https://unbound.jp/nsd4/nsd-con...
~
*構築環境 [#n7822bae]
OSはCentOSを利用。普通は出来ないDNSクエリ取得を実現すべく...
ソースコードからビルドを実施している。
- 共通環境
OS : CentOS 8.2.2004 x86_64
NSD : NSD v4.3.3
user : nsd
group : nsd
chroot: /var/nsd/chroot
~
*インストール [#k06c4a06]
-&size(16){&font(b){0. ソース改変};};
NSDでDNSクエリを取得する事は出来ないが、
下記サイトで公開している独自パッチを適用する事でログ取得...
サポート外となるが、ログ取得が必要な時はソースコードを変...
#region(&color(#ff0000){変更部分};)
-参考サイト
[[あ~ゆ~どりま~:+http://ayd.jp/p_blog/archive-201410/a...
[[どさにっき:+http://ya.maya.st/d/201305b.html#s20130517_...
-NSD v4.3.3
[root@server nsd-4.3.3]# diff -up query.c query.c-4.3.3
--- query.c 2020-10-08 16:14:25.000000000 +0...
+++ query.c-4.3.3 2020-10-10 14:20:49.000000000 +0...
@@ -1406,6 +1406,7 @@ query_process(query_type *q, nsd_t...
nsd_rc_type rc;
query_state_type query_state;
uint16_t arcount;
+ char address[128];
/* Sanity checks */
if (buffer_limit(q->packet) < QHEADERSZ) {
@@ -1543,6 +1544,19 @@ query_process(query_type *q, nsd_...
return QUERY_PROCESSED;
}
+ /* Query logging. */
+ addr2str(&q->addr, address, sizeof(address));
+ log_msg(LOG_INFO, "client %s: query %s %s %s %s%...
+ address,
+ q->qname ? dname_to_string(q->qname, NUL...
+ rrclass_to_string(q->qclass),
+ rrtype_to_string(q->qtype),
+ RD(q->packet) ? "+" : "-",
+ q->edns.status == EDNS_OK ? "E" : "",
+ q->tcp ? "T" : "",
+ q->edns.dnssec_ok ? "D" : "",
+ CD(q->packet) ? "C" : "");
+
query_prepare_response(q);
if (q->qclass != CLASS_IN && q->qclass != CLASS_...
#endregion
~
-&size(16){&font(b){1. インストール};};
systemdを用いるOSを使っている場合、configure時にオプショ...
だが、NSDのconfigureスクリプトに相性があり、必要なパッケ...
未インストールと判定されるケースがある。
その場合はsystemd有効化オプションを無効化し、起動スクリプ...
今回は相性問題が発生した為、CentOSを用いているがsystemdを...
# dnf install libevent-devel
# ./configure --prefix=/usr/local/nsd-4.3.3 --enable-pie \
--enable-relro-now --enable-ratelimit-default-is-off \
--disable-nsec3 --disable-radix-tree
# make
# make install
# vi /usr/lib/systemd/system/nsd.service
---
[Unit]
Description=Name Server Daemon
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/nsd
ExecStartPre=/usr/local/nsd/sbin/nsd-checkconf /etc/nsd/...
ExecStart=/usr/local/nsd/sbin/nsd -d -c /etc/nsd/nsd.con...
ExecReload=/usr/local/nsd/sbin/nsd-control -c /etc/nsd/n...
ExecStop=/usr/local/nsd/sbin/nsd-control -c /etc/nsd/nsd...
Restart=on-abort
LimitNOFILE=1048576
LimitNPROC=1048576
[Install]
WantedBy=multi-user.target
~
-&size(16){&font(b){2. ディレクトリ作成};};
NSDのデフォルト動作はchroot無しを想定しているので、chroot...
リモート操作やローカルAPIを実行する為の公開鍵も作成し、ch...
# mkdir /var/nsd/chroot
# mkdir /var/nsd/chroot/tmp
# mkdir /var/nsd/chroot/etc/nsd
# mkdir /var/nsd/chroot/var/log
# mkdir /var/nsd/chroot/var/run
# mkdir /var/nsd/chroot/var/db/nsd
# ln -s /usr/local/nsd-4.3.3 /usr/local/nsd
# ln -s /var/nsd/chroot/etc/nsd /etc/nsd
# ln -s /var/nsd/chroot/var/log /var/log/nsd
# groupadd nsd
# useradd -g nsd -d /var/nsd -s /sbin/nologin nsd
# chown -R nsd.nsd /var/nsd/chroot/tmp
# chown -R nsd.nsd /var/nsd/chroot/var/run
# chown -R nsd.nsd /var/nsd/chroot/var/log
# /usr/local/nsd/sbin/nsd-control-setup
# cp -a /usr/local/nsd/etc/nsd/* /var/nsd/chroot/etc/nsd/
# vi /etc/logrotate.d/nsd
---
/var/log/nsd/*.log {
create 0644 nsd nsd
missingok
sharedscripts
postrotate
systemctl restart nsd > /dev/null 2>/dev/null ||...
endscript
}
~
-&size(16){&font(b){3. 設定ファイル};};
サンプルでは、example.comをDNSゾーンマスター、example.net...
LISTEN-IPは実際にDNSクエリに応答するグローバルIPと、
ゾーン転送用のプライベートIP(クラスA)を書いている。
# vi /etc/nsd/nsd.conf
---
##
## Copyright (C) 2001-2020, NLnet Labs. All rights reser...
##
## See LICENSE for the license.
##
server:
server-count: 1
ip-address: 192.168.0.1
ip-address: 203.0.113.1
ip-address: 2001:db8::203:0:113:1
port: 53
username: nsd
chroot: "/var/nsd/chroot"
zonesdir: "/var/nsd/chroot/etc/nsd"
zonelistfile: "/var/nsd/chroot/var/db/nsd/zone.list"
database: "/var/nsd/chroot/var/db/nsd/nsd.db"
logfile: "/var/nsd/chroot/var/log/nsd.log"
pidfile: "/var/nsd/chroot/var/run/nsd.pid"
xfrdfile: "/var/nsd/chroot/var/db/nsd/xfrd.state"
xfrdir: "/var/nsd/chroot/tmp"
version: "unknown"
identity: "unknown"
hide-version: yes
hide-identity: yes
remote-control:
control-enable: yes
control-interface: 127.0.0.1
control-port: 8952
server-key-file: "/var/nsd/chroot/etc/nsd/nsd_server...
server-cert-file: "/var/nsd/chroot/etc/nsd/nsd_serve...
control-key-file: "/var/nsd/chroot/etc/nsd/nsd_contr...
control-cert-file: "/var/nsd/chroot/etc/nsd/nsd_cont...
zone:
name: "example.com"
zonefile: "master/example.com"
# notify: 192.168.0.3@53 NOKEY
# notify-retry: 5
# provide-xfr: 53 NOKEY
zone:
name: "example.net"
zonefile: "slave/example.net"
allow-notify: 192.168.0.2 NOKEY
request-xfr: 192.168.0.2@53 NOKEY
allow-axfr-fallback: yes
# outgoing-interface: 192.168.0.1
~
-&size(16){&font(b){4. 動作確認};};
NSDを実際に起動させて動作確認を行う。
今回はDNSクエリログ出力パッチを適用している為、BINDの様な...
# systemctl enable nsd
# systemctl start nsd
# cat /var/log/nsd.log
---
[2020-10-XX 13:48:52.753] nsd[100080]: notice: nsd start...
[2020-10-XX 13:48:52.813] nsd[100081]: notice: nsd start...
[2020-10-XX 13:49:51.041] nsd[100083]: info: client 192....
ページ名: