권한 DNS서버의 도메인 존 DNSSEC 서명적용 및 네임서버 반영절차
BIND DNS 네임서버에서 도메인 존에 대한 DNSSEC 서명 적용절차는 아래 그림의 5개 절차 순서에 따라 이루어집니다.
도메인 존파일 작성
기존의 도메인 존파일 또는 신규 도메인 존 파일을 작성합니다. 이 경우, 작성하는 존 파일의 내용은 기존에 작성하던 형태 그대로의 일반적 존 파일 내용으로 작성합니다.
존의 Key 생성
DNSSEC 서명적용 대상 도메인 존의 서명용 키를 생성하는 절차입니다. 존 서명키(ZSK)와 키 서명키(KSK)를 각각 생성합니다.
여기서는 test.go.kr 도메인 존을 사례로 하여 예시합니다.
test.go.kr 존의 존 서명키(ZSK)를 다음의 명령으로 생성합니다.
dnssec-keygen -a NSEC3RSASHA1 -r /dev/urandom -b 1024 -n ZONE test.go.kr.
test.go.kr 존의 키 서명키(KSK)는 다음의 명령으로 생성합니다.
dnssec-keygen -a NSEC3RSASHA1 -r /dev/urandom -b 2048 -n ZONE -f KSK test.go.kr.
서명생성 작업을 수행한 디렉토리에 아래와 같이 test.go.kr 존의 존 서명키(ZSK), 키 서명키(KSK)가 각각 파일로 생성됩니다.
서명키 파일 목록입니다.
|
|
존 서명키(ZSK) |
- Ktest.go.kr.+007+16770.key - Ktest.go.kr.+007+16770.private |
키 서명키(KSK) |
- Ktest.go.kr.+007+28394.key - Ktest.go.kr.+007+28394.private |
Public Key 존 반영
test.go.kr의 공개키(public key)는 키 서명키(KSK)와 존 서명키(ZSK) 각각에 해당하는 DNSKEY 리소스 레코드를 도메인 존 파일에 반영 설정하는 절차입니다.
test.go.kr의 존 파일 test.go.kr.zone을 열어서 아래와 같이 존 서명키(ZSK), 키 서명키(KSK) 각각의 공개키 파일(*.key)을 존 파일에 포함시키는 설정을 합니다.
$INCLUDE Ktest.go.kr.+007+16770.key
$INCLUDE Ktest.go.kr.+007+28394.key
존 서명
test.go.kr의 기본 존 파일 test.go.kr.zone을 대상으로 DNSSEC 서명처리를 수행하는 절차입니다.
여기서는 서명키들이 /var/named/key에 저장되어 있다고 가정합니다.
아래와 같이 서명처리 명령을 사용하여 서명 처리합니다.
dnssec-signzone -S –K /var/named/key -3 96e920 -o test.go.kr. test.go.kr.zone
서명처리에 의해 "서명된 존 파일"은 test.go.kr.zone.signed 라는 이름으로 생성됩니다.
서명처리 과정에서 dnssec-signzone 유틸리티는 DS 리소스 레코드 데이터가 저장된 파일을 "dsset-test.go.kr."의 파일명으로 생성합니다. 이 파일의 DS 리소스 레코드는 부모 도메인 존의 관리자에게 송부해서 부모 도메인 존에 설정하기 위한 용도로 사용됩니다.
네임서버에 존 반영
test.go.kr의 서명된 존 파일 test.go.kr.zone.signed 를 네임서버에 반영하고 설정하는 절차입니다.
네임서버 named.conf 파일에 아래와 같은 내용으로 설정하여 네임서버 구동 등을 통해 네임서버에 반영처리 합니다.
options {
recursion no;
dnssec-enable yes;
};
zone "test.go.kr" IN {
type master;
file "dnssec/test.go.kr.zone.signed";
key-directory "key";
auto-dnssec maintain;
update-policy local;
};
캐시 DNS서버의 DNSSEC 서명검증 기능 설정 절차
캐시 DNS서버에 DNSSEC 서명검증 기능 활성화 및 신뢰앵커 데이터 설정절차입니다. 이 설정을 통해 네임서버는 DNSSEC 서명검증을 수행하는 캐시 DNS서버로 동작합니다.
캐시 DNS서버의 named.conf 파일에 아래의 2가지 사항을 설정해 줍니다.
먼저, named.conf 파일에 DNSSEC 서명검증 기능을 활성화 설정합니다.
options {
dnssec-enable yes;
dnssec-validation yes; # enable DNSSEC validation
};
named.conf 파일에 DNSSEC 서명검증을 위한 신뢰앵커 데이터를 아래와 같이 추가 설정합니다.
managed-keys {
"." initial-key 257 3 8
"AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
………………
};
managed-keys 옵션에 설정되는 실제 신뢰앵커 데이터는 아래와 같이 dig을 사용하여 키 서명키(KSK)의 DNSKEY인 flag값이 257인 DNSKEY 리소스 레코드 값을 복사하여 설정합니다.
$ dig @f.root-servers.net . dnskey +multi +norec
; <<>> DiG 9.7.0-P2-RedHat-9.7.0-10.P2.el5_8.1 <<>> @f.root-servers.net . dnskey +multi +norec
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32267
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;. IN DNSKEY
;; ANSWER SECTION:
. 172800 IN DNSKEY 256 3 8 (
AwEAAbW4qUZUxSRqUntM9u0pvmkqRB9Z+WRPghllsekd
gp8ksT5bwRBE3xwVWJJpJgVYGvFGgLIutrGyZDJVLQX+
tu+qe6HJbA8XRZsL2aA6e4MZeD4TOUlIH/cVlof3y4gF
ibjwzuuondVku9ia2MSRYnrBl+LMSRftBkVa4OvS+dij
) ; key id = 50398
. 172800 IN DNSKEY 257 3 8 (
AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
) ; key id = 19036
;; Query time: 3 msec
;; SERVER: 192.5.5.241#53(192.5.5.241)
;; WHEN: Wed Aug 8 14:57:02 2012
;; MSG SIZE rcvd: 439
[dnsdev@cacti ~]$