NSEC3 레코드 with BIND 9

NSEC3 레코드는 DNSSEC에서 "부재"를 의미하는 레코드입니다.



즉, 클라이언트가 질의한 도메인이 자신의 Zone에 있으나 그 내용이 없을 경우,
"질의하신 내용은 없습니다"를 전자서명하기 위한 레코드입니다.

특정 RR이 없음에도 불구하고 공격자가 poisoning을 통해 있는 RR 인 것처럼 위장할 수 있기에 만들어졌습니다.


본래 NSEC 레코드가 사용이 되었으나,
NSEC 레코드는 일부 도메인과 RR 목록이 hashing 없이 노출되는 문제가 있어
이를 보완한 NSEC3 레코드 사용을 권장합니다.

NSEC3 레코드에서는 RR 목록은 나열이 되나,
도메인이 Hash된 채로 나타나기 때문에 문제를 어느 정도 고쳤다고 볼 수 있습니다.


BIND9 기준, NSEC3 레코드는 rndc 유틸리티를 사용하여 구축할 수 있습니다.
rndc 설정이 되어 있다면 rndc 설정 부분은 패스하시면 됩니다.

(주의) 다음 절차는 DNSSEC 이 구축이 완료된 상태에서 진행해야 합니다.



rndc Key를 생성합니다.

1
sudo rndc-confgen -a
cs



정상적으로 생성되었다면, /etc/rndc.key 에 다음과 같은 내용이 생성되어야 합니다.




이후 /etc/named.conf에 다음 내용을 추가합니다.

include "/etc/rndc.key";
controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

rndc는 가급적 외부에 노출하지 않는 것이 좋으므로,127.0.0.1에서만 허용합니다.



/etc/named.conf 수정 사항을 반영합니다

1
sudo service named restart
cs



만약 기존에 rndc 설정을 해두신 분은,
/etc/named.conf의 최신 내용을 rndc에 반영하시면 됩니다.

1
sudo rndc reload
cs



rndc 유틸리티에 Key 파일을 로딩합니다.

1
sudo rndc loadkeys example.com
cs



그 후 NSEC3 서명을 적용합니다.
1
sudo rndc signing -nsec3param 1 0 5 salt example.com
cs

1은 SHA1 알고리즘 사용, 5는 도메인을 salt 값으로 Hash를  총 5번 한다는 의미입니다.


salt 값은 임의로 선택하시면 됩니다.
저는 salt 값으로 20자가 넘어가는 값을 씁니다.


BIND9 로그 파일에 이런 내용이 적혀있으면 성공입니다.


NSEC3이 반영되어 있는 도메인에 없는 RR을 조회하면,
이렇게 NSEC3 레코드가 반환이 됩니다.

dig 커맨드로,
1
dig asdfasdfasdfasdf.해당도메인 +dnssec @네임서버
cs
조회시, 다음과 같이 NSEC3 레코드가 확인이 되면 정상입니다.

Cache DNS가 아닌 Authoritative DNS 서버에다가 질의를 해야 합니다.





[팁]Master-Slave 구성시 Slave 서버에서 할 일

없습니다.

DNSSEC 서명은 Master 서버에서 이루어지고, Slave는 서명된 Zone을 받기만 하면 됩니다.


[팁] Zone 수동 서명시

inling-signing 미적용(BIND9.9 미만 등)시 Zone 서명을 수동으로 해야 되는데,
NSEC3 적용시 Zone 서명시마다 NSEC3도 서명해야 합니다.

스크립트 사용을 추천합니다. 제가 Zone 수동 서명시 사용하는 스크립트를 공개합니다!
(제 개인도메인 dwer.kr는 DNSSEC, NSEC3 모두 적용되어 있습니다)

1
2
3
4
5
6
sudo service named restart
sudo rndc reload
sudo rndc loadkeys dwer.kr
sudo rndc signing -nsec3param 1 0 20 서명값 dwer.kr
sudo dnssec-signzone --K DNSSEC_KEY파일_위치 -3 salt값 -o dwer.kr. Zone파일위치
sudo service named reload
cs

댓글