centOS 5 네임서버 설치 및 운영 (bind server, name server, DNS)

centOS 5.2 NameServer 설치 및 운영
1. BIND 설치
환경 파일 경로
2. 기본 환경 설정
(1) named.conf – options
(2) named.conf – logging
(3) named.conf – view
(4) named.conf – int. view
(5) named.conf – ext. view
3. 존 정보(internal/external) 설정
(1) 존 정보(internal) 설정
(2) 존 정보(external) 설정
(3) RNDC (Name Server Control Utility)
4. DNS 운영 명령어
(1) 기본 명령어
(2) 도메인 존 설정 정보 확인
5. BIND 보안설정
(1) TSIG (Transaction Signature)
TSIG Key 생성
(2) 기타 보안 설정

•최종 수정일 : 2008년 11월 3일
1. BIND 설치
•설치 환경 : CentOS 5.2 (http://www.centos.org/)
•설치 프로그램 : ISC BIND (http://www.isc.org/)
◦버전 : BIND 9.3.4-P1
•설치 방법 (yum 자동 설치 권장)‏
◦Bind 관련 모든 패키지 설치
# yum install –y bind-*
# yum install –y bind bind-utils bind-chroot bind-libs bind-devel bind-libbind-devel bind-sdb
•기본으로 chroot 환경으로 설치됨
◦“/var/named/chroot/” 디렉토리를 “/” 로 인식
◦chroot 상위 디렉토리에 대한 허가권을 가질 수 없음
◦설정 파일은 수동으로 설정해야 함
◦제공되는 샘플 설정 파일 사용 : /usr/share/doc/bind-9.3.4/sample/
환경 파일 경로
•환경 파일 : /var/named/chroot/etc/
•존 정보 파일 : /var/named/chroot/var/named/
•샘플 파일 경로
◦/usr/share/doc/bind-9.3.4/sample/etc/
◦/usr/share/doc/bind-9.3.4/sample/var/named
•모든 샘플 파일을 기본 경로로 복사
cp -rf /usr/share/doc/bind-9.3.4/sample/etc/ /var/named/chroot/
cp -rf /usr/share/doc/bind-9.3.4/sample/var/named/ /var/named/chroot/var/

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

2. 기본 환경 설정
•Options
•View (internal)‏
•View (external)‏
•Key
(1) named.conf – options
•기본 설정
◦recursive-clients
■DNS 질의 처리 가능 최대 클라이언트 설정 값
■Cache DNS 설정 시 가용 메모리 용량에 따라 상향 조정 필요
■기본값 : 1000, 클라이언트 당 20kb - 총 19.5Mb
options
{
directory "/var/named“; // Zone 파일 기본 디렉토리
dump-file "data/cache_dump.db"; // Dump 파일 생성 경로
statistics-file "data/named_stats.txt"; // 통계 파일 생성 경로
memstatistics-file "data/named_mem_stats.txt"; // 메모리 사용 통계
recursive-clients 10000;
};
(2) named.conf – logging
•기본 로그 옵션 설정
logging
{
channel default_debug {
file "data/named.run";
severity dynamic;
};

category default { default_syslog; default_debug; }; // 기본 설정
category unmatched { null; }; // 기본 설정 (로그를 남기지 않음)
};
(3) named.conf – view
•View 설정
◦Cache DNS 전용 서버는 localhost_resolver view만 설정
◦내부 네트워크 클라이언트 전용 internal과 외부 클라이언트 external 로 구분 가능
view "localhost_resolver"
{
match-clients { localhost; };
match-destinations { localhost; };
recursion yes;
include "/etc/named.root.hints"; // 루트 서버 정보 파일
include "/etc/named.rfc1912.zones"; // RFC1912 권장 localhost 존 정보
};
(4) named.conf – int. view
•내부 네트워크 클라이언트 전용 View
view "internal"
{
match-clients { localnets; };
match-destinations { localnets; };
recursion yes; // 내부 네트워크 클라이언트 recursive 질의 허용
include "/etc/named.root.hints";

zone "cslab.kr" {
type master;
file “cslab.kr.internal.zone.db";
};
};
(5) named.conf – ext. view
•외부 네트워크 클라이언트 전용 View
view "external"
{
match-clients { any; };
match-destinations { any; };
recursion no; // 외부 네트워크 클라이언트 recursive 질의 금지
include "/etc/named.root.hints";

zone “cslab.kr" {
type master;
file “cslab.kr.external.zone.db";
};
};

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

3. 존 정보(internal/external) 설정
•SOA (Start Of Authority) 필드 정보
◦Serial : 1 ~ 24,294,967,295(10자리) YYYYMMDDNN 권장
◦Refresh : Slave의 업데이트 여부 검사 간격
◦Retry – Slave의 업데이트 여부 검사 실패 시 재시도 간격
◦Expiry – Slave가 Master 서버 접속을 실패하면 존 정보 파기
◦Negative TTL - 존재하지 않는 호스트에 대한 존 정보 보관 기간
(1) 존 정보(internal) 설정
•/etc/named/chroot/var/named/cslab.kr.internal.zone.db
$TTL 86400
@ IN SOA ns1.cslab.kr domain.cslab.kr (
2008102601 ; serial - 1 ~ 24,294,967,295(10자리) YYYYMMDDNN
3H ; refresh – Slave의 업데이트 여부 검사 간격
15M ; retry – Slave의 업데이트 여부 검사 실패 시 재시도 간격
1W ; expiry – Slave가 Master 서버 접속을 실패하면 존 정보 파기
1D ) ; neg. TTL - 존재하지 않는 호스트에 대한 존 정보 보관 기간
IN NS ns1.cslab.kr
IN NS ns2.cslab.kr
IN A 127.0.0.1
www IN A 127.0.0.1
mail IN A 127.0.0.1
mysql IN A 192.168.0.2 // 내부 네트워크 전용
oracle IN A 192.168.0.3 // 내부 네트워크 전용
(2) 존 정보(external) 설정
•/etc/named/chroot/var/named/cslab.kr.external.zone.db
$TTL 86400
@ IN SOA ns1.cslab.kr domain.cslab.kr (
2008102601 ; serial - 1 ~ 24,294,967,295(10자리) YYYYMMDDNN
3H ; refresh – Slave의 업데이트 여부 검사 간격
15M ; retry – Slave의 업데이트 여부 검사 실패 시 재시도 간격
1W ; expiry – Slave가 Master 서버 접속을 실패하면 존 정보 파기
1D ) ; neg. TTL - 존재하지 않는 호스트에 대한 존 정보 보관 기간
IN NS ns1.cslab.kr
IN NS ns2.cslab.kr
IN A 127.0.0.1
www IN A 127.0.0.1
mail IN A 127.0.0.1
IN MX 10 mail.cslab.kr
IN TXT “v=spf1 a mx ip4:127.0.0.1 ~all”
(3) RNDC (Name Server Control Utility)
•rndc 명령을 통해 DNS 제어가 가능하며, 기본적으로 953번 포트를 사용
•DNS로 제어 메시지를 보내려면 인증 암호키가 필요
◦rndc-confgen 을 실행하여, 인증 암호키 및 환경 파일 생성
◦/var/named/chroot/etc/rndc.conf 을 생성 후 내용 복사
# /usr/sbin/rndc-confgen

key "rndckey" {
algorithm hmac-md5;
secret "xxxxxxxxxxxx";
};
options {
default-key "rndckey";
default-server 127.0.0.1;
default-port 953;
};
•named.conf 파일에 rndc 설정 추가
key "rndckey" {
algorithm hmac-md5;
secret “xxxxxxxxxxxx ";
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndckey"; };
};

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

4. DNS 운영 명령어
(1) 기본 명령어
•설정 파일 이상유무 확인
# named-checkconf named.conf
•서비스 시작
# service named start
•서비스 재시작
# service named restart
•설정 변경 사항 반영
# service named reload
•서비스 종료
# service named stop
•Bind 버전 확인
# named –v
•BIND 로그 모니터링
# tail -f /var/log/messages
(2) 도메인 존 설정 정보 확인
•.kr 도메인 확인
# dig @g.dns.kr. cslab.kr any
•.com/.net 도메인 확인
# dig @a.gtld-servers.net. cslab.net any
•.asia 도메인 확인
# dig @a0.asia.afilias-nst.info. relief.asia any

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

5. BIND 보안설정
(1) TSIG (Transaction Signature)
* TSIG는 shared secret key와 단방향 hash 함수를 이용해 DNS 응답/업데이트 메시지를 인증
* TSIG 설정 시 DNS의 Additional Section에 TSIG 레코드가 추가됨

TSIG Key 생성
•dnssec-keygen 프로그램으로 키 생성
◦-a hmac-md5 : 알고리즘 종류
◦-b 128 : 키 길이(128 bit) / 최대값 : 512 bits
◦-n HOST : 키 종류(HOST)
# /usr/sbin/dnssec-keygen –a hmac-md5 –b 128 –n HOST cslab.kr.
•생성 파일 확인
◦아래 2개의 파일이 생성됨(숫자 157은 DNSSEC 알고리즘(HMAC-MD5) 번호/숫자 XXXXX 키의 지문)
◦K{name}.+157.+{random}.key
Kcslab.kr.+157+XXXXX.key
Kcslab.kr.+157+XXXXX.private
•named.conf 수정
zone “cslab.kr" {
type master;
file “cslab.kr.external.zone.db";
// TSIG Key Based Access Control
allow-update { key key.cslab.kr.; };
};

key "key.cslab.kr" {
algorithm hmac-md5;
secret "XXXXXXXXXXXXXXXXXXXX";
};
•key 부분은 별도로 /var/named/chroot/etc/dns.keys.conf 로 저장하여, named.conf 에 include 구문으로 삽입 권장
include "/etc/dns.keys.conf";
(2) 기타 보안 설정
•BIND 버전 정보 숨기기
named.conf 설정 추가

options { version "DNS";
};
rndc reload 후 dig 명령어로 확인

# dig version.bind txt chaos
•allow-query : 존 쿼리 제한
•allow-transfer : 존 전송 제한
•allow-update : 존 업데이트 제한
zone “cslab.kr" {
type master;
file “cslab.kr.external.zone.db";
allow-query { 127.0.0.1; 192.168.0.0/24; };
allow-transfer { 127.0.0.1; 192.168.0.0/24; 164.125.36.31; };
allow-update { 127.0.0.1; 192.168.0.0/24; 164.125.36.31; };
};


reference : http://bind.cslab.kr/#toc0