메뉴 닫기

DNSSEC 설정하기

1. DNSSEC 이란?

-DNSSEC은 공개키 암호화방식의 전자서명 메커니즘을 DNS 체계에 도입하여 적용하는 방법입니다.

-DNS의 데이터 위변조 취약점을 보강하여 보안안전성을 강화하였습니다.

2. DNSSEC 설정방법

1) 디렉토리 생성하기
mkdir /var/named/key

2) 암호화 키 생성하기
cd /var/named/key

[KSK키 생성]
dnssec-keygen -r /dev/urandom -a NSEC3RSASHA1 -b 2048 -n ZONE -f KSK [도메인명]

아래와 같은 공개키와 사설키 2개 파일이 생성됩니다.

K<zonename>+<algorithm>+<id>.key
K<zonename>+<algorithm>+<id>.private

[ZSK키 생성]
dnssec-keygen -r /dev/urandom -a NSEC3RSASHA1 -b 1024 -n ZONE [도메인명]

아래와 같은 공개키와 사설키 2개 파일이 생성됩니다.
K<zonename>+<algorithm>+<id>.key
K<zonename>+<algorithm>+<id>.private

*참고

서명 알고리즘 : 서명에 사용된 공개키 암호화 방식 알고리즘 코드

(5: RSASHA1, 7: NSEC3RSASHA1 – BIND v9.6 이상부터 NSEC3RSASHA1 지원)

보안 강화를 위해서는 /dev/urandom 대신에 /dev/random 사용이 권장됩니다.

/dev/random은 난수 발생에 필요한 entropy가 충분히 모아진 후 난수를 생성합니다.

——————————————————————————————————————————————-

*Zone Signing Key(ZSK)
– 존의 모든 RR를 서명한다.

*RR
– 리소스 레코드

*DNSKEY
– 도메인 존의 공개키 데이터를 저장하여 제공하기 위한 RR
– 존은 개인키와 공개키 쌍을 가지고 있으며 개인키는 안전한 장소에 따로 보관되며, 개인키와 쌍을 이루는 공개키는 DNSKEY RR 의 형태로 명시되어 질의응답을 통해 배포됨

*RRSIG
– 존 안에 있는 RRSet에 대한 개인 키의 전자서명한 결과값을 갖는 RR
– RRSIG는 DNS 응답 메시지에 전자서명 대상 RR과 함께 포함되어 전달

*NSEC / NSEC3
– DNS 데이터 부재 인증을 위해 정의된 RR
– 특정 리소스 레코드가 존재하지 않음을 전자 서명을 통해 인증 할 수 있는 메커니즘을 제공
– NSEC의 존목록화 문제를 해결하기 위해 NSEC3 레코드 추가 정의됨

——————————————————————————————————————————————-
[존 파일 수정]
vi /var/named/test.zone 파일 가장 아래에 추가해줍니다.
$INCLUDE /var/named/key/KSK값파일.key
$INCLUDE /var/named/key/ZSK값파일.key

[존 파일 서명]
cd /var/named
dnssec-signzone -r /dev/urandom -K /var/named/key -o [도메인명] -S [존 파일명]

위와 같은 명령어 실행 시 RRSIG, NSEC,  DNSKEY RR이 추가되어 서명된 존파일과 보안위임 설정용 DS RR 파일(dsset-도메인명.)이 생성됩니다.

-S 옵션을 줄 경우 지정한 key디렉토리(/var/named/key)에서 키 파일들을 자동으로 읽어와서 서명을 하게 됩니다.

[설정파일 수정]
vi /etc/named.rfc1912.zones

zone “도메인명” IN {
type master;
//file “존 파일명”;                  <— 아래줄과 같이 “존 파일명.signed” 으로 변경
file “존 파일명.signed”;
allow-update { none; };
};

[DNSSEC 설정 적용]
데몬을 재시작 해줍니다.
/etc/init.d/named restart

[dig명령어로 질의 테스트]
dig @127.0.0.1 127.0.0.1 [도메인명] soa +dnssec

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다