- 기본 Bind DNS는 localhost에서만 query가 가능
- 외부에서 query를 할 수 있도록 하려면 설정을 변경 필요 → 외부에서의 query하기 위해서는 recursion 대한 이해가 필요
- DNS는 자신에게 설정 되어 있는 도메인 외의 질의 요청이 오면, 해당 도메인이 설정 되어 있는 name server에게 요청을 보내여, 응답 받은 내용으로 응답
- name server에 등록이 되어 있지 않은 도메인에 대한 질의가 들어오더라도 찾아서 응답을 해 주는 것으로 caching name server 역할을 함
- recursion 정책 설정이 완료가 되면, Bind DNS는 기본적으로 정책에 따라 응답 가능
KLDP.org의 name server에 google.com의 A record를 질의 하는 경우
KLDP.org의 NS에 google의 A record를 질의
$ dig @ns.kldp.org google.com ; <<>> DiG 9.9.4-geoip-1.4-RedHat-9.9.4-38.an3.1 <<>> google.com @ns.kldp.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53082 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 300 IN A 172.217.24.142 ;; AUTHORITY SECTION: google.com. 80178 IN NS ns2.google.com. google.com. 80178 IN NS ns1.google.com. google.com. 80178 IN NS ns4.google.com. google.com. 80178 IN NS ns3.google.com. ;; ADDITIONAL SECTION: ns2.google.com. 80178 IN A 216.239.34.10 ns1.google.com. 80178 IN A 216.239.32.10 ns3.google.com. 80178 IN A 216.239.36.10 ns4.google.com. 80178 IN A 216.239.38.10 ;; Query time: 144 msec ;; SERVER: 14.0.82.80#53(14.0.82.80) ;; WHEN: 토 2월 11 03:30:45 KST 2017 ;; MSG SIZE rcvd: 191
recursion은 caching name server 역할을 제한 하는 기능
recursion 옵션이 no로 설정이 되어 있다면 설정이 되어 있는 도메인 외의 요청에 대해서는 권한이 없다는 응답함
설정이 되어 있는 도메인에 대해서만 응답만함
$ dig google.com @ns.kldp.org ; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com @ns.kldp.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 38503 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;google.com. IN A ;; Query time: 7 msec ;; SERVER: 14.0.82.80#53(14.0.82.80) ;; WHEN: Sat Feb 11 03:29:33 KST 2017 ;; MSG SIZE rcvd: 39
recursion 기능이 public하게 설정이 되어 있을 경우, DNS cache poisoning 공격을 발생시킬 수 있음 → 근래의 DNS 설정시에는 recursion 기능을 off 시키는 것을 권장
무조건 recursion을 off 시킬 수 없는 환경에 있는 경우를 대비하여, recursion 설정 정책에 학습 필요
recursion 설정 정책
1. 내 도메인 설정을 위한 DNS와 내부에서 사용할 caching name server가 따로 존재할 경우
- 외부에서의 query를 허가하고, recursion을 off 를 시킴
- /etc/named.conf의 options block에서 아래의 설정을 변경 또는 추가 필요
options { ... recursion no; allow-query { any; }; ... };
2. caching name server가 따로 존재하지 않을 경우
외부에서의 query를 허가하고, recursion을 할 수 있는 대역을 allow-recursion 옵션을 이용하여 설정
allow-recursion에 사용할 RecursionAllow ACL group을 /etc/named.acl.conf에 생성
acl LocalAllow { 127.0.0.1; localhost; }; acl RecursionAllow { 192.168.0.0/16; 111.112.113.128/25; };
- named.conf의 options block에서 다음의 설정을 변경 또는 추가
options { ... recursion yes; allow-query { any; }; allow-recursion { LocalAllow; RecursionAllow; }; ... };
3. 내부 전용 caching name server로 사용할 경우
- 내부에서의 query만 허가하고, recursion을 public 하게 설정
- 먼저 /etc/named.acl.conf의 LocalAllow acl group에 query를 할 내부 대역을 추가
acl LocalAllow { 127.0.0.1; localhost; 192.168.0.0/16; };
- named.conf의 options block에서 다음의 설정을 변경 또는 추가
options { ... recursion yes; allow-query { LocalAllow; }; ... };
4. public caching name server로 사용할 경우
- 외부에서의 query와 recursion을 모두 허가
- 이DNS 공격을 위하여 RPZ(Response Policy Zone)과 같이 공격을 방어하기 위한 기법들이 필요
- named.conf의 options block에서 다음의 설정을 변경 또는 추가
options { ... recursion yes; allow-query { any; }; ... };
참고 자료
'GTM과 DNS' 카테고리의 다른 글
HTTPS 암호화된 DNS 기능 지원 → TYPE65 (0) | 2023.09.16 |
---|---|
cloudflare DNS와 google DNS의 cache flush (0) | 2023.09.16 |
Extension DNS(EDNS0)란 (0) | 2023.09.16 |
DNS의 TTL(Time To Live) (0) | 2023.09.16 |
DNS 응답 코드와 의미 (0) | 2023.09.16 |