dnssecはじめました(1)

 dnssecについて勉強しているが実感がわかないので実際に設定してみようと思った。

vpsを2台持っているので、まずはそれぞれにbindをインストールする。


1台はcentos8、もう一台はUbuntu 18.04.5 LTS

bindについて調べていたら、centos8が今年で終わるということを知った。


まあなんかしらの後継が出るのだろうから、それはさておき


centosとubuntuでbindのインストール・設定方法が違うのでまずそれを書く。


まずcentos8

# rpm -q bind bind-chroot bind-utils
パッケージ bind はインストールされていません。
パッケージ bind-chroot はインストールされていません。
bind-utils-9.11.20-5.el8_3.1.x86_64

# dnf install bind bind-chroot bind-utils

(略)

基本設定

# cat /etc/named.conf

options {
        listen-on port 53 {
                                127.0.0.1;
                                xx.xx.xx.xx;
        };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     {
                        localhost;
                        yy.yy.yy.yy;
        };

recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};




zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "monqy.net" {
        type master;
        file "monqy.net.zone";
};

dnssec-enable yes; dnssec-validation yes; がデフォルトで書いてある。

デフォルトからの変更箇所

まずlistenするipアドレス。xx.xx.xx.xxは自身のIPアドレス。

        listen-on port 53 {
                                127.0.0.1;
                                xx.xx.xx.xx;
        };

queryを許可するアドレス。とりあえず確認のため、localhostともう一台のbindを動かすサーバーのIPアドレスyy.yy.yy.yyだけを許可する。

        allow-query     {
                        localhost;
                        yy.yy.yy.yy;
        };

zoneファイルの情報。こっちをmasterにする。

zone "monqy.net" {
        type master;
        file "monqy.net.zone";
};

zoneファイル。ns01.monqy.netが自身のfqdnである。 参考にした情報だと、fqdnのAレコードとホスト名のみのAレコードが両方あったのでとりあえずマネする。

# cat /var/named/monqy.net.zone
$TTL 3600
@       IN      SOA     ns01.monqy.net. root.monqy.net. (
        2021042801      ;Serial
        3600            ;Refresh
        300             ;Retry
        360000          ;Expire
        86400   )       ;Negative

                        IN      NS      ns01.monqy.net
ns01.monqy.net          IN      A       xx.xx.xx.xx
ns01                    IN      A       xx.xx.xx.xx
www2                    IN      A       xx.xx.xx.xx
www3                    IN      A       yy.yy.yy.yy

named-checkconfと named-checkconf -zをやって設定に問題がないことを確認。

# named-checkconf
(問題がなければ何もでない)


# named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone monqy.net/IN: loaded serial 2021042801

firewallについては省略。 queryを許可したyy.yy.yy.yyからdigで名前解決できることを確認する。

~$ dig @xx.xx.xx.xx www2.monqy.net

(略)
;; ANSWER SECTION:
www2.monqy.net.         3600    IN      A       xx.xx.xx.xx
(略)

今度はubuntu。パッケージ名(だっけ?)がcentosと違う。

sudo apt-get install bind9

ubuntuの方は、named.confの中にincludeが書いてあって、設定ファイルが分かれている。

/etc/bind/named.conf.options
/etc/bind/named.conf.local
/var/cache/bind/monqy.net.zone ※作る

/etc/bind/named.options は、listen-onとallow-queryを書く。

$ sudo cat /etc/bind/named.conf.options
[sudo] password for clebriz:
options {
        directory "/var/cache/bind";

        listen-on port 53 { localhost; yy.yy.yy.yy; };
        allow-query { localhost; xx.xx.xx.xx; };

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

/etc/bind/named.conf.local は、zone情報を書く。自身をslaveとして、masterのIPアドレスを書く。

ゾーンファイルはmasterからコピーされることになると思う。masterと同じ名前でいいと思うが、一応変えておく。

$ sudo cat /etc/bind/named.conf.local
zone "monqy.net" IN {
        type slave;
        file "monqy.net.slave.zone";
        masters { xx.xx.xx.xx; };
};

/var/cache/bind/monqy.net.slave.zone がゾーンファイル。

これはmasterからコピーされるので中身はなくてもいいのか?でも動作確認のため書いておく。

(後でゾーンファイルの中身を見ようとcatとかすると文字化けして表示できない。これは直接見ちゃいけないファイルなのか?)

bindを起動する。

sudo systemctl enable bind9
sudo systemctl start bind9
sudo systemctl status bind9

statusを見てみると... 動いてはいるのだが、パーミッションがなくてzoneファイルを更新できないというメッセージが。

sudo systemctl status bind9
(略)
zone monqy.net/IN: transfer: could not set file modification time of 'monqy.net.slave.zone': permission denied
(略)

chownでownerとグループを bindに変える。

$ sudo chown bind:bind /var/cache/bind/monqy.net.slave.zone
$ ls /var/cache/bind/ -l
total 16
-rw-r--r-- 1 bind bind 821 Apr 28 02:35 managed-keys.bind
-rw-r--r-- 1 bind bind 512 Apr 28 02:35 managed-keys.bind.jnl
-rw-r--r-- 1 bind bind 525 Apr 28 02:33 monqy.net.slave.zone

dnssec-validation auto; という設定があるが、dnssec-enable yes; は、ない。


$ sudo cat /etc/bind/named.conf

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";


$ sudo cat /etc/bind/named.conf.local
zone "monqy.net" IN {
        type slave;
        file "monqy.net.slave.zone";
        masters { xx.xx.xx.xx; };
};


$ sudo cat /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        listen-on port 53 { localhost; yy.yy.yy.yy; };
        allow-query { localhost; xx.xx.xx.xx; };

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

dnssec-enable yes; を書くだけじゃダメだよね。鍵を作ったり署名したりしないと... (続く)