강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

DNS서버보안 2편 : DNS 보안 정책 실무편1

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

 

 

 

DNS서버보안 2: DNS 보안 정책 실무편1

 

이제 본격적으로 DNS를 어떻게 안전하게 관리할 것인지 구체적인 방법들에 대해서 알아보도록 하자. 이 방법은 다분히 정책적인 부분도 있고 기술적인 부분도 있는데 기술적인 부분은 애초에 bind에서 제공하는 기능을 이용하는 것이므로 몇 가지 설정을 변경하는 것만으로도 충분하다.

 

 

 

 

 

1. DNS 서버의 물리적 분리

 

일반적으로 특정 도메인을 whois 질의해 보면 masterslave DNS 서버가 이를테면 192.168.1.1192.168.1.2와 같이 동일한 네트워크 대역으로 설정되어 있는 경우를 흔히 볼 수 있다.

 

 

 

 

그러나 masterslave를 같은 네트워크 세그먼트 대역으로 설정할 경우 만약 서비스거부 등 네트워크 기반 공격이 발생하거나 라우팅 문제가 발생하여 네트워크 자체에 장애가 발생할 경우에는 Single Point of Failure가 되어 DNS1, 2차 또는 master/slave로 분리한 장점이 없어지게 되므로 각각을 서로 다른 네트워크 대역으로 설정하는 것이 좋다.

 

 

 

 

 

 

실제로 20011Microsoft에서 이와 관련된 DNS 장애로 인하여 24시간여 동안 Microsoft에서 관리하던 microsoft.com이나 msn.com등의 사이트가 접속이 되지 않았던 경우가 있다.

 

 

 

 

 

또한 IP 대역뿐만 아니라 가능하다면 각각의 서버를 물리적으로도 다른 장소에 두어 만약의 사고에 대비하는 것이 좋다.

 

 

 

 

이를테면 masterA IDCslaveB IDC에 두는 것이 좋다.

 

 

 

 

그리고 각각의 DNS 서버를 서로 다른 OS로 운영하는 것도 고려해 볼 수 있는데, 만약 아직 패치가 나오기 전 또는 패치를 하기 전에 새로운 취약성 및 공격코드(zero-day exploit)가 나타나 이 취약성으로 인하여 DNS 서버가 공격을 당할 경우 같은 취약성으로 두 대의 서버 모두 장애를 겪을 수 있기 때문이다.

 

 

 

 

통상적으로 취약성이 공개된 경우 소스가 공개된 오픈소스(:sendmail)의 경우 24시간, 소스가 공개되지 않은 비 오픈소스(:IOS)48시간 이후 공격코드가 공개되는 것이 가장 최단시간이었으나 이제는 이 시간이 매우 짧아져 취약성과 공격코드가 동시에 공개되거나 아예 취약성이 나오기 전에 공격코드가 공개되는 경우도 있다.

 

 

 

 

 

e0dd5c53a1424fc7dbafce70923b2f80_1672026684_8522.png
 

[그림] DNS 서버의 물리적 분리 예

????[유용한 팁]

일반적으로 master, slave라는 용어뿐만이 아니라 primary, secondary 또는 1, 2차라는 용어가 혼재되어 사용되고 있다.

 

 

 

 

물론 비슷한 의미의 용어이지만 primary, secondary 또는 1, 2차라는 용어가 DNS의 작동 방식에 대해 다소의 오해를 유발할 수 있기 때문에 필자는 가급적 master, slave라는 용어를 사용할 것이다.

 

 

 

 

 

 

우리가 도메인을 등록할 때 보면 1차와 2차 네임서버를 각각 지정하도록 되어 있는데, 1, 2차라는 용어 때문인지 흔히들 1차가 DNS 서비스를 제공하다가 만약 1차가 다운되면 2차가 대신 응답하는 것으로 알고 있다.

 

 

 

 

그러나 이는 잘못 알고 있는 것으로, 실제로 1차와 2차는 동시에 질의를 받아 처리하고 있다.

 

 

 

 

, 동일한 권한으로 질의를 받고 응답한다는 것이다.

 

 

 

 

단지 1차에는 위임 도메인에 대한 설정이 직접 정의되어 있고, 2차에는 1차의 정보를 zone transfer로 전송받아 저장하는 것 뿐 인데, 이 때문에 오해의 소지가 있는 1, 2차 보다는 master, slave라는 용어가 더 정확하다는 것이다.

 

 

 

 

, masterslave는 단지 서버가 어디에서 데이터를 얻어오는가에 따른 분류일 뿐인데, 단지 slave 는 자기 자신이 독자적으로 DNS를 설정할 수 있는 권한은 없고 단지 master에서 지정한 설정대로만 따라간다는 것이다.

 

 

 

 

실제로 slave DNS로도 동등하게 질의가 들어오는지 확인해 보려면, 2DNS 서버에서 tcpdump port 53을 실행해 보거나

# dig @ns.dacom.co.kr server.com +trace 와 같이 반복적으로 질의해 보기 바란다.

같은 도메인이라도 질의할 때마다 경로가 달라지는 것을 알 수 있을 것이다.

 

첫 번째 질의)

Searching for SOA record for tt.co.kr at c.root-servers.net: Got referral to E.DNS.kr. [took 44 ms]

Searching for SOA record for tt.co.kr at E.DNS.kr.: Got referral to ns2.ttpia.com. [took 250 ms]

두 번째 질의)

Searching for SOA record for tt.co.kr at g.root-servers.net: Got referral to F.DNS.kr. [took 198 ms]

Searching for SOA record for tt.co.kr at F.DNS.kr.: Got referral to ns1.tt.co.kr. [took 248 ms]

 

위는 첫 번째와 두 번째 질의했을 때의 결과인데, 첫 번째는

c.root-servers.net -> E.DNS.kr. -> ns2.ttpia.com.를 통해 질의하지만 아래의 경우

g.root-servers.net -> F.DNS.kr. -> ns1.tt.co.kr.로 질의하는 것을 알 수 있다.

 

 

 

 

 

 

이와 관련하여 추가적으로 최상위 root 네임서버를 생각해 보자. A.root-servers.netmaster이고, B부터 M.root-servers.netslave인데, 기존 상식대로라면 B부터 M.root-servers.net는 평소에는 질의가 없다가 A.root-servers.net이 다운되었을 때만 작동하게 될 것이다.

 

 

 

 

