CentOS에서 네임서버 쉽게 운영하기 2008. 10. 26 김재연
목 차 DNS 소프트웨어 설치 기본 환경 설정 존 정보 설정 DNS 운영 보안 설정 동적 업데이트 DNS 관리 프로그램 굴림
DNS 소프트웨어 설치 (1) 설치 환경 : CentOS 5.2 설치 프로그램 : 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
DNS 소프트웨어 설치 (2) 기본으로 chroot 환경으로 설치됨 설정 파일은 수동으로 설정해야 함 “/var/named/chroot/” 디렉토리를 “/” 로 인식 chroot 상위 디렉토리에 대한 허가권을 가질 수 없음 설정 파일은 수동으로 설정해야 함 제공되는 샘플 설정 파일 사용 /usr/share/doc/bind-9.3.4/sample/
DNS 소프트웨어 설정 기본 경로 샘플 파일 경로 모든 샘플 파일을 기본 경로로 복사 환경 파일 : /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/
기본 환경 설정 (named.conf) Options View (internal) View (external) Key
named.conf (1) – 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; };
named.conf (2) – logging 기본 로그 옵션 설정 logging { channel default_debug { file "data/named.run"; severity dynamic; }; category default { default_syslog; default_debug; }; // 기본 설정 category unmatched { null; }; // 기본 설정 (로그를 남기지 않음)
named.conf (3) – 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 존 정보 };
named.conf (4) – 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"; };
named.conf (5) – 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"; };
존 정보(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 // 내부 네트워크 전용
존 정보(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”
RNDC (Name Server Control Utility) (1) 환경 파일 생성 (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;
RNDC (Name Server Control Utility) (2) 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"; };
DNS 운영 명령어 (1) 설정 파일 이상유무 확인 # named-checkconf named.conf 서비스 시작 # service named start/ 서비스 재시작 # service named restart 설정 변경 사항 반영 # service named reload 서비스 종료 # service named stop
DNS 운영 명령어 (2) Bind 버전 확인 # named –v BIND 로그 모니터링 # tail -f /var/log/messages Tail –f
DNS 운영 명령어 (3) .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
BIND 보안설정 TSIG (Transaction Signature) TSIG는 shared secret key와 단방향 hash 함수를 이용해 DNS 응답/업데이트 메시지를 인증 TSIG 설정 시 DNS의 Additional Section에 TSIG 레코드가 추가됨
BIND 보안설정 (TSIG Key 생성) (1) dnssec-keygen 프로그램으로 키 생성 (2) 생성 파일 확인 -a hmac-md5 : 알고리즘 종류 -b 128 : 키 길이(128 bit) / 최대값 : 512 bits -n HOST : 키 종류 (2) 생성 파일 확인 아래 2개의 파일이 생성됨(숫자 157은 DNSSEC 알고리즘(HMAC-MD5) 번호/숫자 XXXXX 키의 지문) K{name}.+157.+{random}.key # /usr/sbin/dnssec-keygen –a hmac-md5 –b 128 –n HOST cslab.kr. Kcslab.kr.+157+XXXXX.key Kcslab.kr.+157+XXXXX.private
BIND 보안설정 (TSIG 설정) named.conf 수정 key 부분은 별도로 /var/named/chroot/etc/dns.keys.conf 로 저장하여, named.conf 에 include 구문으로 삽입 권장 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"; }; include "/etc/dns.keys.conf";
BIND 보안설정 (기타) BIND 버전 정보 숨기기 named.conf 설정 추가 rndc reload 후 dig 명령어로 확인 options { version "DNS"; }; # dig version.bind txt chaos
BIND 보안설정 (기타) 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-transfer { none; }; allow-update { 127.0.0.1; 192.168.0.0/24; 164.125.36.31; }; //allow-update { none; }; // TSIG Key Based Access Control //allow-update { key key.cslab.kr.; }; };
동적 업데이트 클라이언트에서 DNS 레코드 변경이 필요한 경우 DNS 서버에 동적으로 레코드 추가/삭제 기능 제공 동적 업데이트 발생 시 serial 번호를 증가시키고 슬레이브 DNS에 notify를 보냄 사용방법 (-d : 디버그 모드) # nsupdate –d update add dynamic.cslab.kr. 60 A 192.168.0.1 show send TSIG 서명된 동적 업데이트 (XXXX : 키 문자열) # nsupdate -d -y key.cslab.kr.:XXXXXXXXXXXXXXXX
DNS 관리 프로그램 웹 기반 DNS 동적 업데이트 웹 페이지에서 쉽게 존 정보 수정 가능 데모 : http://dnsupdate.cslab.net/
감사합니다. 참고 홈페이지 http://bind.cslab.kr BIND 설치 설명서 및 설정 예제 파일 제공