◆ 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 구성
● 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 파일 설정 형식
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주소를 변경
◆ slave 서버 구성
외부영역에서 네임서버가 53번 포트 접속에 대한 ip를 설정하는 부분
any로 변경하지 않으면 로컬에서만 사용 가능하게 됨
recursion no
: 보조 서버로서 recursion 이 허용 되어 있으면 DNS cache poisoning 공격에 최약하며 일종의 증폭기 또는 좀비로 악용되어 특정 시스템 또는 네트워크에 공격할 가능성이 있음
slave는 master에서 파일을 가져오기 때문에 allow-update를 할 필요 없음
대신 master가 누군지 알려주는 정보가 있어야 함
named 데몬(slave 서버) master정보를 master 서버에서 받아옴
named 그룹에 쓰기권한 부여
=> 쓰기 권한이 있어야 slave 파일을 master 파일로부터 받아와서 쓸 수 있음
resolv.conf : 다양한 운영 체제에서 시스템의 도메인 이름 시스템 확인자를 구성하는 데 사용
슬레이브 dns 서버 작동 확인
dig 를 이용하여 ns2.hwlee.hyee.site 에 질의, 대상은 hwlee.hyee.site 타입은 ns(네임서버 정보)
master 네임 서버가 동작하지 않을 경우 slave 네임 서버가 대신하여 정보를 제공하는지 테스트
slave 네임 서버 nslookup 명령어 정방향 조회 시도(성공)
(2) rndc 사용
● rndc 란?
: remote named controy utility의 약자로 다수의 네임서버를 안전하게 컨트롤하기 위해 설정
/etc/named/conf 파일에 설정
control 은 제어할 원격 네임서버 ip, 포트 , 키를 설정
첫번째 controls 는 로컬에서 사용
두번째 controls 는 slave에서 사용
named.conf 에 rndc.key 를 직접 설정하는 방법이라서 /etc/rndc.key 파일을 참조 안함
/etc/rndc.key 파일을 named.conf 에 include 시키기
master 서버 named.rfc1912.zones 파일에서 slave 서버를 허용 해야함
● 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 : 키
※ 예시
master 서버에서 zone 파일 수정 후 slave 서버 zone 파일 업데이트
-> 수정 된 zone 파일의 serial 넘버가 수정 전 zone 파일의 serial 넘버보다 클 때 slave 서버는 master 서버의 zone 파일을 업데이트 함