그러나 질의해 보면 그렇지 않다는 것을 알 수 있으며 이를테면 아래 사이트에 접속해 보면 k.root-servers.net의 경우 질의와 응답이 계속적으로 발생하고 있다는 것을 알 수 있다.

 

 

 

 

http://k.root-servers.org/

 

e0dd5c53a1424fc7dbafce70923b2f80_1672026705_3507.png
 

[그림] k.root-servers.net이 받는 질의 수

 

그리고, .kr 도메인의 경우 한국인터넷진흥원(KRNIC)에서 master(G) 1, KT,dacom, 하나로,KISTI4개 기관에서 slave 5대로 총 6([b-g].dns.kr)가 운영되고 있는데, 각각의 서버는 초당 평균 800-1000번의 질의를 처리하는 것으로 알려져 있다.

 

 

 

 

 

 

 

.kr이 언급된 김에 재미있는(?) 문제를 하나 풀어보자. dig이나 nslookup등 여러 질의를 이용해 실제 .kr을 관리하는 한국인터넷진흥원의 DNS에는 도메인설정이 어떻게 설정이 되어 있는지 알 수 있을까? 물론 가능하다.

 

 

 

 

필자는 물론 직접 본 적은 없지만 아마도 2단계 도메인은 아래와 같이 설정되어 있을 것으로 추측한다.

 

 

 

 

 

zone “kr" {

type master;

file “kr.zone";

};

 

zone “co.kr" {

type master;

file “co.zone";

};

 

zone “or.kr" {

type master;

file “or.zone";

};

 

zone “pe.kr" {

type master;

file “pe.zone";

};

......

co.zone )

$TTL 3600

@ IN SOA a.dns.kr. domain-manager.nic.or.kr. ( 2007112412 ; Serial 3600 ; Refresh 900 ; Retry 604800 ; Expire

300 ) ; Minimum

IN NS g.dns.kr.

IN NS b.dns.kr.

IN NS c.dns.kr.

IN NS d.dns.kr.

IN NS e.dns.kr.

IN NS f.dns.kr.

tt.co.kr. IN NS ns1.tt.co.kr.

IN NS ns2.ttpia.com.

ns1.tt.co.kr. IN A 211.47.66.36

dacom.co.kr. IN NS nis.dacom.co.kr.

IN NS ns2.dacom.co.kr.

nis.dacom.co.kr. IN A 164.124.101.31

ns2.dacom.co.kr. IN A 203.248.240.31

하략 ...

같은 방법으로 .kr 에 대한 kr.zone 파일을 각자 만들어 보기 바란다.

 

 

 

 

dig을 이용해 질의를 해 보면 그다지 어렵지 않을 것이다.

 

 

 

2. DNS 서버의 용도에 따른 분리

 

masterslave DNS의 물리적인 분리뿐만 아니라 제공되는 용도에 따라 분리하는 것도 좋은데, DNS는 용도에 따라 크게 Advertising(또는 Authoritative)Resolving(또는 Caching)으로 나눌 수 있으므로 각각의 서버를 분리하여 각자 맡은 역할만을 담당하도록 하는 것이 좋다.

 

 

 

 

이를테면 Advertising의 경우 특정 도메인에 대해 위임권한을 갖고, 해당 도메인에 대한 DNS 질의가 들어오면 설정되어 있는 정보를 참고로 즉시 응답하지만 위임권한이 없는 즉, 자신의 named.conf에 정의되지 않은 도메인에 대한 질의에 대해서는 응답을 하지 않게 되는 것이다.

 

 

 

 

반대로 Resolving은 내부의 고객 등에게 다른 도메인에 대한 lookup 서비스(recursion에 대해서는 아래에서 설명한다.)를 제공하는 것으로 누구나 자신의 PC에 설정하여 사용할 수 있다.

 

 

 

 

이러한 DNSKTkns.kornet.net(168.126.63.1), dacomns.dacom.co.kr등이 대표적이다.

 

 

 

 

이와 같이 AdvertisingResolving으로 분리함으로써 만약 어떤 서버의 장애가 발생하거나 크래킹으로 인하여 정상적인 서비스가 불가능할 경우 다른 서비스에 미치는 영향을 최소화할 수 있다.

 

 

 

 

 

 

DNS 서비스 자체는 시스템이나 네트워크에 크게 부하를 유발하지 않기 때문에 일반적으로 중소 규모의 사이트에서는 DNS와 웹 서비스 또는 메일 서비스 등을 한 서버에서 제공하는 경우가 많다.

 

 

 

 

그러나 이러한 경우 다른 서비스의 취약성으로 인하여 DNS, 또는 DNS의 취약성으로 인하여 다른 서비스에 장애나 영향을 줄 수 있기 때문에 가급적 엄격하게 접근 통제가 설정된 별도의 서버에서 DNS를 전용으로 운영하는 것이 좋다.

 

 

 

 

이를테면 DNS만 서비스하는 전용 서버라면 UDP, TCP 53번에 대해서만 허용하고 나머지는 차단하는 필터링 룰을 설정하면 될 것이다.

 

 

 

 

 

 

3. Recursion(재귀적 또는 순환)질의 제한

 

아래 두 질의의 결과를 살펴보자. 같은 도메인에 대해 ns.dacom.co.kr에 질의한 값과 nis.dacom.co.kr에 질의한 값이 다른 것을 알 수 있는데, 첫 번째 응답은 클라이언트가 질의한 도메인에 대한 IP 주소를 찾아 응답한 것을 알 수 있고, 두 번째는 자신은 답을 모르니 root DNS에게 물어보라하고 접속을 끊어 버린 것이다.

 

 

 

 

참고로, “nslookup yahoo.co.kr ns.dacom.co.kr”의 의미는 ns.dacom.co.kr DNSyahoo.co.kr 도메인에 대하여 질의한 것이다.

Resolving DNS에 일반 도메인을 질의한 경우 어떤 도메인에 대해서든 응답한다.

 

 

 

 

 

 

[root@dns /root]# nslookup yahoo.co.kr ns.dacom.co.kr

Server: ns.dacom.co.kr

Address: 164.124.101.2

 

Name: yahoo.co.kr

Address: 211.32.119.151

 

Advertising DNS에 일반 도메인을 질의한 경우 위임권한이 없는 도메인에 대한 질의에 대해서는 자신이 응답하지 않고, 대신 root DNS에 알아보라고 응답하고 끝낸다.

 

[root@dns /root]# nslookup yahoo.co.kr. nis.dacom.co.kr

Server: nis.dacom.co.kr

Address: 164.124.101.31

 

