딩굴댕굴

Linux - 26. DNS

by jennysgap

BOX

DNS

/ 13대 있음 (1대 고장나서 12대만 쓰고 있음)

 - com - naver, nate

 - net - daum - www

 - edu

 - mul

 - gov

 - org

 - kr - co, ne, ac, go, or


1. Domain

URL : www.daum.net

            3       2       1        뒤에서 앞으로 읽음!!!


user 가 주소를 입력하면 /etc/hosts에서 확인하고 만약 없다면 DNS를 통해 조회 시작함

/         URL : www.daum.net 메세지를 받으면 net (1) 정보만 확인 후 net으로 보냄

net         URL : www.daum.net 메세지를 받으면 daum(2) 정보만 확인 후 daum으로 보냄

daum URL : www.daum.net 메세지를 받으면 www(3) 정보만 확인 후 www로 보냄

www URL : www.daum.net 메세지를 받으면 나야 하고 자기 ip주소를 보냄


리컬시브 : 모든 서버한테서 보낼 때, 같은 질문만 반복해서 질문한다.



DNS 서버 구축

1) 설치

bind-9.x 버전 설치

# rpm -qa | grep bind            ( DNS 패키지 파일이 설치되어있는지 확인 )

# yum  list  bind* 

# yum  install  bind

# yum  install  bind-devel

# rpm -qa | grep bind


2) 구성 정보 파일

# mv /etc/named.conf  /etc/named.bak

# cd /var/named

# mkdir  backup

# mv * backup

# vi /etc/named.conf

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

[문법 예시]

conf_key  [domain/ACL] [in] {  configuration;  };


options {  

directory  "/var/named";    (directory는 데이터베이스 저장 할 위치정보)

};


zone  "domain"  in  { 

type  master;

file  "database_file_name";

};


type : 직접 제작(master), 복사(hint), 다른 곳으로 부터 참조(slave)

file  : 도메인과 관련된 데이터베이스 파일명

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

options {

directory "/var/named";

};


zone  "."  in  {                                       (zone은 DNS의 데이터베이스를 의미)

type hint;

file  "named.root";                     

};


zone  "class.com"  in  {

type master;

file  "forward-domain-info";

};


zone  "168.192.in-addr.arpa"  in  {       (역도메인명은 IP주소를 뒤집어 표현하는 방식)

type master;

file  "reverse-domain-info";

};


zone  "0.0.127.in-addr.arpa"  in  {

type master;

file  "loopback-domain-info";

};


4개 이상 꼭 입력해야함 (옵션은 있어도 되고 없어도 됨)

그래야 제대로 동작함, 메인은 여러개 있어도 됨

ip대역이 여러개 있다고 하면 하나 더 넣어줘야 함.

그냥 추가로 하나하나 더 추가하기만 하면 됨

도메인 사는 곳~

 - cafe24 (호스팅 업체에서 빌리는 거임, 도메인도 등록해주는 서비스도 해줌)


3) zone database

도메인명   클래스명 레코드타입   DNS서버명

클래스명 : IN 밖에 없음

레코드타입 : soa 일경우 값이 2개 입력해야 함.


도메인명 적는 법

1. classH1        = classH1.jenny.com.

2. root.classH1 = root.classH1.jenny.com.


class name   record

* class name : 사용되는 영역을 의미 주로 사용되는 타입은 "IN" (internet).

* record type : 사용 목적을 표시

- NS : Name Server(DNS server)

- MX : Mail Exchanger(Mail server)

- A   : Address (IP주소)

- PTR : PoinTeR (사이트 명)

- SOA : Start Of Authority (관리 시작 점)


- forward-domain-info (정방향 메인 파일)

$TTL  86400         *마침표(.)을 꼭 찍어야함

도메인명   클래스명 레코드타입   DNS서버명 관리자 이메일

@ IN SOA host.class.com. root.host.class.com. (

shortcut 20140723      ; Serial

1D               ; Refresh

6H               ; Retry

1W               ; Expire

86400            ; TTL

)


도메인명 클래스명 레코드타입

(숏컷으로 IN NS         host.class.com.   ; DNS server

생략가능) IN MX   1      mail.class.com.   ; Mail Exchanger

           우선순위

; Service list

host.class.com. IN A 192.168.xx.100 ; DNS server

web.class.com. IN A 192.168.xx.101 ; WEB server

mail                 IN A 192.168.xx.102 ; Mail server

ftp                 IN A 192.168.xx.103 ; FTP server

db1                 IN A 192.168.xx.104 ; Database Server


