|
Table of Contents
|
DNSSEC 설치 설명서
- 작성자: 김재연

- 변경일자
- 2012년 1월 3일 (Ubuntu 환경에 맞추어 내용 수정)
- 2010년 6월 19일 (CentOS 환경 기준으로 작성)
- 기본적인 BIND 설치/운영 방법을 우선 숙지 하시기 바랍니다. (참조 http://bind.cslab.kr/operation)
BIND 소스 컴파일 설치
OpenSSL 설치
wget http://www.openssl.org/source/openssl-1.0.0f.tar.gz
tar xvzf openssl-1.0.0f.tar.gz
cd openssl-1.0.0a
./config
make
make test
make install
apt-get install openssl libssl-dev
named 이용자 계정 및 그룹 생성
groupadd -g 53 bind
useradd -c "BIND Admin" -d /dev/null -g bind -u 53 -s /usr/sbin/nologin bind
BIND 설치 디렉토리 설정
mkdir -m 750 /BIND
mkdir -m 750 /BIND/data
mkdir -m 750 /BIND/etc
mkdir -m 750 /BIND/src
mkdir -m 750 /BIND/var
mkdir -m 750 /BIND/var/key
chown bind:bind /BIND
소스코드 다운로드 및 컴파일
cd /BIND/src
wget http://ftp.isc.org/isc/bind9/9.8.1-P1/bind-9.8.1-P1.tar.gz
tar xvzf bind-9.8.1-P1.tar.gz
cd /BIND/src/bind-9.8.1-P1
./configure --enable-threads --localstatedir=/BIND/var --sysconfdir=/BIND/etc
make
make test
make install
chown bind:bind -R /BIND
rndc 설정 파일 생성
rndc-confgen -a
환경 설정 파일 생성
/BIND/etc/ named.conf 파일 등 저장
/BIND/var/ 존 파일 등 저장
/BIND/var/key 키 파일 저장
자동 구동 스크립트
/etc/init.d/named 라는 이름으로 아래 내용 저장
#!/bin/sh
# /etc/init.d/named
# description: BIND
# Start/Stop/Status/Reload/Restart BIND
# processname: named
case $1 in
'start' )
echo "Starting " $0
/usr/local/sbin/named -4 -u bind
;;
'stop' )
echo "Stopping " $0
/usr/local/sbin/rndc stop
;;
'status' )
/usr/local/sbin/rndc status
;;
'reload' )
/usr/local/sbin/rndc reload
;;
'restart' )
echo "Restarting " $0
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|status|reload|restart}"
exit 1
;;
esac
exit 0
chmod 744 /etc/init.d/named
chown root:root /etc/init.d/named
update-rc.d named defaults
BIND 실행/중지/재시작
- 실행
- /usr/local/bind/sbin/named -4 -u bind (-4 옵션 사용 시 IPv4만 지원한다. IPv6를 전혀 사용하지 않는 경우 지정한다.)
- service named start
- 중지
- service named stop
- 재시작
- service named restart
DNSSEC 설정 및 적용
각각의 도메인 존에 대해 Zone Signing Key (ZSK)와 Key Signing Key (KSK)를 생성한다.
- Zone Signing Key (ZSK)
- 존의 모든 RR 를 서명한다.
- Key Signing Key (KSK)
- ZSK를 서명하는데 사용한다.
- 존의 Secure Entry Point (SEP) 키로 사용된다.
Key-Signing Key (KSK) 생성
dnssec-keygen -r /dev/urandom -a NSEC3RSASHA1 -b 2048 -n ZONE -f KSK [zonename]
예제)
dnssec-keygen -r /dev/urandom -a NSEC3RSASHA1 -b 1024 -n ZONE -f KSK dnslab.us
- 참고
- 보안 강화를 위해서는 /dev/urandom 대신에 /dev/random 사용이 권장된다. /dev/random은 난수 발생에 필요한 entropy가 충분히 모아진 후 난수를 생성한다.
- BIND v9.6 이상부터 NSEC3RSASHA1 지원
아래와 같은 공개키와 사설키 2개 파일이 생성된다.
K<zonename>+<algorithm>+<id>.key
K<zonename>+<algorithm>+<id>.private
서명 알고리즘(Algorithm): 서명에 사용된 공개키 암호화 방식 알고리즘 코드 (5: RSASHA1, 7: NSEC3RSASHA1)
예제)
Kdnslab.us.+007+27508.key
Kdnslab.us.+007+27508.private
Zone-Signing Key (ZSK) 생성
dnsseckeygen -r /dev/urandom -a NSEC3RSASHA1 -b 1024 -n ZONE [zonename]
예제)
dnssec-keygen -r /dev/urandom -a NSEC3RSASHA1 -b 1024 -n ZONE dnslab.us
아래와 같은 2개 파일이 생성된다.
K<zonename>+<alg>+<id>.key
K<zonename>+<alg>+<id>.private
예제)
Kdnslab.us.+007+06612.key
Kdnslab.us.+007+06612.private
타이밍 옵션) 필요에 따라 설정한다.
-P date/[+-]offset/none: set key publication date (default: now)
-A date/[+-]offset/none: set key activation date (default: now)
-R date/[+-]offset/none: set key revocation date
-I date/[+-]offset/none: set key inactivation date
-D date/[+-]offset/none: set key deletion date
-G: generate key only; do not set -P or -A
-C: generate a backward-compatible key, omitting all dates
-S <key>: generate a successor to an existing key
-i <interval>: prepublication interval for successor key (default: 30 days)
서명 파일을 Key 디렉토리로 이동
mv /BIND/var/*.key /BIND/var/key
mv /BIND/var/*.private /BIND/var/key
존 파일에 KSK와 ZSK 공개 키 추가
존 파일 맨 끝에 $include 구문을 추가하거나 또는 cat 명령어를 실행하여 존 파일 맨 끝에 추가
- $INCLUDE 사용
; zone-signing key
$INCLUDE /BIND/var/key/Kcslab.net.+007+33017.key
; key-signing key
$INCLUDE /BIND/var/key/Kcslab.net.+007+48570.key
- cat 명령 사용
cat K<zonename>+*.key >> zonefile
존 파일 서명
dnssec-signzone -l [lookasidezone] -r /dev/urandom [-o zonename] [-N INCREMENT] [-k KSKfile] zonefile [ZSKfile]
예제)
서명 명령어 실행 결과 RRSIG, NSEC & DNSKEY RR이 추가된 서명된 존 파일과 보안 위임 설정용 DS RR 파일(dsset-dnslab.us.)이 생성된다.
-S 옵션을 줄 경우 지정한 Key 디렉토리 (/BIND/var/key)에서 자동으로 키 파일들을 자동으로 읽어와서 서명을 하게 된다.
# dnssec-signzone -r /dev/urandom -K /BIND/var/key -o dnslab.us -S dnslab.us.zone.db
Verifying the zone using the following algorithms: RSASHA1.
Zone signing complete:
Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 stand-by, 0 revoked
dnslab.us.zone.db.signed
named.conf 설정 변경
zonefile 파일 이름을 zonefile.signed 으로 변경한다.
; 변경 전
zone "dnslab.us" IN {
file "dnslab.us.zone.db";
};
; 변경 후
zone "dnslab.us" IN {
file "dnslab.us.zone.db.signed";
};
DNSEC 설정 적용
service named restart
dig 프로그램으로 DNSSEC 적용 내용 확인
dig @localhost dnslab.us soa +dnssec +multiline
레지스트라 설정 (Godaddy.com 기준)
레지스트라에 도메인 존 DNSKEY 레코드를 업로드 해야 한다. (KSK 공개키)
/BIND/var/dsset-cslab.net. 파일을 열어 첫번째 라인을 복사한다.
- 예제
dnslab.us. IN DS 48570 7 1 6C4A7E687E2B4BD8C149475D9EBE3E0B111D6F73
- Godaddy에 업로드 전에 TTL 값(3600)을 추가해 준다.
dnslab.us. 3600 IN DS 48570 7 1 6C4A7E687E2B4BD8C149475D9EBE3E0B111D6F73
- 수정한 텍스트를 Godaddy 관리툴에 있는 Add DS Records 메뉴에서 추가한다.
DNSSEC 서명 검증 작동 여부 확인
DNSSEC 작동 여부 확인을 위해서는 DNSSEC 기능이 활성화된 Recursive DNS로 질의를 해야만 한다.
Firrefox (불여우) 웹브라우저에서 DNSSEC 적용 도메인 작동 여부 확인
- DNSSEC Validator 설치 https://addons.mozilla.org/en-US/firefox/addon/dnssec-validator/
- 작동 확인

초록색 바탕 열쇠 아이콘이 주소창에 표시되면 DNSSEC 서명 검증이 성공적으로 완료된 것을 의미한다.
(참고) DNSSEC 지원 도메인 목록
icann.org
afilias.info
dnsviz.net
cslab.net
- DNSSEC Resolver 설정
Addon 설정에서 DNSSEC을 지원하는 Resolver 를 지정해 주어야 한다.
(참고) DNSSEC Validating Resolver 목록
149.20.64.20 (OARC)
149.20.64.21 (OARC)
1.18.118.118 (한국인터넷진흥원)