Name: yahoo.co.kr

Served by:

- F.ROOT-SERVERS.NET

192.5.5.241

 

- G.ROOT-SERVERS.NET

192.112.36.4

 

- H.ROOT-SERVERS.NET

128.63.2.53

 

- I.ROOT-SERVERS.NET

192.36.148.17

 

- J.ROOT-SERVERS.NET

192.58.128.30

 

- K.ROOT-SERVERS.NET

193.0.14.129

 

- L.ROOT-SERVERS.NET

198.32.64.12

 

- M.ROOT-SERVERS.NET

202.12.27.33

 

자 그럼, 첫 번째에서 ns.dacom.co.kryahoo.co.kr 도메인에 대한 IP를 어떻게 알고 응답하였을까? 이는 DNS가 작동하는 원리를 이해하여야 한다.

 

 

 

 

먼저 질의를 받은 ns.dacom.co.kr은 질의한 yahoo.co.kr이 자신 스스로가 위임 권한이 있는지(, 자신의 네임서버에 이 도메인에 대한 설정이 정의되어 있는지) 여부를 확인하여 없을 경우에는, 질의한 도메인에 대한 캐싱(caching)이 있는지 여부를 확인하고 있을 경우 캐싱에 있는 정보를 가지고 바로 IP 주소를 알려주지만 없을 경우에는 소위 root 서버라는 최상위 DNS 서버에 질의를 하게 된다.

 

 

 

 

, DNS 서버에서 응답하는 순서는 자신이 직접 응답 설정이 없을 경우 Caching에서 응답 캐시에서 없을 경우 root DNS로 질의의 순서가 된다.

 

 

 

 

 

 

 

e0dd5c53a1424fc7dbafce70923b2f80_1672026731_5023.png
 

[그림] recursion 작동원리(yahoo.com의 예)

 

여기서 잠깐 "DNS Caching"에 대해 알아보도록 하자.

 

Caching에 있는 정보란?

 

예를 들어 www.yahoo.com에 대한 DNS 질의를 받을 경우 질의를 받은 Local DNS는 질의한 도메인에 대하여 위임 권한이 없으면 자신의 Caching 메모리에 해당 도메인과 관련된 정보가 있는지 여부를 살펴본다고 하였다.

 

 

 

 

여기에서 Cachingwww.yahoo.comIP 주소에 대한 질의를 받았으므로 일차적으로 www.yahoo.com에 대한 A 레코드가 있는지 살펴보고, 없을 경우에는 yahoo.com에 대한 NS 레코드가 Caching에 있는지 살펴보고 만약 있으면 해당 DNS에 직접 www.yahoo.comA 레코드를 질의한다.

 

 

 

 

만약 Cachingyahoo.com에 대한 NS 레코드가 없을 경우에는 다음으로 .com에 대한 NS 레코드가 있는지 살펴보고, 만약 이도 없으면 최종적으로 root DNS에 질의하게 되는 것이다.

 

 

 

 

물론 이전에 누군가가 dns.com을 질의하였다면, zone 파일에 지정된 TTL 시간동안 dns.com에 대한 정보뿐만 아니라 .com에 대한 NS 레코드를 Caching에서 기억하고 있으므로 최상위 root DNS까지 올라갈 필요는 없을 것이다.

 

 

 

 

따라서 거의 대부분은 Caching에서 응답할 수 있으므로 우리가 일반적으로 우려(?)하는 만큼 도메인 질의시마다 매번 root DNS에 질의하는 것은 아니다.

 

caching은 어떻게 되는지 실제 확인이 가능할까?

 

만약 현재 자신이 운영하는 DNS 서버에 어떤 캐시정보가 있는지 확인하려면 다음과 같이

실행하면 된다.

 

 

 

 

 

[root@dns /root]# rndc dumpdb

dumpcache/var/named/named_dump.db 파일에 저장되므로 각자 어떤 정보가 캐시되어 있는지 확인해 보기 바란다.

 

 

 

 

cache된 데이터는 예상할 수 있듯이 root DNS서버에 대한 정보가 가장 먼저 보일 것이다.

 

 

 

 

또는 다음과 같이 dumpdb대신 querylog를 실행하면 실시간으로 질의되는 도메인에 대한 확인도 가능하다.

 

 

 

 

# rndc querylog

# tail -f /var/log/messages

 

Oct 11 20:45:50 mail-14 named[6294]: query logging is now on

Oct 11 20:47:19 mail-14 named[6294]: client 127.0.0.1#49907: query: yahoo.co.kr IN A

Oct 11 20:47:19 mail-14 named[6294]: client 127.0.0.1#49907: query: cinigroup.biz IN A

Oct 11 20:47:19 mail-14 named[6294]: client 127.0.0.1#49907: query: cinigroup.biz IN MX

Oct 11 20:47:19 mail-14 named[6294]: client 127.0.0.1#49907: query: yahoo.co.kr IN MX

Oct 11 20:47:19 mail-14 named[6294]: client 127.0.0.1#49907: query: mail.cinigroup.biz IN A

Oct 11 20:47:31 mail-14 named[6294]: client 127.0.0.1#49907: query: 99.68.47.211.in-addr.arpa IN PTR

Oct 11 20:47:31 mail-14 named[6294]: client 127.0.0.1#49907: query: w-ins.net IN A

Oct 11 20:47:31 mail-14 named[6294]: client 127.0.0.1#49907: query: w-ins.net IN MX

Oct 11 20:49:28 mail-14 named[6294]: query logging is now off 재실행시 Off

 

PCDNScaching한다?

 

PCWindows 2000이나 XP를 사용한다면 기본적으로 DNS Client Service가 작동하는데, 이러한 경우 Caching 정보가 남게 된다.

 

 

 

 

이를 위해서 command 창에서 다음과 같이 확인해 보기 바란다.

 

C:\Documents and Settings\Administrator>ipconfig /displaydns

 

많은 DNS cache 정보가 저장되어 있는 것을 알 수 있다.

 

 

 

 

cache 정보는 네트워크 환경에서 DNS 정보를 변경하면 초기화되는데, 만약 cache를 초기화하려면 다음과 같이 "ipconfig /flushdns"를 실행하면 된다.

 

 

 

 

 

 

C:\Documents and Settings\Administrator>ipconfig /flushdns

Windows IP Configuration

Successfully flushed the DNS Resolver Cache.

C:\Documents and Settings\Administrator>

 

 