; Alias list            (캐논니컬 네임)

ns.class.com. IN CNAME host.class.com.

www IN CNAME web

hr         IN CNAME db1

; localhost list

localhost IN A 127.0.0.1 ; Loopback 


- reverse-domain-info (역방향 파일)

$TTL  86400

@ IN SOA host.class.com. root.host.class.com. (

20140723        ; Serial

1D                ; Refresh

6H                ; Retry

1W                ; Expire

86400             ; TTL

)


IN NS host.class.com.           ; DNS server

IN MX   1    mail.class.com.      ; Mail Exchanger


; Service list

100.xx IN PTR host.class.com.

101.xx IN PTR web.class.com.

102.xx IN PTR mail.class.com.

103.xx IN PTR ftp.class.com.

104.xx IN PTR db1.class.com.


- loopback-domain-info (루프백 파일)

$TTL  86400

@ IN SOA host.class.com. root.host.class.com. (

20140723        ; Serial

1D                ; Refresh

6H                ; Retry

1W                ; Expire

86400             ; TTL

)


IN NS host.class.com.   ; DNS server

IN MX   1    mail.class.com.   ; Mail Exchanger


; Service list

1 IN PTR localhost.class.com.


3) DNS 서비스 시작

# chkconfig  --list  named

# chkconfig  --level 3 named on

# chkconfig  --level 5 named on

# service  named  start


4) 오류 수정

- 오류 메시지 중 permission denied 처리 (행정적인 오류)

행적적인 오류는 화면에 출력이 되지 않기 때문에 massages 라는 로그 기록을 봐야함.

오류를 나오지 않게 하려면 소유권 이전이라는 작업을 해야 함

# cd /var/named

# chown  named  *

   

- /etc/rndc.key 메시지 출력 후 정지

키 값이 같아야 데이터를 교류할 수 있음. 구성 정보 파일에 입력을 해 놓으면

상대방에 키가 없을 경우 데이터 전송이 느려짐 (서비스 지연현상)

/etc/rndc.key 파일 및 파일내 키 입력하면 정상 동작함. 없을 경우 대기 시간을 지나면 자동 ok.


- service 명령을 통해 실행이 되지 않을 경우

1. 소유권이나 권한에 관한 오류

2. 오타 - DNS는 자동화 되는 기능이 없음 (왠만해서는 수동 작업)

3. 버그나 패키지 설치 때문에 그렇다고 하면 named -u named (명령으로 시작하면 됨)

    왜 안되는지 보려면 디버깅 모드로 볼 수 밖에 없음

    named -d named (디버깅 모드)


- 휴먼버그가 가장 큼 (=오타버그)

# named -u named  

# ps -ef | grep named  (named 프로그램이 없을 경우 오타 검사 실시)


fqdn

Fully Qualified Domain Name

http://blog.naver.com/2evergr/220111234710 블로그 글 참고


vi /etc/resolv.conf

내용 다 지우기

내용 입력

search jenny.com

nameserver 192.168.3.191 (자기 아이피 주소)

5) DNS 테스트

# ps -ef | grep named  

# nslookup                 (DNS 점검 도구)

> server                 ; 현재 설정 된 DNS 서버 확인

> server  192.168.xx.xx ; DNS 서버 변경

> www.class.com ; DNS 서버에 등록 된 정보 확인

> www.daum.net ; DNS를 이용하여 외부 호스트 정보 문의

(Non-Authoritative answer : Cache에 저장된 정보)

> set  type=ptr ; DNS 질의 방식 변경

> 192.168.xx.xx (PTR은 역방향 질의를 의미 IP로 사이트 명 도출)

> set  type=ns         ; 물어보면 네임서버에 대한 대답을 주세요

   도메인 명을 입력해야 함 (호스트를 제외하고)

> class.com         ; DNS 서버가 속한 도메인의 모든 DNS 서버 정보 

> set  type=a         ; default로 설정된 형식으로 IP 주소 문의 


모르는 걸 물어보면 server can't find 라고 나옴 (찾을 수 없다는 오류메세지 뜸)

인터넷이 안 될 경우 오프하고 키기

외부에서 사용자가 붙음, www 정보를 알면 접속해도 됨

그러나 다른 정보들은 모르면 접속 할 수 없음

> ls jenny.com

검색하면 모든 ip 정보가 다 나옴. (모든 장비가 다 DNS에 등록되기 때문에)

이걸 다 공유하면 어떻게 공격할지 쉽게 파악되기 때문에 보안적으로 위험함


