DNS취약점 정리해 공유드립니다.

DNSPro Top 7 DNS Security Risks - 2013
http://cafe.naver.com/dnspro/22229

1. 서버리스트 노출
2. DNS소프트웨어 취약점
3. 버전정보 노출
4. 관리자 계정 및 메일관리 취약
5. DDOS에 취약
6. OPEN DNS 취약점에 노출된체 운영중
7. DNS서버는 이중화 안되어 있음

=====DNSPro Top 7  DNS Security Risks - 2013=====


1.  서버리스트 노출

   문제점: DNS서버의 기본 보안설정 미비로 많은 기업들 DNS를 통해 전체 서버리스트가 노출 되어 있다.

   해결법 : DNS서버에 서버리스트 전송제한 기능 설정 필요 (Zone-transfer 제한기능 설정필요)

   메뉴얼 : http://cafe.naver.com/dnspro/292

 

2. DNS소프트웨어 취약점

  문제점 : 취약점을 가진 DNS서버로  기본운영중

  해결법 :  최신 버전으로 업그레이드

     BIND DNS 다중 취약점 보안 업데이트 권고 http://cafe.naver.com/dnspro/21130

    BIND 버전별 취약점 http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=bind

    BIND 서비스 거부 취약점 보안 업데이트 권고 https://www.isc.org/software/bind/advisories/cve-2011-tbd


3. 버전정보 노출 

  문제점 : DNS서버의 기본 보안설정 미비로 버전이 노출되어 있음

  해결법 : 버전 정보가 노출된부분에 대해 보안설정 필요


4. 관리자 계정 및 메일관리 취약

   문제점 : 계정정보 유출로 인해, DNS서버 관리업체 사이트로 정상 로그온해 정보변경

   해결법 : DNS서버 관리업체 사이트의 암호의 주기적인 변경 (타 포털사이트의 계정/암호와 같지 않도록 관리)

    3년간 민간부분 도메인 4만여건 해킹 http://cafe.naver.com/dnspro/16926

   트위터 DNS서버 해킹사고로 중지 http://cafe.naver.com/dnspro/14192

   국내도 유출된 장보로 DNS서비스 중기되는 경우가 발생되고 있습니다 http://cafe.naver.com/dnspro/22187

 
5. DDOS에 취약

  문제점 : DNS서버는 보통 2대정도로 운영중이라, DDOS에 취악함

  해결법 : 네트워크장비를 이용해 서버를 다중화하거나, 고성능 서버 도입을 통해 가용성 확보

  아마존,월마트 DNS DDOS공격받아 다운 http://cafe.naver.com/dnspro/14299

 

6. OPEN DNS 취약점에 노출된체 운영중

  문제점 : 현재 DNS네임서버운영 기관들의 네임서버를 PC DNS로 설정하면 인터넷이 가능하며,

            운영버전에 따라 캐쉬 포이즈닝 공격 취약점이 존재한다.

  해결법 : 네임서버 전용과 Cache DNS전용 DNS서버를 구분하여 운영.

   DNS취약점 이용 해킹 노출 http://cafe.naver.com/dnspro/525

 
7. DNS서버 이중화 안되어 있음

  문제점 : 현재 서버는 같은 네트워크에 있거나, 같은 네트워크장비에 물려있어 네트워크장비 장애시

             전체서비스가 중단 되는 RISK가 있음

  해결법 : DNS서버의 네트워크 분산배치 및 네임서버 추가를 통한 다중화


DNS중요성 및 보안문제는 다들 알고 있는 내용이나 조치 및 관리가 안되고 있어 정리해 올립니다 ^^
주의 : 처음하시는분은 설정 테스트해보시고 작업하세요 ~ 무작정 작업하시면 장애납니다 - -

213년 4월 29일 월요일 ,  From : DNSPro.kr 운영진


 
별첨.  참고할만한 사이트
- DNS무료점검 http://www.serverchk.com/

- 보안정보

 http://www.kb.cert.org/vuls/id/800113
 http://www.microsoft.com/technet/security/Bulletin/MS08-037.mspx
 http://www.securityfocus.com/brief/779

 

- 점검 사이트

NIDA : http://dns.nida.or.kr/

Ns확인 http://www.zonecut.net/dns/

http://zonecheck.denic.de/zonecheck ( http://www.afnic.fr/outils/zonecheck)

DNS Trace http://www.squish.net/dnscheck
 

[출처] [보안자료] DNSPro Top 7 DNS Security Risks - 2013 (DNS전문가카페) |작성자 DNS카페운영진

 ====DNS 서버 구축 자료 ===

jgpark_bind_conf.zip

작업일지.zip

이슈발생.zip

메뉴얼.zip

즐겨찾기.txt

====bind conf 파일 설정====

[기존 YUM 으로 설치된 bind 확인]

#rpm -qa | grep bind

[root@localhost ~]# rpm -qa | grep bind

bind-libs-9.3.6-4.P1.el5_4.2

ypbind-1.19-12.el5

bind-9.3.6-4.P1.el5_4.2

bind-chroot-9.3.6-4.P1.el5_4.2

bind-utils-9.3.6-4.P1.el5_4.2


[bind rpm 삭제]

rpm -e bind-libs-9.3.6-4.P1.el5_4.2

rpm -e bind-utils-9.3.6-4.P1.el5_4.2



필요 파일 다운로드

bind

ftp://ftp.isc.org/isc/bind9/9.4.2/bind-9.4.2.tar.gz

#tar zxvf bind-9.4.2.tar.gz

1) Case1 => bind-9.6.1 이상버전 Vi로 소스수정할 필요 없다 (Centos 기준 )

2) Case2 => Vi로 소스경로를 수정해주고 컴파일 해야 장애가 나지 않는다

bind-9.4.2# vi  bin/named/include/named/globals.h (109번째쯤 줄에서 찾을것)

EXTERN const char *   ns_g_defaultpidfile        INIT(NS_LOCALSTATEDIR

                                                             "/run/named.pid");

EXTERN const char *   lwresd_g_defaultpidfile   INIT(NS_LOCALSTATEDIR

                                                            "/run/lwresd.pid");

 

******************이후**********************

EXTERN const char *   ns_g_defaultpidfile        INIT(NS_LOCALSTATEDIR

                                                             "/named.pid");

EXTERN const char *  lwresd_g_defaultpidfile     INIT(NS_LOCALSTATEDIR

                                                             "/lwresd.pid");

#yum install gcc