질의를 받은 root 서버는 질의한 도메인의 제일 끝 주소를 보아 주소가 .kr인 것을 보고 .kr 도메인을 관장하는 DNS 서버는 한국인터넷진흥원(구 한국전산원)DNS 서버라는 답을 해 주고, 이 답을 받은 ns.dacom.co.kr은 한국인터넷진흥원의 DNS 서버에 다시 yahoo.co.kr을 질의하게 된다.

 

 

 

 

이 질의를 받은 한국인터넷진흥원의 DNS 서버는 질의한 도메인이 이번에는 .co.kr인 것을 보고 co.kr을 관장하는 한국인터넷진흥원의 DNS 서버에 다시 질의하라고 응답하고, 이 응답을 받은 ns.dacom.co.kr 서버는 다시 co.kr을 관장하는 DNS 서버에 yahoo.co.kr을 질의하게 된다.

 

 

 

 

(그러나 사실상 동일한 DNS서버에서 .kr.co.kr을 관리하고 있기 때문에 이 절차는 한 번에 끝난다.) 이 질의를 받은 DNS 서버는 yahoo.co.kr을 보고 이 도메인을 관장하는 DNS 서버는 ns1.yahoo.com.이라는 것을 알려주게 되고 이 응답을 받은 ns.dacom.co.kr 서버는 최종적으로 IP66.218.71.63ns1.yahoo.com에게 yahoo.co.kr을 질의하여 이 호스트 주소의 IP 주소가 211.32.119.151 이라는 것을 알게 되어 이 주소를 요청한 클라이언트에게 알려주게 된다.

 

 

 

 

이와 같이 root 서버부터 시작해서 위임 권한이 있는 각 DNS 서버로 내려오면서 반복적인 질의를 하는 방법을 리컬전(recursion) 또는 순환질의(recursive query)라고 한다.

 

 

 

 

엄밀히 이야기하면 recursioniteration(반복질의)으로 나뉘는데, 여기에서는 recursion으로 통일하도록 하겠다.

 

 

 

 

이는 아래의 결과로 확인할 수 있다.

 

 

 

 

 

 

[root@dns /root]# dig @a.root-servers.net. yahoo.co.kr.

;; AUTHORITY SECTION:

kr. 172800 IN NS D.DNS.kr.

kr. 172800 IN NS E.DNS.kr.

kr. 172800 IN NS F.DNS.kr.

kr. 172800 IN NS G.DNS.kr.

kr. 172800 IN NS B.DNS.kr.

kr. 172800 IN NS C.DNS.kr.

 

;; ADDITIONAL SECTION:

B.DNS.kr. 172800 IN A 61.74.75.1

C.DNS.kr. 172800 IN A 203.248.246.220

D.DNS.kr. 172800 IN A 203.83.159.1

E.DNS.kr. 172800 IN A 202.30.124.100

E.DNS.kr. 172800 IN AAAA 2001:dcc:5::100

F.DNS.kr. 172800 IN A 218.38.181.90

G.DNS.kr. 172800 IN A 202.31.190.1

G.DNS.kr. 172800 IN AAAA 2001:dc5:a::1

 

위의 예는 root 네임서버에게 yahoo.co.kr을 질의하자 .kr을 담당하는 DNS의 목록을 보여주고 있는 것을 알 수 있다.

 

 

 

 

결과적으로 위의 DNS 서버가 .kr 도메인을 관장하고 있는 것이다.

 

 

 

 

그리고 다소 생소한 “AAAA 2001:dc5:a::1” 부분이 있는데, 이는 IPv6 주소를 뜻한다.

 

 

 

 

 

 

이번에는 아래와 같이 한국인터넷진흥원의 DNS 서버에 co.kr에 대한 NS(네임서버)질의를 하자 아래와 같이 동일한 DNS 서버인 것으로 나왔다.

 

 

 

 

, .kr을 관장하는 DNS 서버에서 co.kr이나 or.kr 등 다른 도메인도 함께 관장하고 있다는 것을 알 수 있다.

 

 

 

 

 

 

[root@dns /root]# dig @g.dns.kr co.kr. ns

;; ANSWER SECTION:

co.kr. 86400 IN NS f.dns.kr.

co.kr. 86400 IN NS g.dns.kr.

co.kr. 86400 IN NS b.dns.kr.

co.kr. 86400 IN NS c.dns.kr.

co.kr. 86400 IN NS d.dns.kr.

co.kr. 86400 IN NS e.dns.kr.

 

;; ADDITIONAL SECTION:

b.dns.kr. 86400 IN A 61.74.75.1

c.dns.kr. 86400 IN A 203.248.246.220

d.dns.kr. 86400 IN A 203.83.159.1

e.dns.kr. 86400 IN A 202.30.124.100

e.dns.kr. 86400 IN AAAA 2001:dcc:5::100

f.dns.kr. 86400 IN A 218.38.181.90

g.dns.kr. 86400 IN A 202.31.190.1

g.dns.kr. 86400 IN AAAA 2001:dc5:a::1

 

그 중의 한 네임서버에 yahoo.co.kr. 도메인을 질의하고 이 네임서버는 아래와 같이 위임권한이 있는 DNS 서버의 목록을 알려준다.

 

[root@dns /root]#dig @b.dns.kr. yahoo.co.kr. ns

 

;; AUTHORITY SECTION:

yahoo.co.kr. 86400 IN NS ns1.yahoo.com.

yahoo.co.kr. 86400 IN NS ns3.yahoo.com.

yahoo.co.kr. 86400 IN NS ns4.yahoo.com.

yahoo.co.kr. 86400 IN NS ns5.yahoo.com.

yahoo.co.kr. 86400 IN NS ns6.yahoo.com.

 

그 중 한 네임서버인 ns1.yahoo.com.yahoo.co.kr에 대한 A 주소를 질의하면 다음과 같이 최종적으로 질의한 도메인의 IP 주소를 알게 된다.

 

 

 

 

아래에서 300TTL 시간으로서 얼마동안 이 결과를 Caching할 것인가에 대한 설정이다.

 

 

 

 

 

[root@dns /root]# dig @ns1.yahoo.com. yahoo.co.kr A

;; ANSWER SECTION:

yahoo.co.kr. 300 IN A 211.115.99.172

yahoo.co.kr. 300 IN A 203.212.171.217

 

앞에서는 원리를 파악하기 위해 일일이 조회하였는데, 이 과정을 한 번에 조회할 수 있는 방법이 있다.

 

 

 

 

