반응형

◆ DNS(Domain Name System) 란 ?

인터넷 도메인 이름들의 위치를 알아내기 위해 IP 주소로 바꾸어주는 서버

도메인 이름은 인터넷 주소로서 사람들이 기억하기 쉽게 하기위한 표기 수단

인터넷에서 어떤 컴퓨터를 실제로 찾기 위해서는 숫자 체계로 된 IP 주소를 매칭해주는 것

 

 BIND(Berkeley Internet Name Domain) ?

BIND는 구성이 쉽고 표준을 따르는 도구로서 리눅스, Unix에 가장 널리 사용되는 DNS 프로그램

 

DNS master nameserver - 데이터 관리 측면에서 원본 존 데이터를 관리함

DNS slave nameserver - 마스터 네임서버를 동기화해서 사용함

 

chroot(change root)

named 계정의 권한이 최상위(/) 디렉터리까지 자유롭게 이동할 수 있는 권한을 가지기 때문에 보안에 취약

 

chroot는 DNS 서버의 보안을 높이기 위한 방식으로 /var/named/chroot 디렉터리를 최상위 루트로 인식하여 상대경로로 파일을 참조

 

 

(1) bind 설치

 master 구성

yum 으로 bind 설치

 

 

 

 dns 설정 파일(named.conf)

listen-on port 53 : 외부영역에서 네임서버가 53번 포트 접속에 대한 ip를 설정하는 부분

 

any로 변경하지 않으면 로컬에서만 사용 가능하게 됨

 

directory : 각 도메인의 zone 파일의 위치를 지정

 

dump-file : 정보가 갱신될 때 저장되는 파일

 

statistics-file : 통계파일이 생성되는 절대경로와 파일이름을 지정

 

memstatistics-file : 메모리 관련 통계파일이 생성되는 절대경로와 파일이름을 지정

 

allow-query : 네임서버 쿼리를 허용할 IP 혹은 IP 대역을 설정

 

allow-transfer : 네임서버로의 접근을 제어

 

blackhole : 서버가 문의를 받아들이지 않거나 해결하기 위해서 사용하지 않게되는 주소의 리스트 지정, 이 주소로부터의 문의는 응답 없음

 

recursion yes : 재시도를 의미, 여러개의 네임서버가 존재 할 때 순차적으로 질의 후 다시 1차 네임서버로 질의를 할 것인지를 선택

 

dnssec-enable yes : DNSSEC 서명검증 기능 설정(공개키 암호화 방식으로 데이터 위조-변조 공격을 막는 설정)

 

dnssec-validation yes : DNSSEC 검증 확인 설정

 

session-keyfile : master 와 slave 간의 보안 트랙잭션 설정

 

forwarders : 자신의 네임서버에 질의 요청이 들어오면 지정한 IP 주소의 네임서버로 forwarding 함

 

pid-file : 네임 서버의 PID를 기록할 경로를 지정

 

notify yes_or_no : zone 영역이 바뀌었음을 2차 네임 서버에 알리는 설정 항목

 

cleaning-interval number : 입력한 시간마다 네임 서버는 캐시를 청소

 

interface-interval number : 입력한 시간마다 인터페이스를 검색함

 

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

 

zone : 루트도메인에 대한 설정을 named.ca라는 파일에 참조하라는 설정,

 

type 값은 hint(루트도메인 지정), master(1차 네임서버), slave(2차 네임서버)

 

 

 

listen-on port 53 {any;};

: DNS port 53 에 대한 모든 IP 가 접근 가능하도록 설정

 

allow-query {any;};

: DNS 서버의 쿼리를 모든 ip 대역이 허용하도록 설정

 

recursion yes

: 도메인에 접속하기 위해 어떤 과정을 거쳐 답을 찾아 오는지에 대한 정보를 설명

 

 

● named.rfc1912.zones

Caching-nameseyrver package 파일

