Bind(Berkeley Internet Name Domain) - AlmaLinux

Bindのインストール

sudo dnf -y install bind bind-chroot

bind-utils は、Linux環境で DNS関連のコマンド を提供するツールセットです。以下のコマンドが使用可能になります。

  • dig:DNSサーバーに問い合わせを行い、詳細な情報を取得
  • nslookup:ホスト名やIPアドレスの情報を取得
  • host:簡単なDNS情報の検索を行う

CentOSやRHEL環境では、デフォルトでこれらのコマンドがインストールされていないことがあります。インストールするには、以下のコマンドを実行します。

// bind-utils がインストールされているか確認
sudo dnf search bind-utils

// bind-utils のインストール
sudo dnf install bind-utils

bind-chroot は、DNSサーバーのセキュリティを強化するための「 chroot環境 」を提供するツールです。

chroot環境を利用すると、BINDの動作範囲を限定されたディレクトリに閉じ込めることができ、BINDが攻撃された場合でも、システム全体への影響を最小限に抑えることが可能になります。

通常の「 / 」ではなく、「 /var/named/chroot 」などの専用ディレクトリ内で動作します。また、DNSサーバーのプロセスを他のシステム領域から分離し、攻撃リスクを低減します。

ファイル

内容 パス
BINDの全体的な設定ファイル /etc/named.conf
ゾーンの定義ファイル /var/named/myserver.jp.zones
正引きの定義ファイル /var/named/myserver.jp.db
逆引きの定義ファイル /var/named/11.168.192.in-addr.arpa.db

「 /etc/named.conf 」の初期内容

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { 127.0.0.1; };
        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; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-validation yes;

        managed-keys-directory "/var/named/dynamic";
        geoip-directory "/usr/share/GeoIP";

        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";

それぞれのファイルを以下のようにします。

/etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { 127.0.0.1; 192.168.11/24; };
        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; 192.168.11/24; }; // 修正
        forwarders { 192.168.11.1; }; // 追加

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-validation yes;

        managed-keys-directory "/var/named/dynamic";
        geoip-directory "/usr/share/GeoIP";

        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;
        };
};

// 以下のように編集
view "internal" {
        zone "." IN {
                type hint;
                file "named.ca";
        };

        include "/etc/named.rfc1912.zones";
        include "/var/named/myserver.jp.zones";
};

include "/etc/named.root.key";
/var/named/myserver.jp.zones
zone "myserver.jp" {
        type master;
        file "myserver.jp.db";
};

zone "11.168.192.in-addr.arpa" {
        type master;
        file "11.168.192.in-addr.arpa.db";
};
/var/named/myserver.jp.db
$TTL    86400
@       IN      SOA     myserver.jp. root.myserver.jp.(
                        2016030101 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      server.myserver.jp.
        IN      MX 10   server.myserver.jp.
@       IN      A       192.168.11.9
server  IN      A       192.168.11.9
www     IN      A       192.168.11.9
ftp     IN      A       192.168.11.9
mail    IN      A       192.168.11.9
/var/named/11.168.192.in-addr.arpa.db
$TTL    86400
@       IN      SOA     myserver.jp. root.myserver.jp.(
                        2016030101 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      server.myserver.jp.
9       IN      PTR     server.myserver.jp.

設定

ローカル環境の機器の設定情報は、以下のようにしています。

ドメイン名は、任意で好きなものにしてください。

内容 IPアドレス
ルーター 192.168.11.1
サーバー 192.168.11.9
LANのサブネット 192.168.11.0/24
DNSサーバー 192.168.11.9
ドメイン名 myserver.jp

ゾーンの定義ファイルを作成します。

2つ目以下の部分のzone項目は、IPアドレスからホスト名を求める「逆引き」についての設定ファイルを指定します。

zone "11.168.192.in-addr.arpa" {
        type master;
        file "11.168.192.in-addr.arpa.db"; // ※1
};

「 zone "11.168.192.in-addr.arpa" 」のzoneの後に続く部分は、LANのサブネットのIPアドレスの最後の部分を除いたものを逆に記載します。

サブネットが「 192.168.11.0 」の場合は、「 11.168.192.in-addr.arpa 」とします。他の例をあげると「 192.168.1.0 」なら「 1.168.192.in-addr.arpa 」とします。

逆引きの定義ファイルのファイル名は、※1で指定したファイル名にします。

/var/named/11.168.192.in-addr.arpa.db

$TTL    86400
@       IN      SOA     myserver.jp. root.myserver.jp.(
                        2016030101 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      server.myserver.jp.
9       IN      PTR     server.myserver.jp. // ※2

※2 の最初の「 9 」は、サーバーのIPアドレスの最後の部分を指定します。上記の場合は、IPアドレスが「 192.168.11.9 」の場合です。他の例をあげると、「 192.168.11.4 」なら「 4 」を指定します。

設定ファイルのチェック

named.confの構文チェックを行うには、「 named-checkconf 」コマンドを実行します。

「 named-checkconf ファイル名 」で調べることができますが、ファイル名を省略すると「 /etc/named.conf 」をチェックします。

sudo named-checkconf

namedサービスを有効にする

sudo systemctl restart named-chroot

// 自動起動の設定
sudo systemctl enable named-chroot

ファイアウォールの設定

ファイアウォールの設定を変更します。

sudo firewall-cmd --permanent --add-service=dns --zone=public
sudo firewall-cmd --reload

BINDの動作確認

名前解決の確認

dig A server.myserver.jp

逆引きの確認

dig -x 192.168.1.9

外部ホストの名前解決の確認

dig A www.google.co.jp

上記のコマンドを実行し、「 ;; ANSWER SECTION: 」の結果が表示されれば設定は完了です。

サーバーのネットワークの設定

サーバーの nmtui で、IPアドレス、ゲートウェイ、DNS サーバーを手動で設定します。

クライアントの設定変更

クライアントがパソコンだった場合、イーサネットもしくは、Wi-Fi のインターネットプロトコルバージョン4(TCP/IP)の設定を変更します。

「 次のDNSサーバーのアドレスを使う(E) 」を選択し、優先DNSサーバーにBINDを設定したサーバーのIPアドレスを指定します。代替DNSサーバーには、ルーターのIPアドレスを設定します。