(install 6개 gcc(의존 cpp, glibc-devel, glibc-headers, kernel-headers, libgomp) update 3개(glibc, glibc-common, libgcc)

#yum install gcc-c++

install 1개 : gcc-c++ (의존1개 libstdc++-devel)

upbrade 1개 : libstdc++


openssl 설치

openssl-1.0.1e.tar.gz

http://www.openssl.org/source/openssl-1.0.1d.tar.gz


zlib설치

cd /usr/local/src

zlib-1.2.7.tar.gz

http://zlib.net/zlib-1.2.7.tar.gz

# tar zxf zlib-1.2.1.tar.gz

[root@localhost src]# cd zlib-1.2.1

[root@localhost zlib-1.2.1]# ./configure --shared

[root@localhost zlib-1.2.1]# make && maket install

[root@localhost zlib-1.2.1]# make clean

[root@localhost zlib-1.2.1]# echo "/usr/local/lib" >> /etc/ld.so.conf

[root@localhost zlib-1.2.1]# /sbin/ldconfig


최신 openssl 소스 얻기

www.openssl.org/source/ 에서 최신 버젼의 소스를 확인합니다. [LATEST] 가 붙어있는 소스가 최신 소스입니다.

[공지] openssl 0.9.8 버젼이 아파치에서 설치하는 부분에 SSL 라이브러리 오류가 있습니다. 한단계 낮은 버젼을 설치해 주시기 바랍니다.

3. 설정단계(./config)

openssl 소스 컴파일 설정전에 zlib 라이브러리 변수 옵션을 먼저 잡아줍니다.

export LDFLAGS=-L/usr/local/lib

export CPPFLAGS=-I/usr/local/include

최신 openssl 소스를 다운받은 후에 압축을 풀고, 풀려진 openssl 디렉토리에서 컴파일 설정을 진행합니다.

--openssldir 디렉토리를 /usr/local/openssl 과 같이 특정 디렉토리를 지정해 줍니다.

./config \

--openssldir=/usr/local/openssl \

shared \

threads \

zlib


----------------------------

tar xvfpz openssl-0.9.8g.tar.gz

cd openssl-0.9.8g

****cf : yum install perl 5

./config --prefix=/usr/local/openssl shared threads zlib

make

make install

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf





-----------------------------

4. 컴파일(make)

컴파일을 진행합니다. make

5. 테스트(make test)

테스트를 진행합니다. make test

6. 설치(make install)

openssl을 설치합니다.

make install

openssl 컴파일 오브젝트들을 삭제합니다.

make clean

openssl 컴파일 옵션 변수들을 삭제합니다.

****cf : yum install perl

unset LDFLAGS

unset CPPFLAGS

7. 동적 라이브러리 적용

openssl 라이브러리들을 시스템 동적 라이브러리 설정에 추가합니다.(레드헷 기준)

echo /usr/local/openssl/lib >> /etc/ld.so.conf

/sbin/ldconfig 

- openssl-1.0.1e.tar.gz 설치 예시

[root@nark root]# cd /usr/local/src

[root@nark src]# wget http://www.openssl.org/source/openssl-1.0.1d.tar.gz

[root@nark src]# tar zxf openssl-1.0.1e.tar.gz

[root@nark src]# cd openssl-1.0.1e

[root@nark openssl-0.9.7d]# export LDFLAGS=-L/usr/local/lib

[root@nark openssl-0.9.7d]# export CPPFLAGS=-I/usr/local/include

[root@nark openssl-0.9.7d]# ./configure \

> --openssldir=/usr/local/openssl \

> shared \

> threads \

> zlib

...

[root@nark openssl-0.9.7d]# make

[root@nark openssl-0.9.7d]# make test

[root@nark openssl-0.9.7d]# make install

[root@nark openssl-0.9.7d]# make clean

[root@nark openssl-0.9.7d]# unset LDFLAGS

[root@nark openssl-0.9.7d]# unset CPPFLAGS

[root@nark openssl-0.9.7d]# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

[root@nark openssl-0.9.7d]# /sbin/ldconfig


bind 9.4.2

bind-9.4.2.tar.gz

ftp://ftp.isc.org/isc/bind9/9.4.2/bind-9.4.2.tar.gz

./configure 설정

=====================

./configure \

--prefix=/usr/local/bind \

--sysconfdir=/etc \

--localstatedir=/var \

--mandir=/usr/share/man \

--with-openssl=/usr/local/openssl \

--with-libtool \

--enable-threads \

--enable-fast-instal \

--sharedstatedir=/usr/local/server/bind/share \

==> 실행

결과==>

config.status: creating include/Makefile

config.status: creating inet/Makefile

config.status: creating irs/Makefile

config.status: creating isc/Makefile

config.status: creating nameser/Makefile

config.status: creating port_after.h

config.status: creating port_before.h

config.status: creating resolv/Makefile

config.status: creating port/Makefile

config.status: creating port/linux/Makefile

config.status: creating port/linux/include/Makefile

 

=======================







make && make install

=====================

실행==>

[root@localhost bind-9.4.2]#make

결과==>

creating named-checkzone

make[2]: Leaving directory `/usr/local/src/bind-9.4.2/bin/check'

make[1]: Leaving directory `/usr/local/src/bind-9.4.2/bin'

making all in /usr/local/src/bind-9.4.2/doc

make[1]: Entering directory `/usr/local/src/bind-9.4.2/doc'

...

making all in /usr/local/src/bind-9.4.2/doc/xsl

make[2]: Entering directory `/usr/local/src/bind-9.4.2/doc/xsl'

 

=======================

[make 후의 파일 변화 기록]

[root@localhost bind-9.4.2]# find / * > ../BIND_0

 

실행==>

[root@localhost bind-9.4.2]#make install

 

making install in /usr/local/src/bind-9.4.2/doc/arm

make[2]: Entering directory `/usr/local/src/bind-9.4.2/doc/arm'

make[2]: Leaving directory `/usr/local/src/bind-9.4.2/doc/arm'

....

make[2]: Entering directory `/usr/local/src/bind-9.4.2/doc/xsl'

make[2]: Leaving directory `/usr/local/src/bind-9.4.2/doc/xsl'

make[1]: Leaving directory `/usr/local/src/bind-9.4.2/doc'

/bin/sh ./mkinstalldirs /usr/local/bind/bin \

        /var/run /etc

/usr/bin/install -c isc-config.sh /usr/local/bind/bin

=======================

[make intall후의 파일 변화 기록]

[root@localhost bind-9.4.2]# find / * > ../BIND_1



★ 환경설정 설명

--prefix=/usr/local/server/bind

설치 디렉토리 지정으로 /usr/local/bind로 설치한다.

--bindir=/usr/local/server/bind/bin

BIND를 관리하기 위한 각종 명령어가 위치한 디렉토리로 일반적인 실행 명령어가 위치한다.

--sbindir=/usr/local/server/bind/sbin

BIND에 시스템 의존적인 명령어가 위치할 디렉토리로 일반 사용자가의 접근을 엄격히 제한한다.

--libexecdir=/usr/local/server/bind/libexec

바이너리 실행 라이브러리가 위치할 디렉토리 설정으로 /usr/local/bind/libexec 디렉토리에 설치가 된다. 단독으로 실행가능하며 또한 라이브러리로 제공될 수 있다.


--datadir=/usr/local/server/bind/share

읽기 전용의 시스템 의존적인 데이터가 위치할 디렉토리로 share 디렉토리에 위치하게 된다. /usr/local/server/bind/share로 설정한다.

--sysconfidr=/etc

환경설정 파일이 위치할 디렉토리 지정으로 가장 핵심적인 역할을 하게 되며 일반 사용자의 엄격한 제한을 설정한다.

--sharedstatedir=/usr/local/server/bind/share

변경가능하며 시스템에 의존적이지 않는 데이터가 위치할 디렉토리로 share 디렉토리에 위치하도록 설정한다.

--localstatedir=/var

서버를 운영하면서 발생할 수 있는 가변젹인 데이터가 위치하며 특히 BIND 서버에서는 각 도메인에 대한 DB 파일이 위치할 디렉토리로 사용된다.

--libdir=/usr/local/server/bind/lib

공유 라이브러리가 위치할 디렉토리로 사용된다.

--includedir=/usr/include/bind

BIND의 헤더 파일이 위치할 디렉토리 지정으로 각종 헤더 파일은 /usr/include/biond 디렉토리로 지정하여 BIND를 이용한 프로그램을 개발할 때 사용할 수 있다.

--infodir=/usr/share/info, --mandir=/usr/share/man

info, man 문서가 위치할 디렉토리로 시스템에서 제공하는 /usr/share/info, /usr/share/man 디렉토리로 설정한다.

--enable-threads

다중 스레드를 제공하고자 할 때 활성화하여 보다 효율적인 서비스를 제공할 수 있다.

--enable-static

공유 라이브러리 방식이 아닌 정적 라이브러리 방식으로 컴파일을 한다.

--enable-fast-install

빠른 설치와 함께 최적화된 설치를 활성화한다.

--disable-ipv6

기본값으로 IPV4, IPV6르 제공하게 되는데 만약 IPV6를 사용하지 않는다면 비활성화한다.

--with-openssl

서버를 관리할 때 RNDC를 사용할 계획이라면 설정하며 RNDC는 암호화된 데이터를 사용하므로써 서버의 보안을 향상실킬 수 있다. 단, openssl이 설치되어 있어야 설치할 때 에러가 발생하지 않는다.

--with-randomdev=/dev/random

난수 발생 장치를 지정하며 /dev/random으로 설정한다.

--with-libtool

컴파일을 할 때 GNU 라이브러리 툴을 사용한다.

--with-gnu-ld

링커를 GNU 링커를 사용하도록 지정한다.

--with-pic

PIC기능을 사용하도록 설정한다.


PIC, Interrrupt


PIC(Priority Interrupt Controller)

외부에서 발생한 인터럽트를 관장하는 일종의 칩으로 여러 개의 인터럽트가 동시에 발생하였을 때 인터럽트의 우선 순위를 관리하게 된다. 예를 들어 키보드와 마우스에 동시에 액션이 발생하였을 때 우선 순위를 가지고 각각 실행하게 된다.


Interrupt

시스템을 운영하면서 각종 장치 및 프로그램에서 발생하는 신호로 인터럽트가 발생하면 운영제체는 작업을 잠시 멈추고 인터럽트 신호에 귀 기울이게 된다. 예를 들어 특정한 스크립트를 실행하고 있을때 키보드로부터 “Ctrl + C" 즉 실행 취소 인터럽트가 발생한다면 즉시 하던 작업을 일단 멈추고 해당 인터럽트에 따라 작업을 진행하게 된다.


IRQ(interrupt request)

각 주변장차에 발생하는 인터럽트 신호를 구별하기 위해 미리 할당되어 있는 값을 의미한다. 하나의 채널을 이용하여 각 장치들의 신호를 구별해야하기 때문에 각각의 장치를 구별하기 위한 고유의 값으로 할당하게 된다.


환경설정 스크립트 실행

위에서 생성한 환경설정 스크립트를 실행한다. 실행도중 에러가 발생한다면 철자를 잘못입력하였거나 또는 지원되지 않는 옵션설정 또는 필요한 패키지가 설치되지 않았기 때문에 발생한다. 특히 --with-openssl을 포함하였다면 시스템에 반드시 openssl 패키지가 먼저 설치되어 있어야 한다.



/etc/named.caching-nameserver.conf파일 설정

*listen-on port 53 { 127.0.0.1 };

네임서버의 포트번호와 접근할 수 있는 IP를 설정하는 지시지

기본적으로 자신만이 53번 포트에 접속을 허용, 외부에서 접속 가능하게 하려면 { any; };


*listen-on-v6 port 53 { ::1; };

ipv6 하의 네임서버 운영을 설정하는 것으로 현재는 필요하지 않음. 기본설정 사용 또는 주석


*directory "/var/named";

DNS의 zone파일의 위치를 지정


*dump-file "/var/named/data/cache_dump.db";

캐시 덤프파일이 생성되는 파일의 절대경로 위치를 지정하는 지시자


*statistics-file "/var/named/data/named_stats.txt";

통계파일이 생성되는 절대경로와 파일이름을 지정하는 지시자


*memstatistics-file "/var/named/data/named_stats.txt";

메모리 관련 통계파일이 생성되는 절대경로와 파일이름을 지정하는 지시자


*query-source   port 53;

 query-source-v6 port 53;

네임서버의 쿼리를 받아들일 소스 포트를 설정하는 지시자. 기본으로 53번 포트의 쿼리 설정


*allow-query { localhost; };

네임서버 쿼리를 허용할 IP 혹은 IP 대역을 설정하는 지시자. 외부와의 쿼리 허용은 any;를 입력


*logging {}

네임서버 실행에 있어서 디버깅시 참고할 수 있는 로그파일생성 위치를 지정하는 지시자.


*match-clients  { localhost; };

 match-destination { localhost; };

로컬 리졸버 사용을 허용할 클라이언트를 지정하는 지시자, 외부에 허용하기 우해서는 any;를 입력


*recursion yes;

외부에서 현재의 네임서버를 지정하여 사용허용, 불가를 설정

네임서버 보안을 위한다면 no로 설정


*include "/etc/named.rfc1912.zones";

네임서버 데몬 실행시 외부의 설정파일을 포함하고자 한다면 include 지시자를 이용하여 포함할 파일의 위치와 파일이름의 절대경로를 입력



*“.” : 루트도메인이라는 뜻

type hint; : hint는 루토도메인을 지정, master는 1차 네임서버 의미, slave는 2차 네임서버

*file "named.ca"; : 최상위 도메인(com, net)에 대해 관리권한을 가진 네임서버들의 정보를 가지고 있다.


*루트도메인에 대한 정의 파일은 ftp://ftp.internic.net/domain/에서 다운받을 수 있다.

업데이트를 위해 파일을 받고 /var/named/named.ca 파일로 복사하면 된다.


*zone(rev)파일 생성

******.zone파일 하나 선택후

cat *****.zone > whoishg.zone로 zone 파일 생성

$TTL 86400

@              IN SOA         ns1.whoishg.com. root.whoishg.com. (

                                                42  ;serial

                                                3H  ;refresh

                                                15M ;retry

                                                1W  ;expiry

                                                1D   ;minimum

                IN NS         ns1.whoishg.com.

                IN A           118.128.134.62

                IN MX 10      mail.whoishg.com.

www           IN A           118.128.134.57

mail            IN A           118.128.134.54

ftp             IN A           118.128.134.60

webhard       IN A           118.128.134.60

whoishg.com   IN A           118.128.134.57

www           CNAME         www1.whoishg.com

$TTL : Time To Live의 약자, 이곳에 설정한 도메인 정보를 다른 네임서버에서 읽어간 다음 그 네임서버측에서 보관할 시간 86420초는 하루

@ 는 ORIGIN을 의미하는 특수문자로 public domain 을 의미하며, 앞서 환경설정 파일에서 지정한 도메인을 의미

IN : IN다음에 나오는 설정을 사용

SOA : Start of Authority의 약자, 도메인 네임서버에 대한 모든 정보를 가지고 있다.

serial : slave와 정보갱신시 필요한 값

refresh :  슬레이브에서 마스터의 설정사항을 주기적으로 체크하는 시간

retry : 슬레이브에서 마스터로 접속할 때 접속장애시 재접속 시도시간(refresh보다 적어야지 의미가 있다)

expire : 존파일의 유효기간 설정

minimum : $TTL값과 같은 의미 다른네임서버에서 존파일데이터를 가지고 갔을때 그 데이터에 대한 유효기간 설정값










Bind 9.4.2(포함) 이상으로 업그레이드시는 named.conf  부분에 아래와 같은 설정을 추가하세요!!!

설정하지 않으면 디폴드 값이 바뀌어서 버전업그레이드후  PC에서 질의가 안됩니다.

options {

    ...

    allow-recursion { any; };

    allow-query { any; };

    allow-query-cache { any; };

    ...

};






## slave dns 구성

===================

slave dns란, slave dns는 백업역할을 수행한다. master dns 서버가 장애가 발생하여 서비스를 원활하게 해주지 못할 경우, slave dns 서버가 master dns 서버를 대신하여 도메인서비스를 해주는 것이다. 이는 서비스를 지속시킬 수 있을 뿐만 아니라 slave로 도메인서비스를 하는 동안 master dns 서버의 장애를 해결할 시간을 벌 수 있다.

whoishg.com 도메인이 서비스 되고 있는 dns 서버의 주소는 118.128.134.62이고,

slave dns 를 구성할 서버의 주소는 118.128.134.59 로 정하고 실습을 해보자.

[실습]

slave dns 구성

실습os : centos 5.5

master 서버 : 118.128.134.62

slave 서버 : 118.128.134.59

master 의 네임서버가 동작하지 못할 때, slave 네임서버가 대신 도메인서비스를 해줘야 하므로, master 가 1차 네임서버, slave가 2차 네임서버가 되는 것이다.

현재 master 서버에서 whois.com 가상의 도메인에 대한 도메인서비스가 구동되고 있는 중이다. slave dns 구성을 위해 master 서버에서 몇 가지 설정을 해보자.

[master 192.168.10.4]

1)

[root /root]#vi /etc/named.caching-nameserver.conf


options { } 안에 , 아래의 한줄을 추가하고 저장한다.

allow-transfer {118.128.134.59;}; ========>slave ip addr

이는 존파일에 대한 내용을 slave 서버로 전송해줄때, 지정한 ip주소 혹은 네트워크 대역으로 지정해줄 수 있다.

보안과 관련된 것이며, 아무 서버나 master 서버의 dns정보를 가져올 수 있는 것이 아닌 master에서 지정한 주소로만 dns정보가 전송되어질 수 있게 제한을 두는 것이다.

 (allow-transfer를 설정하지 않더라도 slave dns구성과는 무관하다)


2)

[root /root]#vi /etc/named.rfc1912.zones  -> slave dns 구성을 위해 rfc 존파일을 수정

zone "." IN {

        type hint;

        file "named.ca";

};

zone "whoishg.com" IN {

        type master;

        file "whoishg.zone";

        allow-update {118.128.134.59;};      -> slave 서버에 master dns 정보를 전송하겠다는 설정.

                                                                                { } 안에 slave 서버의 ip주소를 넣어준다.

};

zone "134.128.118.in-addr.arpa" IN {

        type master;

        file "whoishg.rev";

        allow-update {118.128.134.59;};    -> reverse 존 파일도 slave 로 전송하자.

};


참고) bind 구 버전에서는 allow-update가  allow-transfer 로 사용된다.

그러나 bind 9 버전부터는 allow-transfer 를 사용해도 무관하지만, allow-update를 사용해도 된다.

allow-update 는 dns정보를 전송할 서버의 ip주소를 적는 것 외에도 특정 키 값을 적어 다른 서버와 주고받아 보안적인 부분을 강화한 옵션이다. 그러나 특정 키 값을 사용하지 않고, 다른 서버의 ip주소만 입력해도 dns정보를 다른 서버로 전송해준다.

저장하고 나온 뒤, named 데몬을 reload 하기 전에 slave dns 구성이 잘되었는지 확인할 때를 대비하여test.co.kr 존파일에서 slave dns가 master dns 정보를 업데이트 하는 주기(refresh) 값을 짧게 미리 변경해주자.

이는 테스트를 위한 목적으로 변경하는 것이다.

[root /var/named/chroot/var/named]#vi whoishg.zone


$TTL    86400

@               IN SOA  whoishg.com. root.whoishg.com. (

                                        43              ; serial (d. adams)      ->                 존파일수정한다면 시리얼값을 반드시 이전보다큰 값으로 변경해준다.

                                        1M             ; refresh  --> 주기값을 1분                                                                으로 변경한다.

                                        15M             ; retry

                                        1W              ; expiry

                                        1D )            ; minimum

                IN NS           ns.whoishg.com    ->1차 네임서버

                IN NS          ns2.whoishg.com    -> 2차 네임서버 (slave 서버)


@       IN A            118.128.134.62

ns      IN A            118.128.134.62

www     IN A            118.128.134.**

ns2      IN  A            118.128.134.59   -> 2차 네임서버에 대한 ns2 호스트 값


저장한 뒤, reload 하자.

[root /root]#/etc/init.d/named reload

Reloading named:                                           [  OK  ]

[root /root]#

[root /root]#cat /etc/resolv.conf

nameserver 192.168.10.4             ->1차 네임서버(master)

nameserver 192.168.10.5             ->2차 네임서버(slave)



 [slave 192.168.10.5]

이제 slave 서버에서 master dns 정보를 받아오기 위한 설정을 하자.

slave 서버에도 bind 설치 및 named 데몬이 구동되어야 한다.(2차 네임서버이기 때문에)

[root@localhost ~]# rpm -qa | grep bind

bind-chroot-9.3.6-20.P1.el5_8.5

bind-utils-9.3.6-20.P1.el5_8.5

bind-9.3.6-20.P1.el5_8.5

bind-libs-9.3.6-20.P1.el5_8.5


[root@localhost ~]# /etc/init.d/named start

Starting named:                                            [  OK  ]

[root@localhost ~]#


아래와 같이 네임서버를 지정해주자.

[root@localhost ~]# cat /etc/resolv.conf

nameserver 118.128.134.62 ->1차 네임서버(master)

nameserver 118.128.134.59 ->2차 네임서버(slave)


1)

[root@localhost ~]# vi /etc/named.caching-nameserver.conf    -> named 설정파일에서 도메인서비스를 위해 아래의 설정사항에서 localhost 를 any로 변경해주자


listen-on port 53 { any; };

allow-query     { any; };

allow-query-cache { any; };

match-clients      { any; };

match-destinations { any; };

저장하고, rfc 존파일에서 dns정보를 추가하자.

master 서버에서 dns 정보를 백업받아오기 위해 slave 서버의 rfc 존파일에 설정을 해야 한다.

2)

아래와 같이 master 서버의 rfc존파일 설정과 동일하게 하되, 몇 가지 사항들을 수정해주자.

[root@localhost ~]# vi /etc/named.rfc1912.zones

zone "." IN {

        type hint;

        file "named.ca";

};

zone "test.co.kr" IN {

        type slave;                -> slave dns는 type 이 slave이다.

        file "slaves/whoishg.zone";        -> slaves/ 경로 밑에 whoishg.zone 파일로 백업을 받는다는 것이다.

     여기서 slaves디렉토리는 chroot 기능으로 인해 /var/named/chroot/var/named/ 밑에 존재 한다.

        masters {118.128.134.62;};        -> master 서버의 ip 주소를 입력하여 master로 부터 dns정보를 받아올 것을 허용한다.

};

zone "134.128.118.in-addr.arpa" IN {                    -> reverse 정보도 받아오기 위해 설정한다.

        type slave;                -> slave dns는 type 이 slave이다.

        file "slaves/whoishg.rev";

        masters {118.128.134.62;};

};


저장하고 나온 뒤, 설정사항 적용을 위해 named 데몬을 reload 시키자.


[root@localhost ~]# /etc/init.d/named reload

Reloading named:                                           [  OK  ]

[root@localhost ~]#

참고)

만약 2차네임서버인 slave 서버에서 iptables 방화벽이 사용중이라면, named 데몬에 대한 53포트를 iptables방화벽에서 열어주자.

1차네임서버인 master서버의 네임서버가 동작하지 않을 때, 2차네임서버인 slave서버가 이를 대신해 도메인서비스를 해줘야한다. 따라서 2차 네임서버가 local에서만 동작하지 않고 다른 서버에서도 동작되어 2차네임서버를 이용하여 도메인서비스를 제공할 수 있도록 slave서버의 iptables방화벽에서 udp 53번 포트를 열어주어야 한다.

[root@localhost ~]# vi /etc/sysconfig/iptables


-A RH-F     firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT


위와같이 한 줄 추가해주면 udp 53번포트 named 데몬에 대해 방화벽에서 허용으로 설정된다.

iptables 파일 수정 후, 설정 적용을 위해 iptables 데몬 재구동을 반드시 하자.

[root@localhost ~]# /etc/init.d/iptables restart


[slave dns 구성 확인]

[slave 118.128.134.59]

[root@localhost ~]# cd /var/named/chroot/var/named/slaves/

[root@localhost slaves]# ll

total 16

-rw-r--r-- 1 named named 389 Oct 22 22:03 10.in-addr.arpa.zone

-rw-r--r-- 1 named named 358 Oct 22 22:03 test.co.kr.zone


master 서버로 부터 dns 정보를 받아와 slave서버의 slaves 디렉토리 밑에 설정한 2개의 파일이 생성 되었다.

정상적으로 slave 구성이 되었다.

이제 master 쪽에서 dns 존파일을 수정했을 때, slave 서버에서 이를 업데이트 하는지 테스트 해보자.

[slave 118.128.134.59]

백업받아온 whoishg.com 존파일의 현재 상태 확인.

[root@localhost ~]# cd /var/named/chroot/var/named/slaves/

[root@localhost slaves]# cat test.co.kr.zone

$ORIGIN .

$TTL 86400      ; 1 day

test.co.kr              IN SOA  test.co.kr. root.localhost.localdomain. (

                                2012102201 ; serial

                                60      ; refresh (1 minutes)

                                900        ; retry (15 minutes)

                                604800     ; expire (1 week)

                                86400      ; minimum (1 day)

                                )

                        NS      ns.test.co.kr.

                        NS      ns2.test.co.kr.

                         A       118.128.134.62

$ORIGIN whoishg.com.

ns2                    A       118.128.134.59

ns                      A       118.128.134.62

www                     A       118.128.134.**

[root@localhost slaves]#


[master 192.168.10.4]

master dns정보를 수정한다.

[root /root]#vi /var/named/chroot/var/named/test.co.kr.zone


[root /root]#cat /var/named/chroot/var/named/test.co.kr.zone

$TTL    86400

@               IN SOA  whoishg.com. root.whoishg.com. (

                                        43            ; serial (d. adams)        -> 시리얼값을 1 증가시켜줘야한다.(필수)

                                        1M             ; refresh                                                             15M             ; retry

                                        1W              ; expiry

                                        1D )            ; minimum

                IN NS           ns.whoishg.com.

                IN NS           ns2.whoishg.com.

@       IN A           

ns      IN A            118.128.134.62

www     IN A            118.128.134.**

ns2       IN A            118.128.134.59

cafe    IN A            118.128.134.62           ->호스트값 1개를 추가하였다.

수정 후, named reload 를 반드시 해주자.

[root /root]#/etc/init.d/named reload

Reloading named:                                           [  OK  ]


[slave 118.128.134.59]

master dns 의 업데이트 된 정보를 받아오는지 확인해보자.

[root@localhost ~]# cd /var/named/chroot/var/named/slaves/

[root@localhost slaves]# ll

구현못해봄 ㅠㅠ (실습에서는 /var/named/slaves/에 전송되어짐)


직접파일을 열어 확인해보자.

[root@localhost slaves]# cat whoishg.zone

$ORIGIN .

$TTL 86400      ; 1 day

test.co.kr              IN SOA  test.co.kr. root.localhost.localdomain. (

                                2012102202 ; serial

                                60         ; refresh (1 minute)

                                900        ; retry (15 minutes)

                                604800     ; expire (1 week)

                                86400      ; minimum (1 day)

                                )

                        NS      ns.whoishg.com.

                        NS      n2.whoishg.com.

                        A       118.128.134.62

$ORIGIN whoishg.com.

cafe                   A       118.128.134.62     -->업데이트 된 것을 확인할 수 있다.

ns2                    A        118.128.134.59          

ns                     A       118.128.134.62

www                  A       118.128.134.**


위와 같이 slave dns가 제대로 구성되었다.

또 한가지 nslookup 을 통해서 확인해보자.

[master 118.128.134.62]

[[root /root]#nslookup

> whoishg

Server:         118.128.134.62                   ->1차 네임서버에서 질의한다.

Address:        118.128.134.62#53

Name:   whoishg.com

Address: 118.128.134.62


그렇다면 master 서버의 네임서버를 stop시키고 nslookup을 통해 2차네임서버에서 whoishg를 정상 질의할 수 있는지 확인해보자.

[root /root]#/etc/init.d/named stop

Stopping named:                                            [  OK  ]


[root /root]#nslookup

> whoishg

Server:   118.128.134.62             ->1차네임서버인 master dns가 정상구동되지않는 상태에서 도메인질의시 slave서버인 2차 네임서버에서 test.co.kr도메인을 정상 질의한다.

Address:        118.128.134.59#53

Name:   whoishg.com

Address: 118.128.134.62


위와 같이 1차 네임서버가 죽은 상태에서 2차 네임서버에서 해당 도메인을 정상 질의한다.

그러면 최종적으로 slave dns 구성을 모두 마친 것이다. 정상적으로 refresh 시간 마다 master 서버의 dns 정보를slave 서버에서 업데이트를 해주고, master 서버의 네임서버가 구동되지 않을 경우에는 slave서버가 대신하여 도메인서비스를 해준다


#service iptables restart 시 iptables 모듈을 제거하는 중: 멘트나오면서 정상 진행 안됨
---------------------------------------
[root@www sysconfig]# nslookup
> www.whoishg.com
Server:         118.128.134.115
Address:        118.128.134.115#53

Name:   www.whoishg.com
Address: 118.128.134.103
> whoishg.com
Server:         118.128.134.115
Address:        118.128.134.115#53

*** Can't find whoishg.com: No answer
> 118.128.134.116
Server:         118.128.134.115
Address:        118.128.134.115#53

** server can't find 116.134.128.118.in-addr.arpa.: NXDOMAIN

  ==> 역방향 조회 가능하도록 reverse 설정 안되어서 발생함
> 118.128.134.103
Server:         118.128.134.115
Address:        118.128.134.115#53

** server can't find 103.134.128.118.in-addr.arpa.: NXDOMAIN

==> 역방향 조회 가능하도록 reverse 설정 안되어서 발생함

> 118.128.134.115
Server:         118.128.134.115
Address:        118.128.134.115#53

** server can't find 115.134.128.118.in-addr.arpa.: NXDOMAIN

==> 역방향 조회 가능하도록 reverse 설정 안되어서 발생함

 

 problem with starting named/Bind services in CentOS release 5.X

On starting Bind sometimes you get the following error :

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# /etc/init.d/named start

Locating /var/named/chroot//etc/named.conf failed: [FAILED]

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

It occurs cause in CENTOS 5.x OS, some of the Bind/named files are not located on the desired location.

 

Resolution :

~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# locate named.conf

/etc/dbus-1/system.d/named.conf

/usr/share/doc/bind-9.3.6/sample/etc/named.conf

/usr/share/logwatch/default.conf/services/named.conf

/usr/share/man/man5/named.conf.5.gz

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You will get a list of paths, similar to the above list. Copy the "named.conf" at /usr/share/doc/bind-9.x.x path to the desired location.

 

at the my time /chroot/etc directories was not available on sever So, I created it .

 

[root@sever]# mkdir -p /var/named/chroot/etc

Then, copied the named.conf .

 

[root@sever]#cp /usr/share/doc/bind-9.3.6/sample/etc/named.conf /var/named/chroot/etc

 

Note : In case the Bind is not chrooted, copy the file in /etc

 

Now, try to start the Named/Bind Service :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# /etc/init.d/named start

Error in named configuration:

/etc/named.conf:57: open: /etc/named.root.hints: file not found [FAILED]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Locate the "named.root.hints" file on the system:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# locate named.root.hints

/usr/share/doc/bind-9.3.6/sample/etc/named.root.hints

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

And Copied it in desire Location:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# cp /usr/share/doc/bind-9.3.6/sample/etc/named.root.hints /var/named/chroot/etc

 

if Bind is not chrooted:

 

[root@sever]# cp /usr/share/doc/bind-9.3.6/sample/etc/named.root.hints /etc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Now try to start Named/Bind Service :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# /etc/init.d/named start

Starting named:

Error in named configuration:

/etc/named.conf:63: open: /etc/named.rfc1912.zones: file not found [FAILED]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

locate the rfc1912.zones :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# locate named.rfc1912

/usr/share/doc/bind-9.3.6/sample/etc/named.rfc1912.zones

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

And copied it in :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]#

 

if Bind is not chrooted:

 

[root@sever]# cp /usr/share/doc/bind-9.3.6/sample/etc/named.rfc1912.zones /etc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Start the Named/Bind service :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@sever]# /etc/init.d/named start

Starting named:

Error in named configuration:

zone localdomain/IN: loading master file localdomain.zone: file not found

localhost_resolver/localdomain/IN: file not found

zone localhost/IN: loading master file localhost.zone: file not found

localhost_resolver/localhost/IN: file not found

zone 0.0.127.in-addr.arpa/IN: loading master file named.local: file not found

localhost_resolver/0.0.127.in-addr.arpa/IN: file not found

zone 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: loading master file named.ip6.local: file not found

localhost_resolver/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: file not found

zone 255.in-addr.arpa/IN: loading master file named.broadcast: file not found

localhost_resolver/255.in-addr.arpa/IN: file not found

zone 0.in-addr.arpa/IN: loading master file named.zero: file not found

localhost_resolver/0.in-addr.arpa/IN: file not found

zone my.internal.zone/IN: loading master file my.internal.zone.db: file not found

internal/my.internal.zone/IN: file not found

zone my.ddns.internal.zone/IN: loading master file slaves/my.ddns.internal.zone.db: file not found

internal/my.ddns.internal.zone/IN: file not found

zone my.external.zone/IN: loading master file my.external.zone.db: file not found

external/my.external.zone/IN: file not found

[FAILED]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Now, if you will get the above error, we need to remove some part of data from "named.conf" file. Remove this whole section in the copied "named.conf" file:

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

view "localhost_resolver"

{

/* This view sets up named to be a localhost resolver (caching only nameserver).

* If all you want is a caching-only nameserver, then you need only define this view:

*/

match-clients { localhost; };

match-destinations { localhost; };

recursion yes;

# all views must contain the root hints zone:

include "/etc/named.root.hints";

 

/* these are zones that contain definitions for all the localhost

* names and addresses, as recommended in RFC1912 - these names should

* ONLY be served to localhost clients:

*/

include "/etc/named.rfc1912.zones";

};

view "internal"

{

/* This view will contain zones you want to serve only to "internal" clients

that connect via your directly attached LAN interfaces - "localnets" .

*/

match-clients { localnets; };

match-destinations { localnets; };

recursion yes;

// all views must contain the root hints zone:

include "/etc/named.root.hints";

 

// include "named.rfc1912.zones";

// you should not serve your rfc1912 names to non-localhost clients.

 

// These are your "authoritative" internal zones, and would probably

// also be included in the "localhost_resolver" view above :

 

zone "my.internal.zone" {

type master;

file "my.internal.zone.db";

};

zone "my.slave.internal.zone" {

type slave;

file "slaves/my.slave.internal.zone.db";

masters { /* put master nameserver IPs here */ 127.0.0.1; } ;

// put slave zones in the slaves/ directory so named can update them

};

zone "my.ddns.internal.zone" {

type master;

allow-update { key ddns_key; };

file "slaves/my.ddns.internal.zone.db";

// put dynamically updateable zones in the slaves/ directory so named can update them

};

};

key ddns_key

{

algorithm hmac-md5;

secret "use /usr/sbin/dns-keygen to generate TSIG keys";

};

view "external"

{

/* This view will contain zones you want to serve only to "external" clients

* that have addresses that are not on your directly attached LAN interface subnets:

*/

match-clients { !localnets; !localhost; };

match-destinations { !localnets; !localhost; };

 

recursion no;

// you'd probably want to deny recursion to external clients, so you don't

// end up providing free DNS service to all takers

 

// all views must contain the root hints zone:

include "/etc/named.root.hints";

 

// These are your "authoritative" external zones, and would probably

// contain entries for just your web and mail servers:

 

zone "my.external.zone" {

type master;

file "my.external.zone.db";

};

};

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Now Start the Named/Bind Service :

 

[root@sever]## /etc/init.d/named start

Starting named: [ OK ]

 

 

 

'DNS 서버구축 > 이슈발생' 카테고리의 다른 글

이슈발생_0329_역방향 조회  (0) 2013.04.04

[DNS dig로 역방향확인하기_my setting]

====================================

[root@www ~]# dig www.whoishg.com

 

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> www.whoishg.com

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28533

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

 

;; QUESTION SECTION:

;www.whoishg.com.               IN      A

 

;; ANSWER SECTION:

www.whoishg.com.        86400   IN      A       118.128.134.103

 

;; AUTHORITY SECTION:

whoishg.com.            86400   IN      NS      ns1.whoishg.com.

 

;; ADDITIONAL SECTION:

ns1.whoishg.com.        86400   IN      A       118.128.134.115

 

;; Query time: 0 msec

;; SERVER: 118.128.134.115#53(118.128.134.115)

;; WHEN: Mon Apr  1 20:07:05 2013

;; MSG SIZE  rcvd: 83

 

[root@www ~]# dig -x 118.128.134.103

 

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> -x 118.128.134.103

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 35432

;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

 

;; QUESTION SECTION:

;103.134.128.118.in-addr.arpa.  IN      PTR

 

;; AUTHORITY SECTION:

128.118.in-addr.arpa.   9364    IN      SOA     g.dns.kr. inverse.nic.or.kr. 2013011601                    21600 900 604800 43200

 

;; Query time: 0 msec

;; SERVER: 118.128.134.115#53(118.128.134.115)

;; WHEN: Mon Apr  1 20:09:00 2013

;; MSG SIZE  rcvd: 105

 

[DNS dig로 역방향확인하기]

 

 

lhr@Sch-Sysng:/lhr># dig test.com

; <<>> DiG 9.3.4-P1 <<>> test.com

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42794

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0

 

;; QUESTION SECTION:

;test.com.                      IN      A --> A는 도메인에 아이피를 부여하는 레코드

 

;; ANSWER SECTION:

test.com.               346     IN      A       203.226.253.11 --> A는 도메인에 아이피 응답 확인 할수있음

 

;; AUTHORITY SECTION:

test.com.               582     IN      NS      ns2.test.com.

test.com.               582     IN      NS      ns3.test.com.

test.com.               582     IN      NS      ns1.test.com. -> 3개의 인증 DNS가 있다(DNS 분산)

 

;; Query time: 1 msec

;; SERVER: 192.168.11.6#53(192.168.11.6)

;; WHEN: Thu Sep  9 13:18:36 2010

;; MSG SIZE  rcvd: 96

 

 

 

* 해당 도메인의 아이피를 알았다.

리버스가 되어있는지 확인해보자.

 

lhr@Sch-Sysng:/lhr># dig -x 203.226.253.11 short --> 아무것도 뜨지않으면 리버스 도메인 설정안된것

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 14281

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

 

;; QUESTION SECTION:

;11.253.226.203.in-addr.arpa.   IN      PTR -> 없다! 고로 SOA 쪽에 인버스 요청헤야한다.

 

;; AUTHORITY SECTION:

253.226.203.in-addr.arpa. 3600  IN      SOA     ns1.s.com. lhr.ns1.s.com. 2009050700 3600 1800 604800 86400

 

;; Query time: 13 msec

;; SERVER: 192.168.11.6#53(192.168.11.6)

;; WHEN: Thu Sep  9 13:18:47 2010

;; MSG SIZE  rcvd: 110

 

 

; <<>> DiG 9.3.4-P1 <<>> -x 203.226.253.11 short

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 56970

;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

 

;; QUESTION SECTION:

;short.                         IN      A

 

;; AUTHORITY SECTION:

.                       9074    IN      SOA     a.lhr-servers.net. nstld.verisign-grs.com. 2010090801 1800 900 604800 86400

 

;; Query time: 0 msec

;; SERVER: 192.168.11.6#53(192.168.11.6)

;; WHEN: Thu Sep  9 13:18:47 2010

;; MSG SIZE  rcvd: 98

 

 

 

* 위임 순서를 다시 확인

 

lhr@Sch-Sysng:/lhr># dig -x 203.226.253.11 +trace

 

; <<>> DiG 9.3.4-P1 <<>> -x 203.226.253.11 +trace

;; global options:  printcmd

.                       190332  IN      NS      a.lhr-servers.net.

.                       190332  IN      NS      b.lhr-servers.net.

.                       190332  IN      NS      c.lhr-servers.net.

.                       190332  IN      NS      d.lhr-servers.net.

.                       190332  IN      NS      e.lhr-servers.net.

.                       190332  IN      NS      f.lhr-servers.net.

.                       190332  IN      NS      g.lhr-servers.net.

.                       190332  IN      NS      h.lhr-servers.net.

.                       190332  IN      NS      i.lhr-servers.net.

.                       190332  IN      NS      j.lhr-servers.net.

.                       190332  IN      NS      k.lhr-servers.net.

.                       190332  IN      NS      l.lhr-servers.net.

.                       190332  IN      NS      m.lhr-servers.net.

;; Received 468 bytes from 192.168.11.6#53(192.168.11.6) in 16 ms

 

203.in-addr.arpa.       86400   IN      NS      SEC1.AUTHDNS.RIPE.NET.

203.in-addr.arpa.       86400   IN      NS      NS3.APNIC.NET.

203.in-addr.arpa.       86400   IN      NS      DNS1.TELSTRA.NET.

203.in-addr.arpa.       86400   IN      NS      NS1.APNIC.NET.

203.in-addr.arpa.       86400   IN      NS      NS4.APNIC.NET.

203.in-addr.arpa.       86400   IN      NS      TINNIE.ARIN.NET.

;; Received 193 bytes from 198.41.0.4#53(a.lhr-servers.net) in 138 ms

 

226.203.in-addr.arpa.   86400   IN      NS      f.dns.kr.

226.203.in-addr.arpa.   86400   IN      NS      b.dns.kr.

226.203.in-addr.arpa.   86400   IN      NS      g.dns.kr.

226.203.in-addr.arpa.   86400   IN      NS      c.dns.kr.

226.203.in-addr.arpa.   86400   IN      NS      d.dns.kr.

226.203.in-addr.arpa.   86400   IN      NS      e.dns.kr.

;; Received 147 bytes from 193.0.9.3#53(SEC1.AUTHDNS.RIPE.NET) in 293 ms

 

253.226.203.in-addr.arpa. 43200 IN      NS      NS2.s.com.

253.226.203.in-addr.arpa. 43200 IN      NS      NS1.s.com.

253.226.203.in-addr.arpa. 43200 IN      NS      NS4.s.com.

253.226.203.in-addr.arpa. 43200 IN      NS      NS3.s.com.

;; Received 137 bytes from 218.38.181.90#53(f.dns.kr) in 1 ms

 

253.226.203.in-addr.arpa. 3600  IN      SOA     ns1.s.com. lhr.ns1.s.com. 2009050700 3600 1800 604800 86400

;; Received 110 bytes from 124.137.97.18#53(NS4.s.com) in 3 ms

 

 

 

 

 

lhr@Sch-Sysng:/lhr># nslookup -type=ptr 203.226.253.11 -> 이렇게 에러가뜨면 리버스 도메인 설정안된것

Server:         192.168.11.6

Address:        192.168.11.6#53

 

** server can't find 11.253.226.203.in-addr.arpa: NXDOMAIN

 

 

 

인버스 도메인은 IP에 대해 해당 도메인을 역으로 찾을 수 있도록 하는 서비스이다. 보통 ISP(Internet Service Provider)에서 IP를 할당받을 때 같이 신청한다. 다음과 같이 인버스 도메인에 대한 네임서버가 in-addr.arpa 네임스페이스에 등록되어 있는지 확인한다.

 

$ nslookup -type=ns 253.226.203.in-addr.arpa. (C Class 로 할당받았을경우)

ㄱ) 인버스확인!

lhr@Sch-Sysng:/lhr># nslookup -type=ns 253.226.203.in-addr.arpa. Server:         192.168.11.6Address:        192.168.11.6#53

253.226.203.in-addr.arpa        nameserver = ns1.s.com.253.226.203.in-addr.arpa        nameserver = ns2.s.com.253.226.203.in-addr.arpa        nameserver = ns3.s.com.253.226.203.in-addr.arpa        nameserver = ns4.s.com.

lhr@Sch-Sysng:/lhr>#

ㄴ) 인버스 에러

Server:  ns.nobreak.com

Address:  0.0.0.0

 

79.105.210.in-addr.arpa nameserver = ns.nobreak.com

79.105.210.in-addr.arpa nameserver = ns2.nobreak.com

ns.nobreak.com  internet address = 210.105.79.2

ns2.nobreak.com internet address = 210.105.79.3

만약 다음과 같은 메시지가 나온다면, 인버스 도메인 등록이 안되어 있는 것이므로, 해당 ISP에 신청하여야 한다.

 

*** ns.nobreak.com can't find 79.105.210.in-addr.arpa.: Non-existent host/domain

 

 

해당 아이피가 상위기관 어디서 위임받는지 확인해보자

 

lhr@Sch-Sysng:/lhr># dig -x 203.226.253.11

 

; <<>> DiG 9.3.4-P1 <<>> -x 203.226.253.11

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 25235

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

 

;; QUESTION SECTION:

;11.253.226.203.in-addr.arpa.   IN      PTR

 

;; AUTHORITY SECTION:

253.226.203.in-addr.arpa. 3600  IN      SOA     ns1.s.com. lhr.ns1.s.com. 2009050700 3600 1800 604800 86400

 

;; Query time: 0 msec

;; SERVER: 192.168.11.6#53(192.168.11.6)

;; WHEN: Thu Sep  9 13:21:15 2010

;; MSG SIZE  rcvd: 110

 

 

 

;; AUTHORITY SECTION: --> 이 부분에 서 SOA를 받는것인데 리버스 도메인 셋팅 요청을 하면 된다.

253.226.203.in-addr.arpa. 3600  IN      SOA     ns1.s.com. lhr.ns1.s.com. 2009050700 3600 1800 604800 86400

[Linux] DNS 설치 및 서비스 설정방법

 ----------------------------------------------------------------------------------
0. 환경
 > OS : CentOS 5.5
 - CentOS 5.5 설치시 패키지선택에서 DNS 이름서버를 선택하면 위의 내용이 모두 설치됨.

------------------------------------------------------------------------------------

< DNS 설치여부 확인 및 설치 방법 >

1. DNS 설치여부 확인

> BIND 9가 설치여부 확인

[root@ns ~]# rpm -qa | grep bind
=======================================================================================
ypbind-1.19-12.el5
bind-9.3.6-4.P1.el5
bind-libs-9.3.6-4.P1.el5
bind-utils-9.3.6-4.P1.el5
=======================================================================================

 

> 네임서버 설치여부 확인

[root@ns ~]# rpm -qa | grep name
=======================================================================================
caching-nameserver-9.3.6-4.P1.el5
=======================================================================================

 

2. 네임서버 설치

# yum install caching-nameserver
( 위에 명령으로 설치되지 않는다면, caching-nameserver-9.3.6-4.P1.el5 이름을 모두 입력. )

-------------------------------------------------------------------------------------

< DNS 설정 방법 >

ex)
 > DNS 호스트명 : ns
 > DNS 도메인 : mydomain.co.kr
 > DNS 서버IP : 192.168.0.101

1. 서버에서 도메인 검색의 시작점인 hosts 파일에 ns라는 호스트 추가

# vi /etc/hosts
=======================================================================================
127.0.0.1       localhost localhost.localdomain
192.168.0.101   ns.mydomain.co.kr ns
=======================================================================================

 

2. 사용할 DNS 서버 주소를 설정

# vi /etc/resolv.conf
=======================================================================================
domain mydomain.co.kr
search mydomain.co.kr
nameserver 192.168.0.101
nameserver 168.126.63.1
nameserver 168.126.63.2
=======================================================================================


3. DNS와 hosts 파일 중 호스명이 IP주소로 변환될때 참조 우선 순서 설정하는 파일 수정

# vi /etc/host.conf
=======================================================================================
order hosts,bind
multi on
=======================================================================================

 - 위의 order 설정의 의미는 도메인에 대해 질의할 때,
 hosts 파일을 먼저 참고하고 답을 찾지 못하면 bind 즉 DNS에 질의하라는 의미이다.
 - multi on 은 /etc/hosts 파일에 하나의 호스트에 대해 여러 개의 IP 주소를 설정가능 옵션.

-------------------------------------------------------------------------------------

 

4. Zone 파일 및 케시 DNS서버에 대한 설정

> conf 파일 수정

 

# vi /etc/named.caching-nameserver.conf
=======================================================================================
options {
        listen-on port 53 { any; };
//      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";

        // Those options should be used carefully because they disable port
        // randomization
        query-source    port 53;
        // query-source-v6 port 53;

        allow-query     { any; }; // any로 수정
        allow-query-cache { any; };  // any로 수정
//      allow-query-cache { localhost; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };  // any로 수정
        match-destinations { any; };  // any로 수정
        recursion yes;
        include "/etc/named.rfc1912.zones";
};
=======================================================================================

> 소유권 변경 및 named.conf 파일 심볼릭 링크 만들기

 

# chown named.named /etc/named.caching-nameserver.conf
# ln -s /etc/named.caching-nameserver.conf /etc/named.conf
(*)만약 /etc/named.conf 파일이 존재하고 있으면 백업 및 삭제 후 심볼릭 링크를 만든다.

 

 

> named.rfc1912.zones 파일확인

 

# vi /etc/named.rfc1912.zones
=======================================================================================
zone "." IN {
        type hint;
        file "named.ca";
};

zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};

// localhost 에 대한 설정
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; }; //다이나믹 하게 업데이트를 허용할것인지 설정한다. 대부분 none
};

// 127.0.0.X 에 대한 역 도메인
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};

zone "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 {
        type master;
        file "named.ip6.local";
        allow-update { none; };
};

zone "255.in-addr.arpa" IN {
        type master;
        file "named.broadcast";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.zero";
        allow-update { none; };
};

=======================================================================================

  위 named.rfc1912.zones 파일에 아래의 2개 항목 추가

=======================================================================================

zone "mydomain.co.kr" IN {
type master;
file "mydomain.co.kr.zone";
allow-update { none; };
};

zone "0.168.192.in-addr.arpa" { //reverse domain - IP 기입이 역순 입력되는것에 주의!!
type master;
file "0.168.192.rev";
allow-update { none; };
};
=======================================================================================


5. zone 파일 만들기 및 심볼릭 링크 걸기

> zone 파일 만들기

vi /var/named/chroot/var/named/mydomain.co.kr.zone
=======================================================================================
$TTL    86400
@               IN SOA  ns.mydomain.co.kr. root.mydomain.co.kr. (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
;
                IN NS  ns.mydomain.co.kr.
                IN MX 10 mail.mydomain.co.kr.

                IN TXT  "v=spf1 mx ip4:112.168.234.134 ~all"
                IN A  192.168.0.101

$ORIGIN mydomain.co.kr.
localhost       IN A  127.0.0.1
ns              IN A  192.168.0.101
www             IN A  192.168.0.102
mail            IN A  112.168.234.134
mydomain.co.kr. IN TXT "v=spf1 ip4:112.168.234.134 -all"
=======================================================================================

 

> zone 파일 소유권 변경 및 심볼릭 링크 만들기

# chown named.named mydomain.co.kr.zone
# ln -s /var/named/chroot/var/named/mydomain.co.kr.zone /var/named/mydomain.co.kr.zone


> rev 파일 만들기

 

# vi /var/named/chroot/var/named/0.168.192.rev
=======================================================================================
$TTL    86400
@       IN      SOA     ns.mydomain.co.kr. root.mydomain.co.kr.  (
                                      2009022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum

 IN NS      ns.mydomain.co.kr.
101 IN PTR     ns.mydomain.co.kr.
102 IN PTR     www.mydomain.co.kr.
102 IN PTR     mydomain.co.kr.
=======================================================================================

> rev 파일 소유권 변경 및 심볼릭 링크 만들기

# chown named.named 0.168.192.rev
# ln -s /var/named/chroot/var/named/0.168.192.rev /var/named/0.168.192.rev

- 이것으로 설치와 설정이 끝났으며, DNS 서버를 시작하도록 한다

-------------------------------------------------------------------------------------

< DNS 시작 및 정지 방법 >

> 시작 및 정지

# /etc/rc.d/init.d/named [start | reload | stop]

> 오류 로그 검사

# grep named /var/log/messages
=======================================================================================
Apr  9 22:14:15 localhost named[1772]: zone 0.168.192.in-addr.arpa/IN/localhost_resolver: loaded serial

2009022700
Apr  9 22:14:15 localhost named[1772]: zone mydomain.co.kr/IN/localhost_resolver: loaded serial 42
Apr  9 22:14:15 localhost named[1772]: zone mydomain.co.kr/IN/localhost_resolver: sending notifies (serial

42)
=======================================================================================

< DNS 정상작동 여부 테스트 및 확인>

[root@ns named]# nslookup

=======================================================================================
> server 192.168.0.101
Default server: 192.168.0.101
Address: 192.168.0.101#53
> set type=any
> mydomain.co.kr
Server:         192.168.0.101
Address:        192.168.0.101#53

mydomain.co.kr        text = "v=spf1 ip4:112.168.234.134 -all"
mydomain.co.kr
        origin = ns.mydomain.co.kr
        mail addr = root.mydomain.co.kr
        serial = 42
        refresh = 10800
        retry = 900
        expire = 604800
        minimum = 86400
mydomain.co.kr        nameserver = ns.mydomain.co.kr.
mydomain.co.kr        mail exchanger = 10 mail.mydomain.co.kr.
Name:   mydomain.co.kr
Address: 192.168.0.101
=======================================================================================

< 방화벽에서 DNS 포트(53) 예외 적용>

# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

# iptables -A INPUT -p udp --dport 53 -j ACCEPT

1. whoishg.zone 파일 생성및 작성
(/var/named/chroot/var/named)
============DNS Master====================
-----------내 설정------------------------------
$TTL 86400
@  IN SOA ns.whoishg.com. root.whoishg.com. (
     42  ; serial
     3H  ; refresh
     15M  ; retry
     1W  ; expiry
     1D )  ; minimum
         IN NS  ns1.whoishg.com.
  IN A  118.128.134.115
  IN MX 10 mail.whoishg.com.
ns  IN A  118.128.134.115
www  iN A  118.128.134.103
mail  IN A  118.128.134.107
ftp  IN A  118.128.134.110
whoishg.com IN A  118.128.134.103
whoishg.com. IN TXT "v=spf1 ip4:118.128.134.107 -all" 

<== 정상적인  메일 발송을 위해 SPF(DNS zone 파일에TXT) 레코트 설정함.

-----------------------------------------------

2. zone 파일 소유권 변경 및 심볼릭 링크 만들기
# chown named.named whoishg.zone
# ln -s /var/named/chroot/var/named/whoishg.zone /var/named/whoishg.zone

---------------------------------------------

============DNS Slaves 예정==============
$TTL 86400
@  IN SOA ns2.whoishg.com. root.whoishg.com. (
     43  ; serial (d. adams)
     3H  ; refresh
     15M  ; retry
     1W  ; expiry
     1D )  ; minimum
         IN NS  ns1.whoishg.com.
  IN A  118.128.134.116
  IN MX 10 mail.whoishg.com.
ns  IN A  118.128.134.116
www  iN A  118.128.134.103
mail  IN A  118.128.134.107
ftp  IN A  118.128.134.110
whoishg.com IN A  118.128.134.103
mail  IN A  118.128.134.107

'DNS 서버구축 > 작업일지' 카테고리의 다른 글

conf 설정파일 작업일지_0328  (0) 2013.04.04

+ Recent posts