DNS서버에 IP와 도메인을 비교해주는 파일인 zone 파일과 rev파일의 경로와 정보가 있는 파일

zone : 도메인을 입력

type : 서버 타입 지정(master,slave)

file : zone 파일 이름 설정

allow-update : 동기화 할 slave 서버의 ip 지정

 

named 데몬시작 -> /etc 디렉토리에 위치한 네임서버의 원본 설정 파일이 해당 디렉터리에 복사

 

 

기존의 named.localhost 파일을 이용하여 새로운 zone 파일 생성 후 소유권을 root 에서 named로 변경

 

 

● zone 파일 설정

Record 종류

 

A : 호스트 IP 주소

 

NS : 도메인의 네임서버 정보

 

CNAME : 원래 도메인 네임을 별칭으로 매핑

 

SOA : 도메인의 Start of Authority(시작점), Zone의 속성 정보 지정

 

WKS : 호스트의 특정 IP주소 및 해당 IP 주소를 통해 제공하는 TCP/UDP 서비스 포트정보 지정

 

PTR : 도메인 네임을 매핑함, 주로 IP 주소의 도메인네임 지정에 사용

 

HINFO : 호스트의 CPU 정보와 운영체제 정보

 

MINFO : 메일박스와 메일리스트 정보

 

MX : 도메인의 MX(Mail Exchange) 서버

 

TXT : 호스트에 대한 텍스트 정보

 

RP : 도메인 네임별 담당자 정보

 

AFSDB : AFS DB 위치정보

 

X25 : 도메인 네임의 X.25 주소정보

 

ISDN : 도메인 네임의 ISDN 주소정보

 

NASP : 주소정보

 

SIG : 보안 서명을 저장

 

KEY : 보안 키를 저장

 

GPOS : 도메인 네임의 지리적 위치정보 위도, 경도 , 고도

 

AAAA : AAAA 레코드의 값은 16진법 형식의 IPv6 주소

 

SRV : 특정유형의 서비스를 지정된 DNS호스트의 목록에 매핑

 

A6 : IPv6 Prefix 및 주소정보

 

DNAME : 도메인 매핑 정보

 

zone 파일 설정시 루트 도메인(.) 중요

 

 

 

● zone 파일 설정 형식

host_name [TTL] class record_type data

 

host_name : 설정 하고 싶은 호스트 네임을 지정

 

TTL(Time To Live) : 호스트 이름을 정의해 갔을 때 질의해 간 다른 네임서버가 해당 IP주소를 캐시에 저장하는 기간 => 1행에서 default 값을 지정 했으므로 생략 가능

 

class : IN => internet 클래스를 가리킴

 

record_type : 사용하려는 record_type 지정

 

data : 각 레코드 타입에 해당하는 데이터 설정

 

 

 

● zone 파일 내용

$TTL(Time To Live) : 호스트 이름을 정의해 갔을 때 질의해 간 다른 네임서버가 해당 IP주소를 캐시에 저장하는 기간

 

@ : /etc/named.rfc1912zones에 정의된 hwlee.hyee.site 를 의미

 

IN : 클래스 이름으로 internet 의미

 

SOA(Start Of Authority) : 권한의 시작을 뜻함

 

serial : 버전정보(serial 숫자로 업데이트 되었는지 판단)

 

refresh : 상위 네임 서버에게 업데이트된 정보를 요청하는 간격

 

retry : 상위 네임 서버에 문제 발생시 재접속 간격

 

expire : 상위 네임 서버에 접속 못할 경우 이전의 정보를 파기하는 간격

 

minimum : 이 시간 이후에 정보가 삭제됨

 

 Master-Slave는 동기화 과정을 통해 zone 파일을 관리하게 되는데, zone 파일의 SOA 필드에 있는 serial을 확인하여 이 파일이 업데이트가 되었는지 판단, serial이 증가 했을 경우 파일이 업데이트된 것으로 판단하고 동기화 과정을 통해 slave 서버로 zone 파일을 전송

 

 

 