아래는 ns.dacom.co.kr DNS 서버에 yahoo.co.kr에 대한 질의 과정을 순차적으로 보여주고 있는데, 앞에서 언급한 질의 과정을 좀 더 실제적으로 보여주고 있는 것을 알 수 있다.

 

 

 

 

즉 캐시에서 응답하지 않고 최상위 root 네임서버로부터 응답을 찾아오는 과정을 보여주는 것이다.

 

 

 

 

각각의 결과에 대해 살펴보도록 하자.

 

[root@dns /root]# dig @ns.dacom.co.kr yahoo.co.kr +trace

; <<>> DiG 9.3.3rc2 <<>> @ns.dacom.co.kr yahoo.co.kr +trace

; (1 server found)

;; global options: printcmd

. 428423 IN NS D.ROOT-SERVERS.NET.

. 428423 IN NS E.ROOT-SERVERS.NET.

. 428423 IN NS F.ROOT-SERVERS.NET.

. 428423 IN NS G.ROOT-SERVERS.NET.

. 428423 IN NS H.ROOT-SERVERS.NET.

. 428423 IN NS I.ROOT-SERVERS.NET.

. 428423 IN NS J.ROOT-SERVERS.NET.

. 428423 IN NS K.ROOT-SERVERS.NET.

. 428423 IN NS L.ROOT-SERVERS.NET.

. 428423 IN NS M.ROOT-SERVERS.NET.

. 428423 IN NS A.ROOT-SERVERS.NET.

. 428423 IN NS B.ROOT-SERVERS.NET.

. 428423 IN NS C.ROOT-SERVERS.NET.

;; Received 500 bytes from 164.124.101.2#53(164.124.101.2) in 5 ms

 

최상위 root DNS 서버에 대한 정보가 나온다.

 

 

 

 

IP164.124.101.2ns.dacom.co.kr에 질의한 결과이며 앞의 428423은 각 최상위 root 서버에 대한 NS 레코드의 TTL , 캐시타임이다.

 

 

 

 

그리고 이 정보를 받는데 5 ms가 소요되었다는 것을 알 수 있다.

 

kr. 172800 IN NS E.DNS.kr.

kr. 172800 IN NS G.DNS.kr.

kr. 172800 IN NS B.DNS.kr.

kr. 172800 IN NS D.DNS.kr.

kr. 172800 IN NS F.DNS.kr.

kr. 172800 IN NS C.DNS.kr.

;; Received 281 bytes from 128.8.10.90#53(D.ROOT-SERVERS.NET) in 312 ms

 

위의 root DNS 서버 중 RTT(RTT에 대해서는 아래 참고)가 가장 빠른(짧은) D.ROOT-SERVERS.NET 서버로부터 .kr에 대한 도메인을 관장하는 서버에 대한 ns 정보를 받았으며 이때 소요된 시간은 312 ms이다.

 

 

 

 

172800.kr 에 대한 ns 레코드의 TTL이다.

yahoo.co.kr. 86400 IN NS ns3.yahoo.com.

yahoo.co.kr. 86400 IN NS ns4.yahoo.com.

yahoo.co.kr. 86400 IN NS ns5.yahoo.com.

yahoo.co.kr. 86400 IN NS ns6.yahoo.com.

yahoo.co.kr. 86400 IN NS ns1.yahoo.com.

;; Received 128 bytes from 202.30.124.100#53(E.DNS.kr) in 52 ms

 

위의 .kr을 관장하는 DNS 서버 중 RTT가 가장 빠른(짧은) E.DNS.kr로부터 yahoo.co.kr. 에 대한 DNS 정보를 받았으며 이때 소요된 시간은 52 ms이다.

 

 

 

 

86400E.DNS.kr에 설정되어 있는 yahoo.co.kr에 대한 ns 레코드의 TTL이다.

 

yahoo.co.kr. 300 IN A 203.212.171.217

yahoo.co.kr. 300 IN A 211.115.99.172

yahoo.co.kr. 7200 IN NS ns1.yahoo.com.

yahoo.co.kr. 7200 IN NS ns2.yahoo.com.

yahoo.co.kr. 7200 IN NS ns3.yahoo.com.

yahoo.co.kr. 7200 IN NS ns4.yahoo.com.

yahoo.co.kr. 7200 IN NS ns5.yahoo.com.

yahoo.co.kr. 7200 IN NS ns6.yahoo.com.

;; Received 274 bytes from 217.12.4.104#53(ns3.yahoo.com) in 300 ms

 

마지막으로 yahooDNS 서버 중 RTT가 가장 짧은 ns3.yahoo.com으로부터 yahoo.co.kr 에 대한 DNS 정보를 받았으며 이때 소요된 시간은 300 ms이다.

 

 

 

 

7200ns1.yahoo.com. 에 설정되어 있는 ns 속성에 대한 TTL이다.

 

http://www.zonecut.net/dns/ 에 접속해 보면 +trace로 보이는 결과를 아주 흥미로운 그림으로 보여주고 있다.

 

 

 

 

꼭 접속해서 여러분의 도메인을 검색해 보기 바란다.

 

 

참고로, dig을 이용하면 최상위 root DNS 서버에서부터 .com등의 도메인을 관리하는 DNS에 대한 정보를 조회할 수 있다.

 

 

 

 

 

) root-server 관련 DNS 조회

root-server의 경우 .으로 조회하면 된다.

 

 

 

 

아래 명령어의 경우 a.root-servers.net.NS 레코드를 질의(, root 도메인의 DNS 서버가 무엇인가)하는 것이다.

 

 

 

 

 

# dig @a.root-servers.net . ns

. 518400 IN NS J.ROOT-SERVERS.NET.

. 518400 IN NS K.ROOT-SERVERS.NET.

. 518400 IN NS L.ROOT-SERVERS.NET.

. 518400 IN NS M.ROOT-SERVERS.NET.

. 518400 IN NS A.ROOT-SERVERS.NET.

. 518400 IN NS B.ROOT-SERVERS.NET.

. 518400 IN NS C.ROOT-SERVERS.NET.

. 518400 IN NS D.ROOT-SERVERS.NET.

. 518400 IN NS E.ROOT-SERVERS.NET.

. 518400 IN NS F.ROOT-SERVERS.NET.

. 518400 IN NS G.ROOT-SERVERS.NET.

. 518400 IN NS H.ROOT-SERVERS.NET.

. 518400 IN NS I.ROOT-SERVERS.NET.

 

) .com 관리 DNS 조회

 

# dig @a.root-servers.net com. ns

