2018年10月28日日曜日

BINDログ

以下、動作状況が観れるようだ。

/var/named/chroot/var/named/data/named.run

bad owner nameが出た場合の対処策 for BIND

◻️以下のbad owner nameが出た場合の対処策


[root@localhost etc]# systemctl status named.service
Sep 25 17:21:58 localhost.localdomain bash[9790]: internal/digihide.com/IN: bad owner name (check-names)


以下のコマンドを投入することにより解決する。

[root@localhost etc]# named-checkconf

BIND 設定

◻️準備
ドメイン名:digihide.local
注意)ドメイン名は、各自で差し替えてください。
今回使用するIP:192.168.1.108

◻️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

2)ゾーンファイル類
/etc/named

3)named.conf
/etc


◻️解説&用語集

ゾーンファイルとは、あるゾーンに関する情報がすべて記載されたファイルのことを指す。
(IPアドレスとドメイン名の対応表)


<ステートメント類(用語集)>
ステートメント概要
opionsBIND全体にかかわる設定項目を定義する。optionsステートメントで設定した
一部内容はzoneステートメントにも反映される。
loggingDNSサーバーのログ出力に関する設定項目を定義する。
zoneゾーンを宣言し、ゾーンファイルへのパスを設定する。また、そのゾーン固有の
各種オプション設定(リカーションの可否、クエリーやゾーン転送の許可など)を設定する。

<Optionステートメント(用語集)>
設定項目概要
directoryzoneステートメントの中に出てくる設定ファイルのディレクトリパスや
namedデーモンのワークディレクトリを指定。
dump-fileキャッシュ内容を保存するファイルのパスを指定(rndcで利用)。
statistics-filerndcを使ってステータス情報を要求した際に統計情報が追記される
ファイルのパスを指定。
memstatistics-fileサーバー終了時にメモリ使用統計について出力する
ファイルのパスを指定(rndcで利用)。
allow-queryDNSクエリ(問い合わせ)を許可するホストもしくはネットワークを指定。
allow-transferゾーン転送を許可するホストを指定(通常はセカンダリDNSサーバーを指定)。
forwarders自身で解決できない問い合わせを転送するフォワーダーを指定。

<ゾーンファイルの記載例>
設定項目概要
typeマスター/スレーブの関係を指定。プライマリDNSサーバーの場合は「master」
セカンダリDNSサーバーの場合は「slave」を指定。
file正引き用設定ファイルのパスを指定。
allow-updateゾーン情報の更新を許可するホストもしくはネットワークを指定。
<アドレスマッチリスト>
anyすべてのホストに一致する
noneすべてのホストに一致しない
localhostサーバのすべてのインタフェースアドレスに一致する(IPv4 のみ)
localnetsサーバのインタフェースと同じネットワーク上のホストに一致する
(IPv4 のみ)
localnetsは、LAN内からはアクセスできるようするという意味。


◻️selinux offにすること。
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;にしないと外部から名前が引けない。。



  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アドレス環境の場合のみ]
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";
RFC1912で定められたDNSサーバとして必要な最小限のDNSレコードを設定するための設定ファイル。
  ->どうも、こいつが原因でエラーを吐くので不要っぽい。
(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アドレス環境の場合のみ

[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 サーバ)

[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配下にフォルダの作成を行う。

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/ 



 <<<[多分、不要かもしれない]>>>



◻️セカンダリネームサーバー情報確認
(※レジストラでのセカンダリネームサーバー登録後、2448時間程度経過後に行うこと)
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


php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...