설정 방법

예시)

 

8

IN : internet 클래스

NS : 도메인의 네임서버 정보를 나타냄

ns.hwlee.hyee.site : 네임서버 입력

 

10

IN : internet 클래스

A : 호스트 IP 주소 type을 나타냄

121.254.171.244 : 호스트 IP 주소

 

14

www : 호스트 네임

IN : internet 클래스

A : 호스트 IP 주소 type을 나타냄

121.254.171.244 : 호스트 IP 주소

 

16

HINFO : 호스트 정보를 표시하는 레코드

"CentOs" : 시스템의 정보를 제공하기 위해 사용

 

17

MX 10 : Mail Exchange 설정

 

19 20

CNAME 레코드는 host_name에 대한 alias 기능을 함

ftp.rootman.co.kr  linux.rootman.co.kr에 링크 시켰다고 생각하면 됨

 

 

 레코드 값 변경 후 빠르게 업데이트 하는 방법

호스트의 IP(A 레코드)를 변경하면 네임서버에서는 변경 즉시 해당 내역이 적용되지만 기존에 등록되어 있던 IP는 여전히 전세계의 cache DNS에 남아있을 수 있고 해당 cache가 남아 있을 수 있는 시간(TTL)이 경과하여야 전세계의 cache DNS에서 변경이 완료 됨

 

도메인의 레코드(: www.domain.com)에 대한 TTL을 확인(| TTL  4시간)

TTL값을 최대한 낮춤(| 5), 이 때 IP주소는 변경하지 않음

기존 TTL값 만큼의 시간(| 4시간)을 기다린 다음 IP주소를 변경

 

 

설정 후 재시작

 

방화벽에서 dns 포트인 53번 열기

 

53번 포트 up 확인

 

정방향 정상 작동

 

 

dig 명령어로 등록된 네임서버를 이용하여 도메인 조회

 

 

 

◆ slave 서버 구성

클라이언트 서버에 dns slave 서버 구축

 

외부영역에서 네임서버가 53번 포트 접속에 대한 ip를 설정하는 부분

any로 변경하지 않으면 로컬에서만 사용 가능하게 됨

recursion no

: 보조 서버로서 recursion 이 허용 되어 있으면 DNS cache poisoning 공격에 최약하며 일종의 증폭기 또는 좀비로 악용되어 특정 시스템 또는 네트워크에 공격할 가능성이 있음

 

 

slave는 master에서 파일을 가져오기 때문에 allow-update를 할 필요 없음

대신 master가 누군지 알려주는 정보가 있어야 함

named 데몬(slave 서버) master정보를 master 서버에서 받아옴

 

 

named 그룹에 쓰기권한 부여

=> 쓰기 권한이 있어야 slave 파일을 master 파일로부터 받아와서 쓸 수 있음

 

 

부팅시 항상 named 데몬 enable 설정

 

 

 

방화벽에 dns 포트(53) 번 열기

 

 

dns master 서버에 slave 서버 등록

 

 

slave 서버 재시작

 

 

resolv.conf : 다양한 운영 체제에서 시스템의 도메인 이름 시스템 확인자를 구성하는 데 사용

슬레이브 서버에 마스터 네임서버 등록

 

슬레이브 서버 dns 동작 확인

 

마스터 dns 서버에서 설정한 zone 파일 보내짐

 

 

마스터 서버에서 보낸 zone 파일 슬레이브 서버에서 확인

 

 

master 서버 zone파일 내용 변경 시 slave 서버에 자동으로 파일 보내진 것을 log로 확인

 

 

 

슬레이브 dns 서버 작동 확인

dig 를 이용하여 ns2.hwlee.hyee.site 에 질의, 대상은 hwlee.hyee.site 타입은 ns(네임서버 정보)

 

 

 

