named의 보안을 위한 인증키(rndckey) 설정
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,458 조회
- 0 추천
- 목록
본문
named의 보안을 위한 인증키(rndckey) 설정
BIND를 설치한 후에 가장 먼저 해줘야 할 것이 있다.
그것은 rndckey라고 하는 것이다.
만약 여러분들이 rpm으로 설치하였다면 이미 작업이 되어있을 것이다.
만약 BIND를 컴파일하여 설치하였다면 처음 named 를 실행하면 실행이 되지않거나 또는 rndc가 제대로 실행되지 않을 것이다.
이 이유는 rndckey가 생성되어있지 않기 때문이다.
결론적으로 말하자면 rndckey를 생성하여 넣어주기만 하면 named와 rndc가 제대로 작동한다는 것이다.
물론 이 절에서 rndckey를 생성하여 설정하는 예를 보도록 할 것이다.
이 작업을 하기 전에 이론적인 부분을 말하도록하겠다.
즉 왜 이 작업을 해야하는가?
그리고 이 rndckey값은 어디에 사용되는가?
그리고 이 rndckey값은 누가 사용하는가?등에 대한 이해를 해야한다.
이를 이해하기 위하여 먼저 다음 파일을 보기 바란다.
/etc/rndc.key 파일
BIND 즉 네임서버(name server)를 원격제어하기 위한 유틸리티가 있는데 이것이 바로 rndc라는 것이다.
rndc는 “remote named server daemon control utility”의 약어로서 말 그대로 “네임서버를 원격제어하기 위한 유틸리티”이다.
이것이 제대로 작동하기 위해서는 다음 두가지 조건이 성립되어야 한다.
하나는 rndc의 메인 설정파일인 /etc/rndc.conf파일이 제대로 설정되어있어야 하고, 둘째는 rndc의 키파일인 /etc/rndc.key파일이 또한 제대로 설정되어 있어야 한다.
따라서 이두가지에 대해서 살펴보도록 하자.
/etc/rndc.key파일은 rndckey를 보관하고있는 키파일로서 /etc/named.conf파일과 /etc/rndc.conf 파일에서 include하여 사용하는 파일이다.
다음은 설치초기의 /etc/rndc.key파일의 내용이다.
이 파일은 /etc/rndc.key라는 위치가 원래위치이지만 chroot가 적용되어 현재는 거의 대부분 /var/named/chroot/etc/rndc.key라는 위치이다.
[root@sulinux ~]#ls -l /etc/rndc.key
lrwxrwxrwx 1 root named 31 2월 9 17:59 /etc/rndc.key -> /var/named/chroot//etc/rndc.key [root@sulinux ~]# [root@sulinux ~]#cat /var/named/chroot/etc/rndc.key key rndckey { algorithm hmac-md5; secret sTr0BYVesOWKV7XHsDqRBxGYkHXabpEbNPRZtm84OznNjtzgcTxC6mG59iQl; }; [root@sulinux ~]# |
원래는 위와 같이 secret부분에 제대로 된 키값이 설정되어 있어야 한다.
그래야만 bind가 제대로 수행될 수 있다.
그런데 다음 예를 보기 바란다.
[root@sulinux
~]# cat /etc/rndc.key |
처음 설치하였거나 실행이 잘 되지 않는 bind에서 흔히 볼 수 있는 예로서 위의 파일내용 중 secret부분에 아무런 키값이 설정되어있지 않다.
따라서 현재 이 상태로는 rndc의 실행이 되지 않을 뿐아니라 named가 원격제어되지 않는다.
/etc/named.conf파일에서 사용되는 rndckey값
다음은 /etc/named.conf파일(또는 /var/named/chroot/etc/named.conf)의 내용 중 일부이다.
include "/etc/rndc.key"; |
보는 바와같이 named.conf파일에서는 /etc/rndc.key파일을 include하고 있으며 이 파일에서 사용하는 키값은 원격지의 named에 특정요청을 보내고 받을 때사용되는 키로서 현재서버에 있는 named데몬이 사용하는 키값이다.
/etc/rndc.conf파일에서 사용되는 rndckey값
그리고 다음은 /etc/rndc.conf파일의 일부이다.
include "/etc/rndc.key"; |
이 파일 역시 /etc/rndc.key파일을 include하고있으며 이 파일에서 사용하는 키값은 원격지에서 네임서버를 제어하려고 할 때에 사용되는 키값으로서 현재서버의 rndc가 사용하는 키값이다.
즉 rndc가 원격지의 named를 제어(reload, status등)하려고 할때에 원격지의 named에도 동일한 키값이 존재해야만 제어가 된다.
보는 바와같이 named.conf파일과 rndc.conf파일에서는 모두 /etc/rndc.key파일을 include하는 문이 들어가 있다.
즉 named.conf파일과 rndc.conf파일은 모두 /etc/rndc.key파일의 키값을 읽어들여서 사용한다는 것을 알 수 있다.
하지만 설명한 바와같이 이 두파일은 사용하는 주체와 사용하는 용도는 각각 다르다는 점을 알아야한다.
/etc/rndc.key파일에 rndckey키값
생성하기
이제 rndckey를 생성하여 /etc/rndc.key파일에 넣어주기만 하면 된다.
앞에서 설명한 바와같이 /etc/rndc.key파일은 /etc/named.conf파일과 /etc/rndc.conf파일 모두에 include되므로 모두 적용될 것이다.
물론 이 두파일에 각각 다른 rndckey를 생성해 줄 수도 있다.
rndckey를 생성하는
dnssec-keygen이라는 것이 있다.
dnssec-keygen은 한마디로 “DNSSECkey(bind보안키) 생성툴”이라고 정의할 수 있다.
다음과 같이 dnssec-keygen을 이용하여 rndckey를 생성하였다.
[root@sulinux
~]# dnssec-keygen -a hmac-md5 -b 512
-n ZONE -r /dev/random named |
위의 실행결과로 다음 두개의 파일이 생성된다.
[root@sulinux
~]# ls -l |
위의 두 파일 중 “Knamed.+157+63283.key”파일의 내용을 확인해 보면 다음과 같다.
[root@sulinux
~]# cat Knamed.+157+63283.key |
위의 “Knamed.+157+63283.key”파일의 내용 가운데 “iYQUXO+VXzAQE5qaVGm3TY8dVt/QcdrEfyv4yXdZUPkVd4dLdzxGIZHBAPO2kl00s5fimkJn5u7S85t+RrAIyA==”부분이 rndckey값이다.
따라서 이부분을 그대로 복사하여 다음과 같이 /etc/rndc.key파일의 secret값으로 넣어주어야 한다.
[root@sulinux
~]# cat /etc/rndc.key |
이제 named를 재시작하면 생성된 rndckey값이 적용된다.
이번 절의 결론은 다음과 같다.
즉 dnssec-keygen유틸리티를 이용하여 /etc/rndc.key파일내의 secret에 들어가야하는 rndckey값을 생성한 것이다.
위와 같이 BIND를
컴파일하여 설치하셨다면 반드시 rndckey값을 확인하고 생성되어있지 않다면 이 절의 설명을 참고하여
생성해주기 바란다.
관련자료
-
이전
-
다음