com. 172800 IN NS H.GTLD-SERVERS.NET.

com. 172800 IN NS I.GTLD-SERVERS.NET.

com. 172800 IN NS J.GTLD-SERVERS.NET.

com. 172800 IN NS K.GTLD-SERVERS.NET.

com. 172800 IN NS L.GTLD-SERVERS.NET.

com. 172800 IN NS M.GTLD-SERVERS.NET.

com. 172800 IN NS A.GTLD-SERVERS.NET.

com. 172800 IN NS B.GTLD-SERVERS.NET.

com. 172800 IN NS C.GTLD-SERVERS.NET.

com. 172800 IN NS D.GTLD-SERVERS.NET.

com. 172800 IN NS E.GTLD-SERVERS.NET.

com. 172800 IN NS F.GTLD-SERVERS.NET.

com. 172800 IN NS G.GTLD-SERVERS.NET.

 

) .org 관리 DNS 조회

 

# dig @a.root-servers.net org. ns

org. 172800 IN NS C0.ORG.AFILIAS-NST.INFO.

org. 172800 IN NS D0.ORG.AFILIAS-NST.org.

org. 172800 IN NS TLD1.ULTRADNS.NET.

org. 172800 IN NS TLD2.ULTRADNS.NET.

org. 172800 IN NS A0.ORG.AFILIAS-NST.INFO.

org. 172800 IN NS B0.ORG.AFILIAS-NST.org.

 

) .jp 관리 DNS 조회

 

# dig @a.root-servers.net jp. ns

jp. 172800 IN NS D.DNS.jp.

jp. 172800 IN NS E.DNS.jp.

jp. 172800 IN NS F.DNS.jp.

jp. 172800 IN NS A.DNS.jp.

jp. 172800 IN NS B.DNS.jp.

 

같은 방법으로 각자 .biz.info, .us등 관심 있는 도메인에 대한 NS 레코드를 조회해 보기 바란다.

 

 

앞에서, RTT(Round Trip Time)라는 용어가 사용되었는데, 아마 처음 들어보는 관리자도 있을 것이다.

 

 

 

 

RTT, DNS 서버 간에 질의, 응답에 소요되는 시간을 뜻한다.

 

 

 

 

 

네임서버는 질의하려는 네임서버가 복수 개 있을 때 먼저 해당 DNS 서버에 대한 RTT 값을 알고 있는지 확인하게 된다.

 

 

 

 

만약 RTT에 대한 데이터가 없을 경우 모든 서버에 질의를 하여 RTT 값을 기록한 후 차후에는 이 값이 가장 낮은 네임서버에게 질의하게 되는데, 한 번 질의를 한 후에는 해당 DNS에 대한 RTT 값을 조금씩 늘림으로써 한 DNS 서버에 질의가 몰리는 것을 방지하게 된다.

 

 

 

 

결국 primary 등 특정 DNS 서버에 질의가 몰리지 않고 여러 DNS 서버에 골고루 분산되는 것이다.

 

 

 

 

또한 응답이 없는 DNSRTT값을 매우 높여 응답이 없는 DNS로 질의가 가지 않도록 하기도 한다.

 

 

 

 

 

 

 

다시 본론으로 돌아와서 그럼, recursion을 제한하여야 하는 이유는 무엇일까?

 

첫째로, recursion은 이렇듯 복잡한 과정을 거쳐 진행되므로 악의적인 의도를 가지고 짧은 시간에 많은 도메인에 대한 질의를 하게 되면 이를 처리하느라 많은 자원을 소모하게 되고 이는 결국 서비스거부 공격(DOS)의 형태로 악용될 수 있는 여지가 있다.

 

 

 

 

만약 a.com부터 zzzzz....zzz.com까지 빠른 속도로 무한루프를 돌면서 질의를 한다고 가정한다면 DNS 서버는 이를 처리하느라 다른 정상적인 DNS 질의를 처리하지 못할 것이다.

 

두 번째로, recursion을 허용할 경우, 악의적인 의도를 가지고 DNS SpoofingCache poisoning을 이용하여 특정 도메인에 대한 DNS 정보를 변경시켜 다른 웹 사이트가 보이게 하거나 다른 메일 서버로 메일이 전달되도록 할 수 있다.

 

 

 

 

 

이 시나리오에 대해서는 다음 URL을 참고하기 바란다.

 

http://www.giac.org/practical/gsec/Doug_Sax_GSEC.pdf

 

bind DNS를 설치하면 recursion 기능이 기본적으로 모두 허용되어 있다.

 

 

 

 

실제로 한 조사에 의하면 전 세계 약 750만개의 DNS 서버가 공인IP로 연결되어 있는데 이 중 약 75%에 달하는 DNS 서버가 별도의 보안 설정 없이 recursive 질의가 허용되어 있다고 한다.

다음과 같이 설정 파일인 named.conf에서 정의하면 해당하는 IP 또는 IP 대역에만 허용하게 된다.

 

 

 

 

아래의 경우 127.0.0.1192.168.1.0/24 대역에서만 recursion을 허용하도록 제한한다.

 

 

 

 

 

 

options {

directory "/var/named";

allow-recursion {127.0.0.1; 192.168.1.0/24; };

};

 

또는 같은 방법으로 access control(acl)을 이용하여 다음과 같은 설정 또한 가능하다.

 

acl internal { 127.0.0.1; 192.168.1.0/24; };

options {

directory "/var/named";

allow-recursion {internal; };

};

 

여기에서 acl은 다음과 같은 형식으로 사용하면 된다.

 

acl acl-name {

address_match_list

};

 

만약, recursion을 아예 제공하지 않으려면 다음과 같이 두 가지 방법으로 설정할 수 있다.

 

options {

allow-recursion {none;};

};

 

또는

 

options {

recursion no;

};

 

참고로, bind 4.x에서는 options no-recursion을 설정하면 된다.

 

설정 후에는 자신의 DNS서버가 recursion이 허용되어있는지 여부를 직접 확인해 보기 바란다.

 

 

 

 

http://dns.measurement-factory.com/cgi-bin/openresolvercheck.pl 에 접속하여 dns서버의 ip를 입력하여 쿼리 전송을 클릭하면 되는데, 결과가 closed 라고 나온다면 보안 설정이 잘 된 것이고, open 이라고 나온다면 허용되어 있는 것이므로 설정을 변경하여야 한다.

 

 

 

 

또한 ip대역으로도 질의를 하여 다음과 같이 결과를 메일로 받을 수 있다.

 

 

 

 

 

 