master 네임 서버가 동작하지 않을 경우 slave 네임 서버가 대신하여 정보를 제공하는지 테스트

master 네임 서버 데몬 중지 후

 

 

slave 네임 서버 nslookup 명령어 정방향 조회 시도(성공)

 

 

 

(2) rndc 사용

 

● rndc ?

: remote named controy utility의 약자로 다수의 네임서버를 안전하게 컨트롤하기 위해 설정

 

rndc.key 내용

 

 

/etc/named/conf 파일에 설정

rndc-key 설정

control 은 제어할 원격 네임서버 ip, 포트 , 키를 설정

 

첫번째 controls 는 로컬에서 사용

 

두번째 controls  slave에서 사용

 

named.conf 에 rndc.key 를 직접 설정하는 방법이라서 /etc/rndc.key 파일을 참조 안함

 

 

rndc 상태 확인

 

/etc/rndc.key 파일을 named.conf  include 시키기

rndc.key 파일을 사용함

 

named.conf 설정 파일에서 rndc.key 를 참조

 

 

 

master 서버에도 rndc 사용할 953 포트 방화벽 열어주기

 

 

iptables 파일 변경 하였으므로 다시 읽어오기

 

 

설정 변경 하였으므로 reload

 

rndc 상태 확인

 

 

master/slave 서버가 rndc.key를 이용하여 서로 접속하기

master 서버 named.rfc1912.zones 파일에서 slave 서버를 허용 해야함

 

 

named.rfc1912.zones 파일 수정 하였으므로 재시작

 

 

master 서버에서 보낸 hwlee.hyee.site.zone 파일을 slave 에서 확인

 

 

master 서버의 named.conf 파일에서 slave 서버에 허용 설정

 

slave 서버에서 master 서버에 대한 내용 설정

 

설정 변경 후 재시작

 

slave  서버에  master 의  rndc.key  복사 해오기

 

 

복사해온 master의 rndc.key 의 권한을 named 로 바꾸기

 

 

 

slave 서버 rndc 사용할 953 포트 방화벽 열어주기

 

iptables 파일 변경 하였으므로 다시 읽어오기

 

 

slave 서버에서 master 서버로 rndc 명령어를 사용 하여 상태확인

 

 

rndc -s [서버 ip] -k [키파일] reload (성공)

 

 

 

● rndc 명령어

rndc reload : rnamed.conf 파일과 zone 파일를 다시 로드

 

rndc reload zone : zone 파일을 다시 로드

 

rndc reconfig : named.conf 와 새롭게 생성 된 zone 파일을 다시 로드

 

rndc stats : 통계 파일 생성(쓰기)

 

rndc querylog : 질의에 관련된 로그를 설정 토글(toggle)

 

rndc dumpdb : DB에 대한 덤프 설정(덤프 파일 생성)

 

rndc status : BIND 서버에 대한 통계 출력

 

rndc recursing : 현재 외부 질의하고 있는 쿼리를 수집

 

rndc flush : 캐시 삭제

 

rndc retransfer zone : 단일 영역 동기화

 

rndc trace [level] : 디버깅 정보를 named.run 이라는 파일로 붙여넣음

 

 

 

● rndc 사용법

b : 주소

c : 설정

s : 서버

p : 포트

k : 키 파일

y : 

 

 

 예시

rndc, master서버, 키 파일 /etc/rndc_master.key 인증으로 상태보기

 

 

master 서버에서 zone 파일 수정 후 slave 서버 zone 파일 업데이트

수정 전 zone 파일

 

수정 후 zone 파일

 

 

master 서버 다시 읽어오기

 

slave 서버에서 log로 master 서버 zone 파일 업데이트 확인

 

 

-> 수정 된 zone 파일의 serial 넘버가 수정 전 zone 파일의 serial 넘버보다 클 때 slave 서버는 master 서버의 zone 파일을 업데이트 함

 

 

 

 

반응형

+ Recent posts