본문 바로가기

네임서버

캐시 DNS 서버 - DNSSEC 서명 검증 기능 설정

반응형

캐시 DNS 서버 - DNSSEC 서명 검증 기능 설정

BIND 설정 파일 수정(/etc/named.conf)

vim /etc/named.conf

아래 옵션을 options 블록 내부에 추가합니다.

options {
        ...
        // ✅ DNSSEC 기능 활성화
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        // ✅ 신뢰 anchor 및 key 경로 설정
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";

        ...
};

// ✅ Root Trust Anchor 키 포함
include "/etc/named.root.key";
참고
dnssec-validation yes : DNS 응답의 서명 검증 활성화
dnssec-enable yes : DNSSEC 관련 쿼리 처리 허용
dnssec-lookaside auto : DLV(DNSSEC Lookaside Validation) 자동 참조
BIND 9.16 이상에서는 dnssec-lookaside 옵션이 deprecated 되었으므로 auto 사용만 권장

Managed Keys 디렉터리 생성

mkdir -p /var/named/dynamic
chown named:named /var/named/dynamic
chmod 750 /var/named/dynamic

디렉터리 권한은 반드시 named 계정에 맞게 설정해야 합니다. 그렇지 않으면 키 갱신 시 permission denied 오류 발생 가능.

키 파일 구성

(1) /etc/named.iscdlv.key

cat > /etc/named.iscdlv.key << 'EOF'
/* $Id: bind.keys,v 1.7 2011-01-03 23:45:07 each Exp $ */
managed-keys {
  # ISC DLV key (참고용, deprecated)
  dlv.isc.org. initial-key 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2
  brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+
  1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5
  ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk
  Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM
  QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt
  TDN0YUuWrBNh";

  # Root Zone Key
  . initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
  FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
  bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
  X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
  W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
  Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
  QxA+Uk1ihz0=";
};
EOF

(2) /etc/named.root.key

cat > /etc/named.root.key << 'EOF'
managed-keys {
  . initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
  FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
  bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
  X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
  W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
  Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
  QxA+Uk1ihz0=";
};
EOF
728x90

BIND 서비스 재시작 및 상태 확인

systemctl restart named
systemctl enable named
systemctl status named

DNSSEC 서명 검증 테스트

정상적으로 설정되었는지 dig 명령으로 확인합니다.

dig @127.0.0.1 kisa.or.kr +dnssec +multi

정상 결과 예시

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63811
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
  • flags 항목에 ad (Authenticated Data) 가 포함되어 있으면 DNSSEC 검증 성공.
  • 응답에 RRSIG 레코드가 함께 표시되면 서명된 레코드임을 의미.

비정상 예시

;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL
  • 루트 키 불일치, 시스템 시간 오류, 또는 managed-keys 접근권한 문제일 가능성.

간단 점검 자동화

DNSSEC 검증이 동작 중인지 1시간마다 확인하는 스크립트를 추가할 수도 있습니다.

#!/bin/bash
LOGFILE="/var/log/dnssec_check.log"
RESULT=$(dig @127.0.0.1 kisa.or.kr +dnssec | grep flags | grep ad)
if [ -n "$RESULT" ]; then
  echo "$(date): DNSSEC OK" >> $LOGFILE
else
  echo "$(date): DNSSEC FAIL" >> $LOGFILE
fi

크론 등록

0 * * * * /opt/scripts/dnssec_check.sh >/dev/null 2>&1

 

참고URL

- https://www.isc.org/bind-keys

 

728x90
반응형