Linux/Linux 실습

[Linux] 2차 네임 서버 구축 후 테스트

GGkeeper 2021. 11. 19. 15:22

첫 번째 테스트
1차, 2차 네임서버를 모두 중지하고 도메인을 질의한다.
[root@ns1 ~]# systemctl stop named
[root@ns1 ~]# netstat -nltup | grep 53
  <-- 네임서버가 중지했기 때문에 아무것도 출력되지 않는다.
  
[root@ns2 ~]# systemctl stop named
[root@ns2 ~]# netstat -nltup | grep 53
  <-- 네임서버가 중지했기 때문에 아무것도 출력되지 않는다.


nmtui 명령어를 이용해서 1차, 2차 DNS 서버를 설정한다.
[root@ns1 ~]# nmtui
1차 네임서버 : 192.168.108.3
2차 네임서버 : 192.168.108.4

[root@ns1 ~]# systemctl restart network
[root@ns1 ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search sbs.com
nameserver 192.168.108.3
nameserver 192.168.108.4

1차, 2차 네임서버 둘 다 중지했기 때문에 sbs.com 의 질의에 응답하지 않는다.
[root@ns1 ~]# dig sbs.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> sbs.com
;; global options: +cmd
;; connection timed out; no servers could be reached

두 번째 테스트
2차 DNS 서버를 시작하고 sbs.com 도메인 질의를 하면 어떻게 될 것인가 ?
[root@ns2 ~]# systemctl start named
[root@ns2 ~]# netstat -nltup | grep named
tcp        0      0 192.168.108.4:53        0.0.0.0:*               LISTEN      5436/named          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      5436/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      5436/named          
udp        0      0 192.168.108.4:53        0.0.0.0:*                           5436/named 


아래 결과는 2차 네임서버에 질의를 통해서 나온 결과이다.
이것이 나온 것은 2차 네임서버에서 1차 네임서버에 접속해서 포워드 존파일을 잘 받아왔다는 것을 의미한다.
한마디로 동기화가 잘 되었다는 것이다.
[root@ns1 ~]# dig sbs.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> sbs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61857
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sbs.com. IN A

;; ANSWER SECTION:
sbs.com. 300 IN A 192.168.108.3

;; AUTHORITY SECTION:
sbs.com. 300 IN NS ns2.sbs.com.
sbs.com. 300 IN NS ns1.sbs.com.

;; ADDITIONAL SECTION:
ns1.sbs.com. 300 IN A 192.168.108.3
ns2.sbs.com. 300 IN A 192.168.108.4

;; Query time: 0 msec
;; SERVER: 192.168.108.4#53(192.168.108.4)
;; WHEN: 월 11월 15 17:50:28 KST 2021
;; MSG SIZE  rcvd: 120

세 번째 테스트
2차 네임서버에서 zone DB 파일을 가져오는 부분을 테스트한다.

1차 네임서버는 중지되어 있어야 한다.
[root@ns1 ~]# netstat -nltup | grep named

2차 네임서버는 sbs.com.zone 파일을 삭제하고 네임서버를 재시작한다.
1차 네임서버가 중지되었기 때문에 sbs.com.zone 파일을 가져올 수 없다.

[root@ns2 ~]# ls -l /var/named
합계 20
drwxr-x---. 7 root  named   61 11월 15 16:17 chroot
drwxrwx---. 2 named named   23 11월 15 16:53 data
drwxrwx---. 2 named named   60 11월 15 17:50 dynamic
-rw-r-----. 1 root  named 2253  4월  5  2018 named.ca
-rw-r-----. 1 root  named  152 12월 15  2009 named.empty
-rw-r-----. 1 root  named  152  6월 21  2007 named.localhost
-rw-r-----. 1 root  named  168 12월 15  2009 named.loopback
-rw-r--r--. 1 named named  313 11월 15 17:20 sbs.com.zone
drwxrwx---. 2 named named    6  8월 31 23:53 slaves

sbs.com.zone 파일을 삭제한다.
[root@ns2 ~]# rm -fv /var/named/sbs.com.zone 
removed `/var/named/sbs.com.zone'

/var/named 디렉터리를 확인해보면 sbs.com.zone 파일이 삭제되었다.
[root@ns2 ~]# ls -l /var/named
합계 16
drwxr-x---. 7 root  named   61 11월 15 16:17 chroot
drwxrwx---. 2 named named   23 11월 15 16:53 data
drwxrwx---. 2 named named   60 11월 15 17:50 dynamic
-rw-r-----. 1 root  named 2253  4월  5  2018 named.ca
-rw-r-----. 1 root  named  152 12월 15  2009 named.empty
-rw-r-----. 1 root  named  152  6월 21  2007 named.localhost
-rw-r-----. 1 root  named  168 12월 15  2009 named.loopback
drwxrwx---. 2 named named    6  8월 31 23:53 slaves

네임서버를 재시작 한다.
[root@ns2 ~]# systemctl restart named

1차 네임서버가 중지되었으므로 /var/named 디렉터리를 확인해보면 sbs.com.zone 파일이 없다.
[root@ns2 ~]# ls -l /var/named
합계 16
drwxr-x---. 7 root  named   61 11월 15 16:17 chroot
drwxrwx---. 2 named named   23 11월 15 16:53 data
drwxrwx---. 2 named named   60 11월 15 18:05 dynamic
-rw-r-----. 1 root  named 2253  4월  5  2018 named.ca
-rw-r-----. 1 root  named  152 12월 15  2009 named.empty
-rw-r-----. 1 root  named  152  6월 21  2007 named.localhost
-rw-r-----. 1 root  named  168 12월 15  2009 named.loopback
drwxrwx---. 2 named named    6  8월 31 23:53 slaves

중지된 1차 네임서버를 시작한다.
[root@ns1 ~]# systemctl start named
[root@ns1 ~]# netstat -nltup | grep named
tcp        0      0 192.168.108.3:53        0.0.0.0:*               LISTEN      96699/named         
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      96699/named         
tcp6       0      0 ::1:953                 :::*                    LISTEN      96699/named         
udp        0      0 192.168.108.3:53        0.0.0.0:*                           96699/named         
udp        0    768 0.0.0.0:57441           0.0.0.0:*                           96699/named 

[root@ns2 ~]# ls -l /var/named
합계 16
drwxr-x---. 7 root  named   61 11월 15 16:17 chroot
drwxrwx---. 2 named named   23 11월 15 16:53 data
drwxrwx---. 2 named named   60 11월 15 18:06 dynamic
-rw-r-----. 1 root  named 2253  4월  5  2018 named.ca
-rw-r-----. 1 root  named  152 12월 15  2009 named.empty
-rw-r-----. 1 root  named  152  6월 21  2007 named.localhost
-rw-r-----. 1 root  named  168 12월 15  2009 named.loopback
drwxrwx---. 2 named named    6  8월 31 23:53 slaves

2차 네임서버를 시작한다. 1차 네임서버가 시작되었기 때문에 sbs.com.zone파일을 가져올 수 있어서
아래처럼 sbs.com.zone 파일이 생성되었다.
[root@ns2 ~]# systemctl restart named
[root@ns2 ~]# ls -l /var/named
합계 20
drwxr-x---. 7 root  named   61 11월 15 16:17 chroot
drwxrwx---. 2 named named   23 11월 15 16:53 data
drwxrwx---. 2 named named   60 11월 15 18:10 dynamic
-rw-r-----. 1 root  named 2253  4월  5  2018 named.ca
-rw-r-----. 1 root  named  152 12월 15  2009 named.empty
-rw-r-----. 1 root  named  152  6월 21  2007 named.localhost
-rw-r-----. 1 root  named  168 12월 15  2009 named.loopback
-rw-r--r--. 1 named named  313 11월 15 18:10 sbs.com.zone
drwxrwx---. 2 named named    6  8월 31 23:53 slaves

네 번째 테스트  

로그 테스트 
1차 네임서버에서 /var/log/messages 파일의 로그를 확인한다.

로그 디렉터리 : /var/log
로그 파일 :  /var/log/messages

tail -f : 실시간 로그 모니터링
실시간 로그 모니터링을 통해서 /var/log/messages 파일에 기록되는 로그를 확인한다.
[root@ns1 ~]# tail -f /var/log/messages
  :
  :(생략)
  
  
2차 네임서버에서는 sbs.com.zone 파일을 삭제하고 네임서버를 재시작한다.  
[root@ns2 ~]# rm -fv /var/named/sbs.com.zone 
removed `/var/named/sbs.com.zone'
[root@ns2 ~]# systemctl restart named

1차 네임서버에서의 로그는 아래와 같다.
[root@ns1 ~]# tail -f /var/log/messages
  :
  :(생략)
Nov 15 18:18:38 www named[96699]: client @0x7f19b0042060 192.168.108.4#53422 (sbs.com): transfer of 'sbs.com/IN': AXFR started (serial 2021111501)
Nov 15 18:18:38 www named[96699]: client @0x7f19b0042060 192.168.108.4#53422 (sbs.com): transfer of 'sbs.com/IN': AXFR ended


2차 네임서버에서의 로그는 아래와 같다.
[root@ns2 ~]# tail /var/log/messages
  :
  :(생략)
Nov 15 18:18:38 server2 named[5563]: zone sbs.com/IN: transferred serial 2021111501
Nov 15 18:18:38 server2 named[5563]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer status: success
Nov 15 18:18:38 server2 named[5563]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer completed: 1 messages, 8 records, 206 bytes, 0.001 secs (206000 bytes/sec)
Nov 15 18:18:38 server2 named[5563]: zone sbs.com/IN: sending notifies (serial 2021111501)
Nov 15 18:18:38 server2 named[5563]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
Nov 15 18:18:38 server2 named[5563]: resolver priming query complete

다섯 번째 테스트  
1차 네임서버에서 포워드 존 파일을 열어서 호스트를 등록한 후 재시작한다.
이때 serial(버전)을 증가하지 않고 재시작한다.
[root@ns1 ~]# vi /var/named/sbs.com.zone 
$TTL 300
@       IN  SOA ns1  root ( 2021111501 1D 1H 1W  500)
        IN  NS  ns1  
        IN  NS  ns2
        IN  A   192.168.108.3  ; sbs.com.
ns1     IN  A   192.168.108.3  ; ns1.sbs.com.
ns2     IN  A   192.168.108.4  ; ns2.sbs.com.
www     IN  A   192.168.108.3  ; www.sbs.com.
ftp     IN  A   192.168.108.5  ; ftp.sbs.com.

네임서버를 재시작한다.
[root@ns1 ~]# systemctl restart named

2차 네임서버에서 ftp.sbs.com을 확인한다.
ftp.sbs.com 의 주소가 나오지 않았기 때문에 동기화기 안된 것을 알 수 있다.
[root@ns2 ~]# dig @192.168.108.4 ftp.sbs.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> @192.168.108.4 ftp.sbs.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 26538
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ftp.sbs.com. IN A

;; AUTHORITY SECTION:
sbs.com. 300 IN SOA ns1.sbs.com. root.sbs.com. 2021111501 86400 3600 604800 500

;; Query time: 0 msec
;; SERVER: 192.168.108.4#53(192.168.108.4)
;; WHEN: 월 11월 15 19:12:05 KST 2021
;; MSG SIZE  rcvd: 85


여섯 번째 테스트  
1차 네임서버에서 포워드 존 파일을 열어서 호스트를 등록한 후 재시작한다.
이때 serial(버전)을 증가하고 재시작한다.
[root@ns1 ~]# vi /var/named/sbs.com.zone 
$TTL 300
@       IN  SOA ns1  root ( 2021111502 1D 1H 1W  500)
        IN  NS  ns1  
        IN  NS  ns2
        IN  A   192.168.108.3  ; sbs.com.
ns1     IN  A   192.168.108.3  ; ns1.sbs.com.
ns2     IN  A   192.168.108.4  ; ns2.sbs.com.
www     IN  A   192.168.108.3  ; www.sbs.com.
ftp     IN  A   192.168.108.5  ; ftp.sbs.com.


ns2에서 로그를 모니터링으로 대기한다.
[root@ns2 ~]# tail -f /var/log/messages


ns1에서 네임서버를 재시작한다.
[root@ns1 ~]# systemctl restart named

ns2에서 아래처럼 로그가 출력된다.
serial 을 증가했기 때문이다.
[root@ns2 ~]# tail -f /var/log/messages
  :
  :(생략)
Nov 15 19:18:07 server2 named[5619]: client @0x7f947003c150 192.168.108.3#57335: received notify for zone 'sbs.com'
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: notify from 192.168.108.3#57335: serial 2021111502
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: Transfer started.
Nov 15 19:18:07 server2 named[5619]: transfer of 'sbs.com/IN' from 192.168.108.3#53: connected using 192.168.108.4#52469
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: transferred serial 2021111502
Nov 15 19:18:07 server2 named[5619]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer status: success
Nov 15 19:18:07 server2 named[5619]: transfer of 'sbs.com/IN' from 192.168.108.3#53: Transfer completed: 1 messages, 9 records, 226 bytes, 0.002 secs (113000 bytes/sec)
Nov 15 19:18:07 server2 named[5619]: zone sbs.com/IN: sending notifies (serial 2021111502)

dig으로 자기 자신인 ns2의 네임서버로 확인하면 아래처럼 정상적으로 인식된다.
[root@ns2 ~]# dig @192.168.108.4 ftp.sbs.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> @192.168.108.4 ftp.sbs.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10057
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ftp.sbs.com. IN A

;; ANSWER SECTION:
ftp.sbs.com. 300 IN A 192.168.108.5

;; AUTHORITY SECTION:
sbs.com. 300 IN NS ns2.sbs.com.
sbs.com. 300 IN NS ns1.sbs.com.

;; ADDITIONAL SECTION:
ns1.sbs.com. 300 IN A 192.168.108.3
ns2.sbs.com. 300 IN A 192.168.108.4

;; Query time: 0 msec
;; SERVER: 192.168.108.4#53(192.168.108.4)
;; WHEN: 월 11월 15 19:21:14 KST 2021
;; MSG SIZE  rcvd: 124


실습> zone transfer(영역 전송) 확인하기

zone transfer : 영역 전송 (포워드 존파일)을 보내준다.

bind 패키지로 네임서버를 구성하면 zone transfer(영역 전송)에 대한 설정은 기본값이 모든 호스트에서 요청하면 응답을 해주게 설정되어 있다. 
보안상 반드시 막아야 한다. 

1. ns1.sbs.com 설정 내용
-- ns1.sbs.com 의 /etc/named.rfc1912.zones 의 내용 --
zone "sbs.com" IN {
    type master;
    file "sbs.com.zone";
    allow-transfer { 192.168.108.4; };
    notify yes;
    also-notify { 192.168.108.4; };
    allow-update { none; };
};

zone "kbs.com" IN {
   type master;
   file "kbs.com.zone";
   allow-update { none; };
};
-- ns1.sbs.com 의 /etc/named.rfc1912.zones 의 내용 --

2. zone transfer 설정이 안된 경우
외부에서 kbs.com 도메인에 대한 zone transfer를 요청하면 기본값이 허용이 되어 있으므로 도메인의 존 정보를 확인할 수 있다.


C:\Users\user1>nslookup
기본 서버:  ns.lgdacom.net
Address:  164.124.101.2

> server 192.168.108.3
기본 서버:  [192.168.108.3]
Address:  192.168.108.3

> ls -d kbs.com
[[192.168.108.3]]
 kbs.com.                       SOA    ns.kbs.com root.kbs.com. (2021111101 86400 3600 604800 10800)
 kbs.com.                       NS     ns.kbs.com
 kbs.com.                       A      192.168.108.3
 ns                             A      192.168.108.3
 www                            A      192.168.108.3
 kbs.com.                       SOA    ns.kbs.com root.kbs.com. (2021111101 86400 3600 604800 10800)
>


윈도우용 dig.exe를 실행한 결과이다.
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 kbs.com axfr

; <<>> DiG 9.16.22 <<>> @192.168.108.3 kbs.com axfr
; (1 server found)
;; global options: +cmd
kbs.com.                60      IN      SOA     ns.kbs.com. root.kbs.com. 2021111101 86400 3600 604800 10800
kbs.com.                60      IN      NS      ns.kbs.com.
kbs.com.                60      IN      A       192.168.108.3
ns.kbs.com.             60      IN      A       192.168.108.3
www.kbs.com.            60      IN      A       192.168.108.3
kbs.com.                60      IN      SOA     ns.kbs.com. root.kbs.com. 2021111101 86400 3600 604800 10800
;; Query time: 1 msec
;; SERVER: 192.168.108.3#53(192.168.108.3)
;; WHEN: Mon Nov 15 20:20:52 ;; XFR size: 6 records (messages 1, bytes 210)

3. zone transfer 설정이 된 경우

> ls -d sbs.com
[[192.168.108.3]]
*** 도메인 sbs.com을(를) 나열할 수 없습니다. Query refused
DNS 서버가 영역 sbs.com을(를) 사용 중인 컴퓨터에 전송하는 것을 거부했습니다.
잘못된 경우에는 IP 주소 192.168.108.3의 DNS에서 sbs.com의 영역 전송 보안 설정을
확인하십시오.


https://www.isc.org/download/ 에서 bind를 다운로드 받고 zip 파일의 압축을 풀면 그 안에 dig.exe 파일이 있다.
윈도우용 dig.exe 를 실행한 결과이다.
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 sbs.com axfr

; <<>> DiG 9.16.22 <<>> @192.168.108.3 sbs.com axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.



영역 전송에 실패했을 경우의 로그는 아래처럼 남는다.
Nov 15 20:20:07 www named[97191]: client @0x7fdc46e89ed0 192.168.108.1#51671 (sbs.com): zone transfer 'sbs.com/AXFR/IN' denied

영역 전송에 성공했을 경우의 로그는 아래처럼 남는다.
Nov 15 20:20:55 www named[97191]: client @0x7fdc44042060 192.168.108.1#51676 (kbs.com): transfer of 'kbs.com/IN': AXFR started (serial 2021111101)
Nov 15 20:20:55 www named[97191]: client @0x7fdc44042060 192.168.108.1#51676 (kbs.com): transfer of 'kbs.com/IN': AXFR ended


실습> bind 버전 출력 금지하기

bind 패키지로 네임서버를 구성하면 bind 버전에 대한 출력이 기본값으로 모든 호스트에서 요청하면 응답을 해주게 설정되어 있다. 
기본 값은 버전 정보를 확인할 수 있다. 그러므로 보안상 반드시 막아야 한다. 

1. 버전 정보의 출력을 허용한 경우 (기본값)
클라이언트가 버전 정보를 요청하면 버전 정보를 응답해준다.

C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind

; <<>> DiG 9.16.22 <<>> @192.168.108.3 txt chaos version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21132
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b72f505fdeaa13b0eb735f946192455acfc11819b1874df8 (good)
;; QUESTION SECTION:
;version.bind.                  CH      TXT

;; ANSWER SECTION:
version.bind.           0       CH      TXT     "9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7"

;; AUTHORITY SECTION:
version.bind.           0       CH      NS      version.bind.

;; Query time: 0 msec
;; SERVER: 192.168.108.3#53(192.168.108.3)
;; WHEN: Mon Nov 15 20:32:39 ;; MSG SIZE  rcvd: 133


C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind +short
"9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7"


2. 버전 정보의 출력을 금지한 경우
클라이언트가 버전 정보를 요청하면 NULL 값을 응답해주므로 버전정보가 출력되지 않는다.
[root@ns1 ~]# vi /etc/named.conf 
  :
options {
  :
            version "";
  :

[root@ns1 ~]# rndc reload
server reload successful


C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind +short
""

[root@ns1 ~]# vi /etc/named.conf 
  :
options {
  :
            version "bind version";
  :

[root@ns1 ~]# rndc reload
server reload successful

C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind

; <<>> DiG 9.16.22 <<>> @192.168.108.3 txt chaos version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 144
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 027a4cc72ed27e36b292f5d0619246f4ea51595272f03ad3 (good)
;; QUESTION SECTION:
;version.bind.                  CH      TXT

;; ANSWER SECTION:
version.bind.           0       CH      TXT     "bind version"

;; AUTHORITY SECTION:
version.bind.           0       CH      NS      version.bind.

;; Query time: 1 msec
;; SERVER: 192.168.108.3#53(192.168.108.3)
;; WHEN: Mon Nov 15 20:39:29 ;; MSG SIZE  rcvd: 108


KT DNS의 버전 정보를 확인한다.
C:\Users\user1\Downloads\BIND9.16.22.x64>dig @192.168.108.3 txt chaos version.bind +short
"bind version"

[root@ns2 ~]# dig @168.126.63.1 txt chaos version.bind +short
""
[root@ns2 ~]# dig @168.126.63.1 txt chaos version.bind +short
"Unknown"
[root@ns2 ~]# dig @168.126.63.1 txt chaos version.bind +short
"Cyber World Leader Kornet!"