このブログを検索

ラベル dns の投稿を表示しています。 すべての投稿を表示
ラベル dns の投稿を表示しています。 すべての投稿を表示

2021/04/28

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; を書くだけじゃダメだよね。鍵を作ったり署名したりしないと... (続く)

2017/05/21

bind@centos6@さくらのVPS キャッシュサーバとして

DNSサーバを自前で建ててみた。

VPSで使っている自分のドメインのネームサーバはさくらインターネットのサービスを利用しており、なんの不都合もないのだが、
DNSサーバってどうやって動いてるのか知りたかったので。

まだちゃんと動いていないのだが、
起動させるだけでけっこう苦労したので
とりあえずそこまでの記録。


インストールしようとしたら、すでに入っていた。

# yum install bind bind-chroot
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
(略)
パッケージ 32:bind-9.8.2-0.62.rc1.el6_9.2.x86_64 はインストール済みか最新バージョンです
パッケージ 32:bind-chroot-9.8.2-0.62.rc1.el6_9.2.x86_64 はインストール済みか最新バージョンです


設定ファイルはnamed.confということはすぐわかったが、

/etc/named.conf
/var/named/chroot/etc/named.conf

の二つがある。

「chroot環境」というものがあり、よくわからないがそっちの方がよいらしく、
すでにそれになっていた。


/etc/sysconfig/named

というファイルもある。書いてあるのは

ROOTDIR=/var/named/chroot

だけである。

WEBの情報をたよりに named.confを設定して起動してみると、エラーが出た。

/etc/named.conf:20: both "recursion no;" and "allow-recursion" active for view external

とりあえず recursion yesにした。

次のエラーは、ファイルが見つからないというものだ。

zone example.com/IN: loading from master file example.com.lan failed: file not found
zone example.com/IN: not loaded due to errors.


これはnamed.confのzoneの部分に書いたファイル名だ。


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

zone "example.com" IN {
        type master;
        file "example.com.lan";
        allow-update { none; };
};

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

};

view "external" {
        match-clients { any; };
        match-destinations { any; };

        allow-query { any; };
        recursion yes;

        zone "example.com" IN {
                type master;
                file "example.com.wan";
                allow-update { none; };
        };

};


これの置いてある場所が正しくないようだ。

結論から言うと置くべき場所はデフォルト設定のままであれば下記だ。

/var/named/chroot/var/named/

/var/namedが二回も出てきて気持ち悪いが。

どうしてこうなるかというと、

まず/etc/sysconfig/named に書かれている ROOTDIRがあって、

ROOTDIR=/var/named/chroot

そこを起点として、

/var/named/chroot/etc/named.conf に書かれている

directory       "/var/named";

これがくっつくので、

/var/named/chroot/var/named/ となる

/var/named/chroot/etc/named.conf に2行のinclude文がある。

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


これらのファイルは、/var/named/chroot/etc にある。

named.rfc1912.zonesの中身

# cat named.rfc1912.zones
zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

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 {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};



ここにもzone情報があって、

named.localhost
named.loopback
named.empty

というファイル名が書いてある。

これらのファイルも、

/var/named/chroot/var/named/

にある。


これらのファイルをそろえて、中身についてはさがせば情報があるので
それを書けばとりあえず起動する。


dig yahoo.co.jp @ns.example.com

VPSで引けたので、一応動いている。


自分のパソコンからVPSのサーバーを指定してnslookupしてみるとtimeoutする。

iptablesで開けたはずなのにと思ってみたら tcp 53になっていたので udpにする。

今度は Query refused となる。


/var/named/chroot/etc/named.conf

のallow-なんとかに、自分のIPアドレス(「確認君」で出るやつ)を書いてやると
引けるようになった。

options {
        .......
        allow-query     { localhost; localnets; xx.xx.xx.xx;  };
        allow-recursion     { localhost; localnets; xx.xx.xx.xx;  };
        allow-query-cache     { localhost; localnets; xx.xx.xx.xx; };
        forwarders{ 8.8.8.8; 8.8.4.4; };
        recursion yes;
        .........
};


私がやりたかったのはこれである。
こういう機能をするDNSサーバは「キャッシュサーバ」と言う。
パソコンとかで設定するDNSサーバとはキャッシュサーバのことだ。

でも、ISPとかのDNSサーバのように、だれでもクエリを許可するにはどうすればよいのだろうか?
また、そうすることの危険性ってないのだろうか?


自分のドメインのゾーン設定についてはあらためて。




2015/11/23

centos7 postfix 送れない

さくらのクラウドで借りている、centos7のサーバでlogwatchの設定をした。

mailtoを自分のgmailのアカウントにして、
でもpostfixの設定とかMXレコードとかなにもしてないから送れないよな・・・
と思いつつlogwatchを実行してみるとなぜか送れた。

サービスを確認すると、postfixは動いていた。デフォルトで動くのか?

ちなみにcentos7ではサービスを確認するコマンドは変わっている。

# systemctl status postfix

のように。再起動や停止もsystemctlを使う。


logwatchのサーバのホスト名が localhost.localdomainになっていた。
まず、サーバのホスト名を直す。

postfix設定ファイルを見るとなにもやってなかったので、
ググって、必要そうな設定を、例によって確証のないままなんとなくやる。

すると、メールが送れなくなった。

/var/log/maillog

Nov 23 10:01:50 localhost postfix/qmgr[30237]: 867B65FDCA: from=<root@adam.monqy.net>, size=1848, nrcpt=1 (queue active)
Nov 23 10:01:50 localhost postfix/qmgr[30237]: D56C15FDD7: from=<root@adam.monqy.net>, size=418, nrcpt=1 (queue active)
Nov 23 10:01:50 localhost postfix/smtp[30346]: 867B65FDCA: to=<じーめーるのあどれす>, relay=none, delay=2221, delays=2221/0/0/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=gmail.com type=MX: Host not found, try again)


ゾーンを編集する。

変わらない。

名前解決ができてないのか?

適当なホスト名にpingを打つと、名前解決していない。

/etc/resolv.conf を見たら何も書いてない。

nameserverを書く。

解決。



自分のドメインのゾーンとか、mxとかは、自分のドメイン宛のメールを受信するときに必要な設定だから今回の件とは関係ないか。


解決したからいいけど、なぜ最初送れたのかが気になる。
host名がlocalhost.localdomainだったから名前解決が必要なかったのかと思ったがそれは自分のホストだし。

postfixでmyhostとかmydomainとかを設定したからか?