6) 관리적 보안

1> 'ls' 명령을 이용한 리스트 출력 제한

allow-transfer 설정을 이용한 ls 명령 사용 제한.

allow-transfer { IP-addr;  IP-range;  none; };  (위치는 DB 파일 명 있는 곳)


[참고] none 이라고 주는 것이 기본값임!!!  다른 값은 주지 마시오!!!!

아니면 tcp의 53번 포트를 막으면 됨!!! (그러면 굳이 설정을 안넣어도 됨)

필수값이므로 무!조!건! 입력해야 함

# vi /etc/named.conf

DNS는 알면 물어보고 모르면 물어보지마!

정도메인 파일이 안되면, 역도메인 파일을 찾아보기!!

ls 3.168.192.in-addr.arpa

키 값 두개 설정 따로 하지 말고 옵션에 넣기


2> Query(질의) 설정

allow-query 설정을 이용하여 특수 대역(intranet 등) 질의 거부

allow-query { IP-addr;  IP-range;  none;  };  (역방향 DB파일 명 아래 설정)


허가된 아이피 대역만 질의 가능!

나머지는 질문자체를 아예 안처리 하겠다.

역도메인에 무!조!건! 설정해야 하는 것이 좋음


못 물어보게 하려면 파일을 기준으로 함

물어보지 말라고 하면 192번도 같이 적용 됨

분리해서 물어보게 할 수는 없을 까요? 그런 기능 없음

파일 자체를 분리해서 설정해야함. 그렇지 않으면 보호하지 못함

역도메인과 정방향 둘 중 하나만 설정 못하게 할 수 있음

둘다 못물어보게 하면 안됨 (보통 역방향에 설정함)


특정한 대역, 특정한 시스템을 적어주는 것이 기본값


ip를 통해서 검색하면 host명만 딱 알아내도 어떤 정보가 들어가있는지 유추 가능

역도메인으로 가니까 숫자만 넣으면 바로 찾을 수 있음

set type=ptr

네트워크 다이어그램이라는 그림이 그려짐 (네트워크 공격에 이용하는)

binding 하는 것은 쉬움 (bind, named)

allow-transfer만 막아도 다 되는 것이 아니구나

query로 물어보면 나오는 구나 이것도 막아야 하구나!

정방향에 있는 내용은 역방향에도 다 있기 때문임

역방향은 정보노출도가 쉽기 때문에 아예 질문하게 하지마

너만 물어봐 하듯 입력해 놓기 (다 못물어보게 하진 말고 특정한 대역만 물어봐라 하듯 설정)


대역보다는 특정한 아이피를 계속 적는 것이 좋음!!!!!!

개별적인 시스템 아이피로 하나하나 등록해주는 것이 좋음

allow-query { 192.168.3.245; 192.168.3.240; };  이렇게 입력하기!!!!!


3> recursive answer(회귀성 질의) 거부

* 회귀성 질의는 인터넷 상의 시스템 문의 시 사용하는 DNS의 대표적 질의 방식으로

  해당 질의를 못 할 경우 인터넷 접속 지원을 할 수 없음.

* 사이트가 보안상 중요한 데이터를 가지고 있을 경우 인터넷 접속을 통한 외부로의

  데이터 유출을 막기위해 사용되는 기능.

* 즉, 내부에 있는 사람들을 믿지 못할 때, 사용하는 기능임.

  아예 내부에서 못나가게끔 사용하는 것.


options {  recursion  yes/no;  };

named.root  파일 및 캐쉬 정보 무력화 반드시 no로 적혀있어야 한다.

즉 쉽게 말해서 인터넷 막을 때 사용하는 것

recursion no;

일시적으로 인터넷을 사용 금지 시킬 때 사용

가끔 인터넷을 쓸 때만 yes 로 바꿨다가 다시 no로 바꾸면 됨


[but] IP주소를 알고 있을 경우 접속 가능함

DNS를 통한 접속만 허용안하겠다 임


이거 연습해 보면 DNS 셋팅하고 지우고 반복하다 보면 이해가 잘 됨



반응형

'BOX' 카테고리의 다른 글

Linux - 28. SAMBA [작업중]  (0) 2016.12.07
Linux - 27. DNS 서버 구축[작업중]  (0) 2016.12.07
Linux - 25. NFS [작업중]  (0) 2016.12.07
Linux - 24. FTP 서버 관리, hping  (0) 2016.12.07
Linux - 23. System Log II  (0) 2016.12.07

블로그의 정보

jennysgap

jennysgap

활동하기