LoginSignup
0
0

More than 1 year has passed since last update.

BINDハンズオンしてみた

Last updated at Posted at 2021-10-21

目標

LinuC202取得に向けて「EC2上で内部向けDNSを構築してみる」を参考にハンズオンを行いました。
本記事はLinuC202で役立ちそうな内容を追記したものです。

BINDとは?

世界でもっとも普及しているDNSサーバソフトウェア

DNSサーバには、権威DNSサーバフルリゾルバの2つのタイプがあります。

DNSサーバソフトウェア 権威DNSサーバ フルリゾルバ
BIND
PowerDNS
NSD
Unbound

環境

EC2を2つ起動します。
1. DNSサーバ用
SecurityGroupはHTTP 80番、DNS(TCP) 53番、DNS(UDP) 53番、カスタムTCP 953番、SSH 22番の5つを開放

image.png
2. 確認用
SSH 22番のみ開放

1.Apacheインストール

DNSサーバ用EC2にApacheをインストール

sudo su -
yum update -y
yum install httpd -y
echo "BINDtest" | sudo tee /var/www/html/index.html
systemctl start httpd
systemctl enable httpd
curl http://[PublicIP]

BINDtestと表示されれば成功

2.BINDインストール

DNSサーバ用EC2にBINDをインストール

BINDインストール
yum install bind -y

vi /etc/named.confでBINDの設定ファイルを編集

/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.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

// namedの動作詳細を設定
options {
        listen-on port 53 { 127.0.0.1; [PrivateIP]; };
        listen-on-v6 port 53 { ::1; };
        // namedの作業ディレクトリ
        // /etc/named.conf内に記述した相対パスはここが起点となる
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        // 問い合わせを受付けるホストを指定
        // any 全てのIPからDNSの問い合わせに応答
        allow-query     { any; };

        // 自信が保持しないドメイン情報の問合わせを転送するDNSサーバのアドレスを指定
        // 8.8.8.8; 8.8.4.4;は、Googleの公開DNSサーバ
        forwarders {  8.8.8.8; 8.8.4.4; };
        // 問合せ転送失敗時の動作設定
        // first 失敗時自分で問合せる , only 失敗時自分で問合せしない
        forward only;

        /*
         - 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-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

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

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

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

// 管理するドメインの範囲を定義
zone "." IN {
        type hint;
        file "named.ca";
};

zone "example.com" IN {
  type master;
  file "master.example.com";
};

// 指定した外部ファイルを読み込み、内容を/etc/named.confに追加
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

BINDの設定ファイルが正しく記述出来ているか確認します。
何も表示されなければ設定ファイルは正しく記述されており、エラーがある場合のみメッセージが表示されます。
Apacheの構文チェック(httpd -t)と違い、Syntax OKとは表示されません。

named.confの構文チェック
named-checkconf

vi /var/named/master.example.comで正引き用ゾーンファイル作成と編集

/var/named/master.example.com
$TTL 43200
example.com.     IN      SOA    help.example.com. ns01.example.com. (
                                1 ; serial
                                21600      ; refresh (6 hours)
                                7200       ; retry (2 hours)
                                1209600    ; expire (2 weeks)
                                43200)      ; minimum (12 hours)

example.com.              NS    ns01.example.com.
ns01                      A     [PrivateIP]
www                       A     [PublicIP]
BIND起動
systemctl start named
BINDのステータス表示
rndc status

3.resolve.confの設定

vi /etc/resolv.confでresolveの設定ファイルを編集

/etc/resolv.conf
; generated by /sbin/dhclient-script
search ap-northeast-1.compute.internal
nameserver 127.0.0.1

vi /etc/sysconfig/network-scripts/ifcfg-eth0PEERDNS=noに変更

/etc/sysconfig/network-scripts/ifcfg-eth0
host ns01.example.com

ns01.example.com has address [PrivateIP]と表示されれば成功

4.別サーバで確認

確認用サーバでもhost ns01.example.comを実行し、上記と同様の結果が表示されるかを確認します。

sudo vi /etc/resolv.confでresolveの設定ファイルを編集

/etc/resolv.conf
; generated by /sbin/dhclient-script
search ap-northeast-1.compute.internal
nameserver [DNSサーバのPrivateIP]
host www.example.com

www.example.com has address [DNSサーバのPublicIP]と表示されれば成功

curl www.example.com

BINDtestと表示されれば成功

5.接続拒否ホスト指定

vi /etc/named.confでoptions {}内に下記記述を行う事で問合せを受け付けないホストを指定できます。
記述後rndc reconfigを実行する事で、プロセスを再起動することなく設定変更可能

/etc/named.conf
blackhole { [確認用サーバのPrivateIP]; };

確認用サーバでhost www.example.comを実行し、
;; connection timed out; no servers could be reachedと表示されれば接続拒否されています。

6.BINDのバージョン隠蔽

digコマンドでBINDのバージョンが露見します。

dig @[PublicIP] chaos txt version.bind
実行結果
;; ANSWER SECTION:
version.bind.0CHTXT"9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2" //BINDのバージョンが9.11.4と分かる

vi /etc/named.confでoptions {}内に下記記述後、rndc reloadを行う事でBINDのバージョンを隠蔽できます。

/etc/named.conf
version"DNS Server";

再度dig @[PublicIP] chaos txt version.bindを実行します。
/etc/named.confで指定した文字(今回はDNS Server)が表示され、BINDのバージョンが分からなくなっています。

実行結果
;; ANSWER SECTION:
version.bind. 0 CH TXT "DNS Server"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0