◻️準備
ドメイン名:digihide.local
注意)ドメイン名は、各自で差し替えてください。
今回使用するIP:192.168.1.108
◻️firewall
外向き、内向きの53番ポートの開けておくこと!!
◻️firewall
外向き、内向きの53番ポートの開けておくこと!!
◻️作成するファイル類:
①named.conf (編集ファイル)
②named.digihide.local.wan.zone (外向き用ゾーンファイル)
③named.digihide.local.lan.zone (内向き用ゾーンファイル)
④digihide.local.lan.db (内向き用のデータベース)
⑤1.168.192.in-addr.arpa.db (内向き用の逆引きデータベース)
⑥digihide.local.wan.db (外向き用のデータベース)
⑦xxx.xxx.xxx.xxx.in-addr.arpa.wan.db (外向き用の逆引きデータベース)
xxx.xxx.xxx.xxx (グローバルIP)
◻️各種ファイルの収納先
1)データベース類
(要: /var/namedに作成したファイルを以下のフォルダに移動)
/var/named/chroot/var/named
/etc/named
/etc
◻️解説&用語集
ゾーンファイルとは、あるゾーンに関する情報がすべて記載されたファイルのことを指す。
(IPアドレスとドメイン名の対応表)
<ステートメント類(用語集)>
ステートメント | 概要 |
---|---|
opions | BIND全体にかかわる設定項目を定義する。optionsステートメントで設定した 一部内容はzoneステートメントにも反映される。 |
logging | DNSサーバーのログ出力に関する設定項目を定義する。 |
zone | ゾーンを宣言し、ゾーンファイルへのパスを設定する。また、そのゾーン固有の 各種オプション設定(リカーションの可否、クエリーやゾーン転送の許可など)を設定する。 |
<Optionステートメント(用語集)>
設定項目 | 概要 |
---|---|
directory | zoneステートメントの中に出てくる設定ファイルのディレクトリパスや namedデーモンのワークディレクトリを指定。 |
dump-file | キャッシュ内容を保存するファイルのパスを指定(rndcで利用)。 |
statistics-file | rndcを使ってステータス情報を要求した際に統計情報が追記される ファイルのパスを指定。 |
memstatistics-file | サーバー終了時にメモリ使用統計について出力する ファイルのパスを指定(rndcで利用)。 |
allow-query | DNSクエリ(問い合わせ)を許可するホストもしくはネットワークを指定。 |
allow-transfer | ゾーン転送を許可するホストを指定(通常はセカンダリDNSサーバーを指定)。 |
forwarders | 自身で解決できない問い合わせを転送するフォワーダーを指定。 |
<ゾーンファイルの記載例>
設定項目 | 概要 |
---|---|
type | マスター/スレーブの関係を指定。プライマリDNSサーバーの場合は「master」 セカンダリDNSサーバーの場合は「slave」を指定。 |
file | 正引き用設定ファイルのパスを指定。 |
allow-update | ゾーン情報の更新を許可するホストもしくはネットワークを指定。 |
<アドレスマッチリスト>
any | すべてのホストに一致する |
---|---|
none | すべてのホストに一致しない |
localhost | サーバのすべてのインタフェースアドレスに一致する(IPv4 のみ) |
localnets | サーバのインタフェースと同じネットワーク上のホストに一致する (IPv4 のみ) |
localnetsは、LAN内からはアクセスできるようするという意味。
vi /etc/selinux/config
********************************
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
********************************
◻️bind,bind-chrootインストールする。
# yum -y install bind bind-chroot bind-utils
◻️BIND設定ファイル編集を行う。
[root@digihide ~]# vi /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
options {
// listen-on port 53 { 127.0.0.1; }; <——不要なのでコメント化する。
// listen-on-v6 port 53 { ::1; }; <——不要なのでコメント化する。
version "unknown"; ← bindのバージョン情報の非表示化
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";
/*
- 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 belocale part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion no; <—コンテンツサーバにする場合、recursion no;にする。
◻️注意)キャッシュサーバとして、動作させる場合は、recursion yes;にする。
再帰問合せ機能を無効化(コンテンツサーバ)にする場合は、recursion no;にする。
◻️メモ: 現時点で、recursion yes;にしないと外部から名前が引けない。。
◻️メモ: 現時点で、recursion yes;にしないと外部から名前が引けない。。
allow-transfer { none; }; ← 追加(ゾーン情報の転送を禁止)
allow-query { localhost; localnets; }; ← 内部からのみ問合せを許可
allow-recursion { localhost; localnets; }; ← 内部からのみ再帰問合せを許可
allow-query-cache { localhost; localnets; }; ← 内部からのみキャッシュ問合せを許可
forwarders{ 8.8.8.8; 8.8.4.4; }; ← 本DNSサーバー管理外の問合せ先を指定する(例:google)
// dnssec-enable yes; ←dnssecを使用しないため、コメント化する。
// dnssec-validation yes; ←dnssecを使用しないため、コメント化する。
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.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;
};
category lame-servers { null; }; ←追加(error (connection refused) resolvingというエラーログの出力抑止)
};
◉[追加(ここから)内部向け設定◉◉
view "internal" {
match-clients { localnets; }; <--問い合わせに応答するホストを限定するようにする設定
match-destinations { localnets; };
zone "." IN {
type hint;
file "named.ca";
};
// include "/etc/named.rfc1912.zones"; <-----不要なので、コメント化
include "/etc/named.root.key";
include "/etc/named/named.digihide.local.lan.zone";
};
◉[追加(ここまで]◉◉◉◉◉◉◉◉
◉[追加(ここから)外部向け設定開始
◉#固定IPアドレス環境の場合のみ]
◉#固定IPアドレス環境の場合のみ]
view "external" {
match-clients { any; }; <--問い合わせに応答するホストを限定するようにする設定
match-destinations { any; };
include "/etc/named/named.digihide.local.wan.zone";
};
◉[追加(ここまで]◉◉◉◉◉◉◉
******************************************************
◻️解説1:include "/etc/named.root.key";
(rootサーバのDNSSEC鍵情報が記述されている。)
◻️解説2:include "/etc/named.rfc1912.zones";
(rootサーバのDNSSEC鍵情報が記述されている。)
◻️解説2:include "/etc/named.rfc1912.zones";
RFC1912で定められたDNSサーバとして必要な最小限のDNSレコードを設定するための設定ファイル。
->どうも、こいつが原因でエラーを吐くので不要っぽい。
(I)ゾーンファイルの作成
->どうも、こいつが原因でエラーを吐くので不要っぽい。
(I)ゾーンファイルの作成
◻️digihide.localの内部向けゾーン定義ファイル作成を行う。
注意)今回使用するローカルIPの第3オクテットを入力すること!
[root@digihide ~]# vi /etc/named/named.digihide.local.lan.zone
************ named.digihide.local.lan.zone ******************
zone "digihide.local" {
type master;
file "digihide.local.lan.db";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "1.168.192.in-addr.arpa.db";
};
******************************************************
◻️digihide.localの外部向けゾーン定義ファイル作成を行う。
※固定IPアドレス環境の場合のみ
※固定IPアドレス環境の場合のみ
[root@digihide ~]# vi /etc/named/named.digihide.local.wan.zone
************named.digihide.local.wan.zone******************
// 正引き設定
zone "digihide.local" {
type master;
file "digihide.local.wan.db";
allow-query { any; };
};
// 逆引き設定※プロバイダ
zone "xxx.xxx.xxx.xxx.in-addr.arpa" {
type master;
file "xxx.xxx.xxx.xxx.in-addr.arpa.wan.db";
allow-query { any; };
};
********************************************************
xxx.xxx.xxx.xxx(グローバルIP)
(II)ゾーンデータベースの作成
◻️内部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)の作成を行う。
[root@digihide ~]# vi /var/named/digihide.local.lan.db
*****************digihide.local.lan.db*****************
$TTL 86400
@ IN SOA digihide.local. root.digihide.local.(
2011062001 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns1.digihide.local.
IN MX 10 mail.digihide.local.
@ IN A 192.168.1.108 ← サーバーのローカルIPアドレスを指定(digihide.local用)
* IN A 192.168.1.108 ← サーバーのローカルIPアドレスを指定(*.digihide.local用)
******************************************************
注意:mail.digihide.local.は、postfixの/etc/postfix/main.cfのhostnameに記載した内容に合わせること!
例:myhostname = mail.digihide.local
◻️内部向け逆引きゾーンデータベース(IPアドレス⇒ドメイン名)作成を行う
[root@digihide ~]# vi /var/named/1.168.192.in-addr.arpa.db
****************1.168.192.in-addr.arpa.db******************
$TTL 86400
@ IN SOA digihide.local. root.digihide.local.(
2011062001 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns1.digihide.local.
108 IN PTR digihide.local. ← サーバーIPアドレス最下位部(192.168.1.108)とドメイン名を指定
************************************************************
◻️外部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成を行う。
[root@digihide ~]# vi /var/named/digihide.local.wan.db
*****************digihide.local.wan.db*************************
$TTL 86400
@ IN SOA digihide.local. root.digihide.local.(
2011062001 ; Serial
7200 ; Refresh
7200 ; Retry
2419200 ; Expire
86400 ) ; Minimum
IN NS ns1.digihide.local. ← ネームサーバー名
IN MX 10 mail.digihide.local. ← MXホスト名(メールサーバーを構築する場合のみ)
ns1 IN A xxx.xxx.xxx.xxx ← サーバーのグローバルIPアドレスを指定(ns1.digihide.local用)
@ IN A xxx.xxx.xxx.xxx ← サーバーのグローバルIPアドレスを指定(digihide.local用)
www IN A xxx.xxx.xxx.xxx ← サーバーのグローバルIPアドレスを指定(www.digihide.local用)
ftp IN A xxx.xxx.xxx.xxx ← サーバーのグローバルIPアドレスを指定(ftp.digihide.local用)
mail IN A xxx.xxx.xxx.xxx ← サーバーのグローバルIPアドレスを指定(mail.digihide.local用)
digihide.local. IN TXT "v=spf1 ip4:xxx.xxx.xxx.xxx ~all" ← サーバーのグローバルIPアドレスを指定
(メールサーバーを構築する場合のみ)
(メールサーバーを構築する場合のみ)
************************************************************
xxx.xxx.xxx.xxx(グローバルIP)
注意:mail.digihide.local.は、postfixの/etc/postfix/main.cfのhostnameに記載した内容に合わせること!
例:myhostname = mail.digihide.local
◻️外部向け逆引きゾーンデータベース(IPアドレス⇒ドメイン名)作成
[root@digihide ~]# vi /var/named/[グローバルIP].in-addr.arpa.wan.db
*************[グローバルIP].in-addr.arpa.wan.db*****************
$TTL 86400
@ IN SOA digihide.local. root.digihide.local.(
2017012901 ; Serial
7200 ; Refresh
7200 ; Retry
2419200 ; Expire
86400 ) ; Minimum
IN NS ns1.digihide.local.
108 IN PTR digihide.local. ← サーバーIPアドレス4オクテッド目の数値(192.168.1.108)とドメイン名を指定
****************************************************************
注意) 108の箇所にサーバーIPアドレス4オクテッド目の数値を入力を行う。
◻️セカンダリーネームサーバーの登録
(プライマリネームサーバーへの負荷分散が行なえる効果)
(プライマリネームサーバーへの負荷分散が行なえる効果)
[root@centos ~]# vi /etc/named/named.digihide.local.wan.zone
**************************************************************
zone "digihide.local" {
type master;
file "digihide.local.wan.db";
allow-query { any; };
allow-transfer {
xxx.xxx.xxx.xxx; ← このゾーン情報の転送先のIPアドレスを追加
xxx.xxx.xxx.xxx; ← このゾーン情報の転送先のIPアドレス)を追加
};
notify yes; ← このゾーン情報変更時は即座に上記セカンダリへ反映させる
};
**************************************************************
◻️外部向け正引きゾーンデータベース編集を行う
[root@centos ~]# vi /var/named/digihide.local.wan.db
**************************************************************
$TTL 86400
@ IN SOA digihide.local. root.digihide.local.(
2011062002 ; Serial ← 下2桁の通番をカウントアップする
7200 ; Refresh
7200 ; Retry
2419200 ; Expire
86400 ) ; Minimum
IN NS ns1.digihide.local.
IN NS ns1.test-hide.local. ← セカンダリネームサーバー(ns1.test-hide.local)を追加
IN NS ns3.test-hide.local. ← セカンダリネームサーバー(ns3.test-hide.local)を追加
IN MX 10 mail.digihide.local.
ns1 IN A xxx.xxx.xxx.xxx
@ IN A xxx.xxx.xxx.xxx
www IN A xxx.xxx.xxx.xxx
ftp IN A xxx.xxx.xxx.xxx
mail IN A xxx.xxx.xxx.xxx
digihide.local. IN TXT "v=spf1 a mx ~all"
************************************************************
注意:mail.digihide.local.は、postfixの/etc/postfix/main.cfのhostnameに記載した内容に合わせること!
例:myhostname = mail.digihide.local
◻️IPv4のみ有効にする(error (network unreachable) resolvingというエラーログの出力抑止)
[root@digihide ~]# echo OPTIONS="-4" >> /etc/sysconfig/named
◻️ルートゾーン(named.ca)最新化を行う
[root@digihide ~]# dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca
◻️BINDを起動する。
[root@digihide ~]# systemctl start named-chroot
[root@digihide ~]# systemctl enable named-chroot
◻️ルーター、ファイアウォールのTCP53番、UDP53番ポート開放させておく。
設定方法については、各種マニュアルを参照する。
◻️サーバー自身の問合せ先DNSサーバーを自分自身に変更させる。
1)Linuxサーバー自身を問合せ先DNSサーバーにする。
[root@digihide ~]# sed -i 's/DNS1=.*/DNS1=127.0.0.1/g' /etc/sysconfig/network-scripts/ifcfg-eth0
2)DNSサーバー変更反映させる。
[root@digihide ~]# systemctl restart network
◻️正引き&逆引き確認テスト
1)Linuxサーバーの正引きテスト
[root@digihide ~]# dig digihide.local
2)Linuxサーバーの逆引きテスト
[root@digihide ~]# dig -x 192.168.1.108
3)外部ドメインの正引きテスト
[root@digihide ~]# dig [例:www.apple.com]
4)外部ドメインの逆引きテスト
[root@digihide ~]# dig -x [例:apple.comのIP]
◻️DNSサーバーがオープンリゾルバになっていないことを確認する。
(外部の不特定のIPアドレスからの再帰的な問い合わせを許可しているDNS サーバ)
(外部の不特定のIPアドレスからの再帰的な問い合わせを許可しているDNS サーバ)
[root@digihide ~]# wget -qO - http://www.openresolver.jp/cli/check.html ← オープンリゾルバ確認
Configured DNS server: [NOT open] xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx) ← [NOT open]確認
Source IP address: [NOT open] xxx.xxx.xxx.xxx(digihide.local) ← [NOT open]確認
◻️セカンダリーネームサーバの確認を行う。
1)セカンダリネームサーバー(ns1.test-hide.local)で正引きできるか確認する
[root@digihide ~]# dig @x.x.x.x digihide.local
2)セカンダリネームサーバー(ns3.test-hide.local)で正引きできるか確認する
[root@digihide ~]# dig @x.x.x.x digihide.local
◻️設定ファイルをchrootのフォルダへ移動。
1)以下へ移動する。
cd /var/named
2)権限の変更を行う
chmod 777 /var/named/chroot/var/named/data
chmod 777 /var/named/chroot/var/named/named.localhost
->chmod 700でもいいと思う。
3)chroot配下にフォルダの作成を行う。
cp named.loopback /var/named/chroot/var/named
mkdir -p /var/named/chroot/var/named/data/
mkdir -p /var/named/chroot/var/named/dynamic/
mkdir -p /var/named/chroot/var/named/slaves/
chgrp named /var/named/chroot/var/named/data/
chgrp named /var/named/chroot/var/named/dynamic/
chgrp named /var/named/chroot/var/named/slaves/
chmod 770 /var/named/chroot/var/named/data/
chmod 770 /var/named/chroot/var/named/dynamic/
chmod 770 /var/named/chroot/var/named/slaves/
4)/var/named/chroot/var/named配下に、以下のファイルをコピーする。
cp named.loopback /var/named/chroot/var/named
cp named.empty /var/named/chroot/var/named
cp digihide.local.db /var/named/chroot/var/named
cp digihide.local.db.wan /var/named/chroot/var/named
cp named.localhost /var/named/chroot/var/named
cp 1.168.192.in-addr.arpa.db /var/named/chroot/var/named
cp -r data /var/named/chroot/var/named
5)resolv.confを編集
vi /etc/resolv.conf
************************
nameserver 192.168.1.108
************************
6)namedのサービスは立ち上がったようだ。
*******************************************************
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2018-11-04 00:20:29 JST; 3min 33s ago
Process: 2315 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 2327 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 2325 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
Main PID: 2329 (named)
CGroup: /system.slice/named.service
└─2329 /usr/sbin/named -u named -c /etc/named.conf -4
Nov 04 00:20:29 localhost.localdomain named[2329]: zone 1.0.0.127.in-addr.arpa/IN/internal: loaded serial 0
Nov 04 00:20:29 localhost.localdomain named[2329]: zone 1.168.192.in-addr.arpa/IN/internal: loaded serial 2011062001
Nov 04 00:20:29 localhost.localdomain named[2329]: zone localhost.localdomain/IN/internal: loaded serial 0
Nov 04 00:20:29 localhost.localdomain named[2329]: 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/internal: loaded serial 0
Nov 04 00:20:29 localhost.localdomain named[2329]: zone localhost/IN/internal: loaded serial 0
Nov 04 00:20:29 localhost.localdomain named[2329]: zone digihide.local/IN/internal: loaded serial 2011062001
Nov 04 00:20:29 localhost.localdomain named[2329]: zone digihide.local/IN/external: loaded serial 2011062001
Nov 04 00:20:29 localhost.localdomain named[2329]: all zones loaded
Nov 04 00:20:29 localhost.localdomain named[2329]: running
Nov 04 00:20:29 localhost.localdomain named[2329]: zone digihide.local/IN/external: sending notifies (serial 2011062001)
********************************************************
<<<<<<<<<<[作成するか未定]>>>>>>>>>>
◻️ルートゾーン自動更新設定(ルートゾーン最新化スクリプト作成)
[root@digihide ~]# vi named.root_update
************named.root_update*********************
#!/bin/bash
new=`mktemp`
errors=`mktemp`
dig . ns @198.41.0.4 +bufsize=1024 > $new 2> $errors
if [ $? -eq 0 ]; then
sort_new=`mktemp`
sort_old=`mktemp`
diff_out=`mktemp`
sort $new > $sort_new
sort /var/named/chroot/var/named/named.ca > $sort_old
diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
if [ $? -ne 0 ]; then
(
echo '-------------------- old named.root --------------------'
cat /var/named/chroot/var/named/named.ca
echo
echo '-------------------- new named.root --------------------'
cat $new
echo '---------------------- difference ----------------------'
cat $diff_out
) | mail -s 'named.root updated' root
cp -f $new /var/named/chroot/var/named/named.ca
chown named. /var/named/chroot/var/named/named.ca
chmod 644 /var/named/chroot/var/named/named.ca
which systemctl > /dev/null 2>&1
if [ $? -eq 0 ]; then
systemctl restart named-chroot > /dev/null
else
/etc/rc.d/init.d/named restart > /dev/null
fi
fi
rm -f $sort_new $sort_old $diff_out
else
cat $errors | mail -s 'named.root update check error' root
fi
rm -f $new $errors
*****************************************************
◻️ルートゾーン最新化スクリプトへ実行権限付加
[root@digihide ~]# chmod 700 named.root_update
◻️ルートゾーン最新化スクリプトを毎月自動実行されるディレクトリへ移動
[root@digihide ~]# mv named.root_update /etc/cron.monthly/
<<<[多分、不要かもしれない]>>>
◻️セカンダリネームサーバー情報確認
(※レジストラでのセカンダリネームサーバー登録後、24~48時間程度経過後に行うこと)
Free Monitoring Test Toolsの「Select Test Type」欄で「NS records lookup」を選択、「Enter Test Target」欄にドメイン名(例:digihide.local)を入力して
「Perform Test」ボタンを押下する。
|
[Free Monitoring Test Toolsのアドレス]
https://www.websitepulse.local/help/tools.php?tab=dns
0 件のコメント:
コメントを投稿