192.168.71.59 192.168.71.59 CLOSED 2008-02-27 22:58:25.996359

192.168.71.82 192.168.71.82 CLOSED 2008-02-27 20:32:35.074315

192.168.71.90 192.168.71.90 CLOSED 2008-02-27 20:32:47.586259

192.168.71.92 192.168.71.92 OPEN 2008-02-27 20:29:54.442806

192.168.71.94 192.168.71.94 CLOSED 2008-02-27 20:29:36.138536

 

4. Zone-transfer 제한

 

먼저 아래의 결과를 보고 시작해 보자. (ns.test.ac.krtest.ac.krdns)

만약 dig 명령어가 없을 경우에는 “dig @ns.test.ac.kr test.ac.kr axfr” 대신

“host -l test.ac.kr ns.test.ac.kr"을 실행할 수 있다.

 

[root@dns /root]# dig @ns.test.ac.kr test.ac.kr axfr

 

; <<>> DiG 9.3.3rc2 <<>> @ns.test.ac.kr test.ac.kr axfr

; (1 server found)

$ORIGIN test.ac.kr.

@ 1H IN SOA ns root.ns (

2007101773 ; serial

6H ; refresh

10M ; retry

1W ; expiry

1H ) ; minimum

 

1H IN NS ns

1H IN NS ns2

1H IN MX 0 smtp

1H IN MX 10 smtp2

1H IN A xxx.xxx.6.20

ling 1H IN A xxx.xxx.100.22

script 1H IN A xxx.xxx.44.18

mobicomm 1H IN A xxx.xxx.19.212

knuth 1H IN A xxx.xxx.44.14

maynard 1H IN A xxx.xxx.47.79

infosys1 1H IN A xxx.xxx.33.108

lim2 1H IN A xxx.xxx.82.165

...... 이하 중략

 

 

위는 실제 국내 모 종합대학의 DNS 서버에 axfr(Zone-transfer) 질의를 한 결과인데, 보는 바와 같이 SOA test.ac.krZone 파일 정보뿐만 아니라 도메인 앞에 붙은 모든 서버들의 목록과 해당하는 IP 주소를 알 수 있다.

 

 

 

 

(여기에서 대학이름은 test, IP 대역은 xxx.xxx으로 처리하였다.) 결과를 보았을 때는 엄청날 수 있지만 사실 이는 대단한 해킹기술도 아니며 단지 DNS에서 기본적으로 제공하는 zone-transfer라는 기능을 이용하였을 뿐이다.

 

 

 

 

zone-transfermasterslave DNS 서버 간에 zone 파일을 동기화하기 위해 사용되는 기술인데, slave 서버에서 정기적으로 master 서버에 접속을 시도해 해당 zone 파일의 serial을 서로 비교해 보고 zone 파일을 업데이트 할 지 아니면 하지 않을지를 결정하게 된다.

 

 

 

 

만약 zone-transfer가 발생하게 되면 zone 정보를 전송하게 되므로 전송 과정에서 많은 데이터의 이동이 발생하기 때문에 zone-transfer에서는 UDP 대신 신뢰할 수 있는 프로토콜인 TCP를 사용하게 된다.

 

 

 

 

 

 

그런데 별도의 설정을 하지 않을 경우 기본적으로 zone-transfer는 모든 IP에 대해 허용되어 있어 누구나 접근 가능한데, 그러한 경우 다음과 같은 문제가 발생할 수 있다.

 

 

 

 

 

만약 악의적인 목적을 가지고 스크립트를 이용하여 지속적으로 zone-transfer를 시도할 경우 시스템의 자원과 대역폭을 모두 사용하여 서비스거부로 악용될 수 있다.

 

 

 

 

특히 포털이나 대학과 같은 경우 한 도메인에 대한 2차 도메인의 개수가 많은데, 이를테면 앞에서 확인한 대학의 경우 2,000개가 넘는 zone(xxx.test.ac.kr)이 정의되어 있으며 파일도 수Mbyte에 해당하였다.

 

 

 

 

 

 

호스트 이름과 IP 매핑등 민감한 정보를 유출할 수 있다.

 

 

 

 

위의 결과를 보더라도 해당 기관의 사용 호스트 목록과 IP 사용 대역 등을 모두 알 수 있으므로 경쟁업체나 기관에서는 매우 관심 있는 정보가 될 수 있다.

 

 

 

 

이를테면 zone transfer를 통해 사내에서 사용하는 개발 서버나 관리용 서버, 인트라넷 등의 IP 정보 등을 알 수 있게 될 것이다.

 

 

 

 

특히 한 유명한 포털 업체의 경우도 zone-transfer가 열려 있는 경우가 있었는데, 이를 통해 해당 도메인으로 운영되는 서버 대수등도 추측이 가능할 것이다.

 

 

 

 

 

앞에서도 언급한 바와 같이 zone-transfer는 정상적인 DNS 서비스와는 관계가 없으므로 zone transfer를 제한 설정 한다고 해서 서비스에 영향을 주지는 않는다.

 

 

 

 

이를 설정하는 방법은 여러 가지가 있는데, 각각의 상황에 대해 살펴보자.

master / slave를 사용할 경우

만약 각각의 도메인에 대해 masterslave DNS를 운영하는 경우, masterslave DNS 서버 각각에 도메인이 정의되어 있는 경우에 master 서버에서는 오직 slave 서버에서의 zone-transfer만 허용하도록 slave DNSIP를 설정하면 된다.

 

 

 

 

또한 slave 서버에서는 또 다른 3,4slave 서버에 zone transfer를 제공하는 것이 아니라면 모든 zone-transfer를 제한하도록 하여야 한다.

 

 

 

 

여기에서 흔히 실수하는 부분이 master에서는 slave에서만 zone transfer가 가능하도록 설정하면서, 정작 slave에서는 별도 설정 없이 모두 허용하는 경우가 있는데 이는 앞문만 닫아놓고 뒷문은 활짝 열어놓는 것과 같은 식이므로 주의하여야 한다.

 

 

 

 

참고로, zone transferzone 파일만 동기화 할 뿐 named.conf는 동기화하지 않는다.

master만 사용할 경우

 

아마도 거의 대부분이 이 경우일 것이다.

 

 

 

 

