dnssec 구성
--Domain Zone 파일 생성--
기존의 도메인 zone 파일이 있어야 한다.
--zone의 Key 생성
DNSSEC 서명적용 대상 도메인 zone의 서명용 키를 생성합니다.
zone 서명키(ZSK)와 키 서명키(KSK)를 각각 생성합니다.
이 문서는 infosec.local 도메인 zone에 대한 예제입니다.
(참고: 알고리듬의 종류
RSAMD5, RSASHA1, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448 )
Step 1] infosec.local 의 zone 서명키(ZSK)를 생성합니다.
# mkdir /var/named/key ; cd /var/named/key
# dnssec-keygen -a NSEC3RSASHA1 -r /dev/urandom -b 1024 -n ZONE infosec.local.
(-a 알고리듬, -r 랜덤값 소스 설정, -b 키 비트, -n 키의 종류)
Generating key pair............++++++ ...........++++++
Kinfosec.local.+007+07172
Step 2] infosec.local zone의 키 서명키(KSK)를 생성합니다.
# dnssec-keygen -a NSEC3RSASHA1 -r /dev/urandom -b 2048 -n ZONE -f KSK infosec.local.
Generating key pair...........................................................................+++ ...................................................................................................+++
Kinfosec.local.+007+62991
Step 3]Public Key zone 반영
infosec.local의 공개키(public key)는 키 서명키(KSK)와 zone 서명키(ZSK) 각각에 해당하는 DNSKEY 리소스 레코드를 도메인 zone 파일에 반영 설정하는 절차입니다. infosec.local의 zone 파일 infosec.local.db을 열어서 아래와 같이 zone 서명키(ZSK), 키 서명키(KSK) 각각의 공개키 파일(*.key)을 zone 파일에 포함시키는 설정을 합니다.
#vi /var/named/infosec.local.db
$INCLUDE /var/named/key/Kinfosec.local.+007+07172.key
$INCLUDE /var/named/key/Kinfosec.local.+007+62991.key
Step 4]zone 서명
; infosec.local의 기본 Zone 파일 infosec.local.db을 대상으로 DNSSEC 서명처리를 수행하는 절차입니다.
여기서는 서명키들이 /var/named/key에 저장되어 있다고 가정합니다. 서명이 완료되면 /var/named 디렉터리에 infosec.local.db.signed 라는 이름으로 생성됩니다.
# dnssec-signzone -S -K /var/named/key -3 96e920 -o infosec.local /var/named/infosec.local.db
(-3 ; NSEC3-capable algorithm)
서명처리 과정에서 dnssec-signzone 유틸리티는 DS 리소스 레코드 데이터가 저장된 파일을 "dsset-infosec.local."의 파일명으로 생성합니다. 이 파일의 DS 리소스 레코드는 부모 도메인 zone의 관리자에게 송부해서 부모 도메인 zone에 설정하기 위한 용도로 사용됩니다.
Step 5]네임서버에 zone 반영
infosec.local의 서명된 zone 파일 infosec.local.db.signed 를 네임서버에 반영하고 설정하는 절차입니다.
네임서버 named.conf 파일에 아래와 같은 내용으로 설정하여 네임서버 구동 등을 통해 네임서버에 반영처리 합니다.
#vi /etc/named.conf
options {
recursion yes;
dnssec-enable yes;
};
zone "infosec.local" IN {
type master;
file "infosec.local.db.signed";
key-directory "key";
auto-dnssec maintain;
update-policy local;
};
참조 : https://krnic.or.kr/jsp/resources/dns/dnssecInfo/dnssecBind.jsp
===아래의 사항은 연구 중 입니다.===
# vi /var/named/zonesigner.sh
#!/bin/sh
PDIR="/usr/bin"
ZONEDIR="/var/named" #Location of your zone file
ZONE=$1
ZONEFILE=$2
DNSSERVICE="named"
cd $ZONEDIR
SERIAL="/usr/sbin/named-checkzone $ZONE $ZONEFILE" | egrep -ho '[0-9]{10}'
sed -i "s/'$SERIAL'/'$(($SERIAL+1))'/" $ZONEFILE
dnssec-signzone -t -g -o $1 $2 /var/named/key/Kinfosec.local.*.private
systemctl restart $DNSSERVICE
cd $PDIR
# /usr/sbin/named-checkzone infosec.local infosec.local.db.signed | egrep -ho '[0-9]{10}'
2019051635
# sed -i 's/'2019051635'/'$((2019051635+1))'/' infosec.local.db
# /usr/sbin/named-checkzone infosec.local infosec.local.db.signed | egrep -ho '[0-9]{10}'
2019051636
sed -i ‘s/’$SERIAL’/’$(($SERIAL+1))’/’ $ZONEFILE
# chmod +x zonesigner.sh
# ./zonesigner.sh infosec.local infosec.local.db
# crontab -e
0 0 */3 * * /var/named/zonesigner.sh infosec.local infosec.local.db