주 제 : DNSTOP 사용방법
작성자 : 김마현. mail : mapoo@ㄴㅔㅇㅣ트.컴, web : http://mapoo.kr
최초작성일 : 2012-04-23, SerialNo : 20120423A51
< 목 차 >
> 시작말
> 1. 보여주는 정보
> 2. 설치하기
> 3. 사용방법
> 맺음말
n 시작말 :
DNS서버를 운영하다보면 DNS쿼리가 어디서 얼마만큼 날라오는지 모니터링해야될 경우가 있다.
DNSTOP은 libcap 기반의 유틸리티로서 시스템에 큰 부하를 주지않으면서도 빠르고 쉬운 모니터링 툴이다.
1. 보여주는 정보
1) 질의 타입
2) 패킷의 소스 IP
3) 패킷의 목적지 IP
4) 최상위 레벨 도메인
5) 두번째 레벨 도메인
6) 세번째 레벨 도메인
2. 설치하기
1) Libcap 설치 유무확인
[root@NS1 ~]# rpm -qa |grep libcap libcap-1.10-20 |
* libcap이 안깔려 있으면 설치
2) Dnstop 설치하기
1> 아래 사이트에서 자신의 시스템에 맞는 rpm을 받는다. 혹은 소스를 받아서 설치.
http://pkgs.repoforge.org/dnstop/
2> rpm 설치
[root@NS1 ~]# rpm -ivh dnstop-0.0.20080502-1.el4.rf.i386.rpm |
3. 사용방법
1) 옵션 보기
그냥 실행하면 옵션에 대한 설명이 나온다.
[root@NS1 ~]# /usr/sbin/dnstop /usr/sbin/dnstop: invalid option -- h usage: usr/sbin/dnstop [opts] netdevice|savefile -4 Count IPv4 packets -6 Count IPv6 packets -a Anonymize IP Addrs -b expr BPF program code -i addr Ignore this source IP address -p Don't put interface in promiscuous mode -r Redraw interval, in seconds -l N Enable domain stats up to N components -f filter-name Available filters: unknown-tlds A-for-A rfc1918-ptr |
2) 실행하기
[root@NS1 ~]# /usr/sbin/dnstop -4 -l 3 eth0 Queries: 2 new, 17 total Mon Apr 23 09:41:58 2012 Sources Count % -------------- --------- ------ 208.94.20.62 2 11.8 121.138.224.2 1 5.9 220.73.29.3 1 5.9 210.113.99.5 1 5.9 211.195.237.3 1 5.9 210.113.99.6 1 5.9 210.94.0.77 1 5.9 . . |
-4 : Ipv4 packet 만 보이기
-l : 도메인 레벨 3까지 보이기
eth0 : NIC eth0으로부터 오는 패킷만 캡쳐.
위 화면은 기본으로 IP와 count 만 보인다. 아래와 같이 레벨을 변경하면 좀 더 자세히 출력된다.
3) 레벨변경 및 기타옵션
1> 레벨변경 type 1
위와 같이 실행한 뒤 숫자 1에서 ~ 3까지 누르면 Query Name 부분이 바뀌면서 출력된다.
위에서 실행한 -l 3 옵션의 숫자 범위까지 적용된다. 만약 4를 줬으면 레벨 4까지 캡쳐가 되므로 4까지 적용이 된다.
2> 레벨변경 type 2
위와 같이 실행한 뒤 숫자 Shift + 1에서 ~ 3까지 누르면 Source IP가 보이고 Query Name 부분이 바뀌면서 출력된다.
위에서 실행한 -l 3 옵션의 숫자 범위까지 적용된다. 만약 4를 줬으면 레벨 4까지 캡쳐가 되므로 4까지 적용이 된다.
3> 필터옵션
dnstop은 3가지 필터 옵션을 제공한다.
① unknown-tlds
- kr, jp, com, net 등 등록되지 않은 최상위 코드에 대한 질의를 필터링한다.
명령어 : /usr/sbin/dnstop -4 -l 3 -f unknown-tlds eth0
위 와 같이 필터링 했을 때 출력되는 값은 메일 주소를 잘못 입력했거나 네트워크 설정의 오류로 인한것이므로
해당 서버의 네트워크 설정 등을 점검해야된다.
② A-for-A
- 도메인이 아닌 IP 주소에 대한 A record를 질의하는 것을 필터링
명령어 : /usr/sbin/dnstop -4 -l 3 -f A-for-A eth0
이 역시 잘못된 DNS 질의이므로 원인을 찾는다.
③ rfc1918-ptr
- rfc 1918에 정의된 사설 ip에 대한 PTR 질의를 필터링한다.
명령어 : /usr/sbin/dnstop -4 -l 3 -f rfc1918-ptr eth0
사설 IP에 대한 질의는 내부 네트워크 사이의 트래픽이므로 DNS와 같은 외부 네트워크에서 보이지 않아야 한다.
만약 출력값으로 보인다면 해당 소스 IP를 tcpdump로 패킷캡쳐를 하여 원인을 찾아본다.
예) tcpdump host 215.44.53.22
해결 방법으로는 각각의 서버에서 /etc/hosts 파일에 내부 IP를 등록해 두는 방법이 있다.
4> 기타옵션
ctrl + r : 출력 초기화
ctrl + x : 프로그램 종료
4) 질의 점검 하기
1> 과도한 질의
만약 접속이 많지 않은데도 특정 도메인에 대한 질의가 많다면 DNS에서 TTL 설정값이 너무 낮지는 않은지 확인
2> 비정상적인 특정 도메인 질의
sample.com.sample.com 또는 sample.com.localdomain 등의 경우
zone 파일에서 .을 입력하지 않았다거나 설정파일의 오류로 인해 발생하는 경우가 대부분이므로
tcpdump로 해당 질의의 소스 IP를 확인해햐 된다.
예) tcpdump host 215.44.53.22
n 맺음말 :
DNS 쿼리에 대한 패킷을 tcpdump를 이용하여 패킷 캡쳐하여 볼 수도 있다. 하지만 DNS 쿼리만 따로 뽑아서 직관적으로 보기엔 쉽지않다. DNSTOP은 이러한 점을 해소해 줄 수 있는 유틸리티로서 잘 활용한다면 실시간 DNS쿼리 상황, 비정상적인 트래픽 등을 쉽게 모니터링을 할 수 있다.