규모가 큰 사이트를 제외하고는 대부분 master / slave를 운영하지 않고, 1대의 DNSmaster만 운영하고 2차는 ISP나 임의의 DNS정보를 등록하는 경우가 대부분인데(물론 이는 옳지 않은 방법이다.

 

 

 

 

차라리 1차만 등록하는 것이 좋다.), 이 경우 2차로 등록만 해 놓았을 뿐 slave로 작동하는 서버가 없으므로 zone transfer를 제공할 필요가 전혀 없고, 따라서 모든 zone-transfer를 제한하여야 한다.

 

 

 

 

 

zone transfer를 제한하는 설정은 일괄적으로 named.conf에 설정된 모든 도메인에 대해 적용할 수도 있고, 특정 도메인에 대해서만 설정할 수 있는데, 모든 도메인에 대해 zone-transfer를 일괄 적용하려면 다음과 같이 options { }에서 정의하면 된다.

 

 

 

 

아래는 모든 zone-transfer를 허용하지 않도록 할 때의 설정 예이다.

 

 

 

 

 

 

options {

allow-transfer { none; };

};

 

또한 아래는 slave DNSIP192.168.1.10일 경우의 설정 예이다.

 

 

 

 

slave가 여러 개일 경우에는 allow-transfer { 192.168.1.10; 192.168.2.10;}; 등과 같이 설정하면 된다.

options {

allow-transfer { 192.168.1.10; };

};

위와 같이 options에서 지정하면 named.conf에서 지정한 모든 도메인에 적용되며(권장)

아래와 같이 특정 도메인에 대해서만 zone-transfer를 허용할 수도 있다.

 

 

 

 

 

 

zone "server.com" {

type master;

file "server.zone";

allow-transfer { 192.168.1.10; };

};

 

5. Dynamic update 제한

 

/var/log/messages 파일을 보다보면 아래와 같은 로그기록을 흔히 볼 수 있다.

 

 

 

 

이는 DNS Dynamic update와 관련된 로그로서 아래 메시지의 경우 192.168.0.76에서 server.com 이라는 도메인에 대한 Dynamic update 시도를 하였지만 DNS 서버에서 거부하였다는 의미이다.

 

 

 

 

 

 

Dec 9 08:17:22 dns named[241]: unapproved update from [192.168.0.76].4852 for server.com

 

Dynamic update를 이용할 경우 원격지에서 zone 파일에 특정 레코드를 추가하거나 삭제 또는 변경이 가능하게 되는데, 이를 통해 도메인 관리를 자동화하거나 DHCP등과 같이 주소와 IP 매칭이 실시간으로 변경 및 갱신 될 필요가 있는 서비스에 유용하게 사용될 수 있다.

 

 

 

 

그런데, Windows 2000의 경우 기본적으로 dynamic update를 시도하기 때문에 위와 같은 로그가 많이 보이게 되는데, 기본적으로 DNS 서버에서 dynamic update는 거부되어 있으므로 무시하여도 무방하며 만약 PC에서 이 기능을 사용하지 않기 위해서는 다음과 같이 설정을 변경하면 된다.

 

 

 

 

 

 

* Windows 2000에서 설정하는 법

 

[시작]->[설정]->[네트워크및전화접속연결]->[로컬영역연결]->[등록정보]->[TCP/IP]->[등록정보]->[고급]->[DNS]->[DNS에 이 연결의주소를 등록]부분의 체크를 해제.

 

dynamic update가 어떻게 작동하는지 아래와 같이 원격 로그인한 상태에서 nsupdate 명령어로 확인해 보자.

 

[root@dns /root]# nslookup www.server.com.

Name: www.server.com

Address: 192.168.3.5

 

[root@dns /root]# nsupdate

> prereq yxdomain server.com.

> update delete www.server.com.

> update add www.server.com. 86400 IN A 192.168.4.6

> Ctrl+D

 

[root@dns /root]# nslookup www.server.com.

Name: www.server.com

Address: 192.168.4.6

 

이처럼 dynamic update는 필요하다면 유용하게 사용할 수 있지만 제한 없이 허용할 경우 zone 정보가 임의대로 추가, 변경될 수 있으므로 사용하려면 반드시 엄격한 접근통제를 설정하여야 할 것이다.

 

 

 

 

 

 

dynamic update 기능은 기본적으로 차단되어 있으므로 별도의 설정이 필요 없지만, 모든 도메인에 대해 dynamic update를 차단하도록 하려면 다음과 같이 설정하면 된다.

 

 

 

 

 

 

options {

allow-update { none; }.

};

 

물론 권장하지 않지만 모두 허용하려면 none 대신 any를 지정하면 된다.

 

만약 모든 도메인에 대해 192.168.10.0/24 대역에서의 dynamic update를 허용하려면 다음과 같이 설정하면 된다.

 

 

 

 

이는 options에서 지정하였으므로 named.conf에 정의된 모든 도메인에 적용된다.

 

options {

allow-update { 192.168.10.0/24; }.

};

 

아래는 www.server.com 도메인에 대해서만 dynamic update를 허용하되 허용 IP 대역을 192.168.4.0/24으로 제한한 것을 알 수 있다.

 

 

 

 

만약 server.com을 포함하여 xxx.server.com 형태의 zone 정보를 dynamic update하려면 zone 정의를

www.server.com 대신 server.com으로 하여야 한다.

 

 

 

 

따라서 기존의 server.com zone 정의파일 외에 아래와 같이 www.server.com에 대한 zone 정의 파일이 추가로 필요하다.

 

zone "www.server.com" {

type master;

file "www.server.zone";

allow-update { 192.168.4.0/24; };

};

 

만약 dynamic update를 허용하여야 할 IP 대역이 명확하지 않고 유동적이라면 바로 뒤에서 설명할 “TSIG를 이용한 보안강화에서 설명하는 대로 IP 대신 공유키를 이용하여 접근 제어를 설정해도 된다.

 

 

 

 

 

 

이렇듯 dynamic update를 하려면 매우 복잡한 설정을 하여야 하는데, bind 9.x에서 제공하는 update-policy를 이용하면 아래와 같이 별도의 zone을 생성할 필요 없이 쉽게 구현이 가능하다.

 

zone "server.com" {

type master;

file "www.server.zone";

update-policy {

grant allowed-www-updater self www.server.com A;

};

};

 

위 예는 server.com에서 www.server.comIP 변경에 대해서만 dynamic update를 허용한다는 의미이고 다른 변경이나 추가는 거부한다는 의미이다.

 

 

 

 

물론 사전에 allowed-www-updater라는 key가 정의되어 있어야 한다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,041 명
  • 현재 강좌수 :  35,855 개
  • 현재 접속자 :  122 명