Linux/CentOS7

dnssec 구성

장성한군사 2019. 5. 17. 17:23

--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