강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

dnstop : DNS 트래픽 분석 도구

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

dnstop : DNS 트래픽 분석 도구 

    작성자 : 에스유
    작성일 : 2014.04.25(금)
    대상 OS : SULinux Server 2014 64Bit


  리눅스 서버는 아주 많은 용도로 사용된다. 그중에서 DNS서버 전용으로 사용하거나, DNS서비스를 올려 사용한다면, dnstop은 필수 유틸리티 이다. dnstop은 SSH등을 이용하여 서버에 터미널로 접속하여 볼 수 있는 TUI 프로그램이다.  dnstop은 실시간으로 패킷을 분석하여 DNS관련 패킷을 우리가 알아보기 편리하게 통계를 내어 준다.  본 강좌의 스크린샷을 보면 그 용도를 알 수 있을 것이다.  

다음과 같은 방식으로 보여준다.
    - 소스 IP, 목적지 IP주소 통계
    - 쿼리유형
    - 응답코드
    - Opcodes
    - 최상위 도메인에서 2, 3, 4번째 수준의 도메인
    - IPv4, IPv6 모두 지원
    - DNS필터 제공 
* unknown/invalid TLD(최상위 도메인)
* 쿼리이름으로 IP를 사용하는 경우
* RFC1918 주소공간에 대한 PTR 쿼리
* REUSED 응답
    - dnstop은 tcpdump로 저장된 파일 또한 분석 할수 있다.

  꼭 필요한 기능을 아주 빠르게 제공한다. 필자는 주 네임서버 및 캐싱 네임서버에 dnstop을 설치하고, 아주 많은 도움을 받고 있다.  dnstop 설치부터 하나 하나 살펴보도록 하자.


1. dnstop 설치
    dnstop 20080502 버전은 RHEL/CentOS 6에 기본이 아닌 3rd party 저장소에서 제공한다. 조금 오래된 배포판의 경우 최신버전의 패키지를 구하기 어려우니 컴파일 하여 설치하는 방법을 알아보자.
참고로 SULinux 2014버전에는 "yum install dnstop" 을 통해 최신버전(20121017)을 설치 할 수 있다.


   1.1. 소스 다운로드 
       이렇게 좋은 소프트웨어를 사용하려 한다면, 한번쯤 배포하는 사이트에 방문하는 예의라고 생각한다.
     최신 버전의 기능 또한 확인도 하고..

       배포사이트 : http://dns.measurement-factory.com/tools/dnstop/
 


      위 사이트에서 최신버전의 소스코드를 다운로드 한다.
      2014.04.25 기준 20121017이 최신이다.


   1.2. 압축해제 및 일반적인 설치
tar xvfp dnstop-20121017.tar.gz
  cd dnstop-20121017
./configure
make && make install
* 만약 pcap.h 관련 오류가 난다면, libpcap-devel 패키지를 설치 한 다음 실행한다.
       

2. dnstop 사용
   위와 같이 설치하였다면 터미널 창에서 다음과 같이 입력한다.
      dnstop
usage: dnstop [opts] netdevice|savefile
-4 Count IPv4 packets
-6 Count IPv6 packets
-Q Count queries
-R Count responses
-a Anonymize IP Addrs
-b expr BPF program code
-i addr Ignore this source IP address
-n name Count only messages in this domain
-p Don't put interface in promiscuous mode
-P Print "progress" messages in non-interactive mode
-r Redraw interval, in seconds
-l N Enable domain stats up to N components
-X Don't tabulate the "source + query name" stats
-f filter-name

Available filters:
unknown-tlds
A-for-A
rfc1918-ptr
refused
qtype-any

 위와 같이 설명 페이지가 나타날 것이다.
여러가지 옵션들이 있으며 의미는 다음과 같다.

-4 : IPv4 패킷만 카운터 (2014년 지금까지 대부분 IPv4를 사용하니 이 옵션을 사용한다.)
-6 : IPv6 패킷만 카운터(2014년 지금은 IPv6이 거의 사용되지 않는다.)
-Q : DNS 쿼리 메시지만 카운터
-R : DNS 응답 메시지만 카운터
-a : 주소를 익명으로 한다.
-b expr : BPF 필터 표현식 (기본 : udp port 53)
-i addr : 명시한 IP addr는 제외한다.
-n name : 명시한 도메인만 카운터
-p : promiscuous mode 로 들어가지 않는다. (서버의 패킷만 보며, 다른 서버의 패킷을 관찰하지 않는다.)
-P : 비대화형 모드에서 진행상황 메시지를 보여준다. 
-r : 새로 그릴 시간(초, 기본 1초)
-l N : 도메인을 보여줄 레벨을 설정한다. 1은 TLD이고 보통 3을 설정한다.)
-X : 소스IP와 쿼리를 같이 보여주는 모드를 off 한다. (메모리 절약을 위해)
-f : 입력 필터 이름
* 사용가능한 필터는 다음과 같다.
unknown-tlds : unknown/invalid TLD(최상위 도메인)
A-for-A : 쿼리이름으로 IP를 사용하는 경우
rfc1918-ptr : RFC1918 주소공간에 대한 PTR 쿼리
refused : REUSED 응답
qtype-any : 쿼리 타입이 ANY인 경우


1. dnstop 기본 화면

dnstop etho -p -l 3 

라고 입력한다. 위 옵션을 가장 많이 사용하게 되며, 나머지는 쓸일이 별로 없다. 
/root/.bashrc 파일에
  alias dnstop='dnstop eth0 -p -l 3'
라고 명시하면 dnstop을 보다 쉽게 사용할 수있다.

어떤 IP에서 많이 들어오는지 통계를 보여준다.


위 그림에서 제공되는 여러 키들이 있다.

     s     : Source IP 기준 카운터를 한다.(명령어 실행시 처음 보여지는 화면이다.)
     d     : Destination IP 기준 카운터
     t     : 쿼리 타입 기준으로 카운터
     r     : 응답코드 기준으로 카운터
     o     : opcodes 기준으로 카운터
     1     : TLD(Top Level Domain) 기준으로 카운터 , 소스까지 보기 위해서는 !
     2     : SLD(Second Level Domain)기준으로 카운터, 소스까지 보기 위해서는 @
     3     : 3번째 레벨 기준 카운터, 소스까지 보기 위해서는 #
     4     : 4번째 레벨 기준 카운터, 소스까지 보기 위해서는 $
     5     : 5번째 레벨 기준 카운터, 소스까지 보기 위해서는 %
     6     : 6번째 레벨 기준 카운터, 소스까지 보기 위해서는 ^
     7     : 7번째 레벨 기준 카운터, 소스까지 보기 위해서는 &
     8     : 8번째 레벨 기준 카운터, 소스까지 보기 위해서는 *
     9     : 9번째 레벨 기준 카운터, 소스까지 보기 위해서는 (
     ^R    : 카운터 리셋
     ^X    : 프로그램 종료
     space  : 다시 그리기
     ?    : 도움말

"t"키를 누르면 쿼리타입 기준으로 카운터 한다.


"r"키를 눌러 응답코드 기준으로 카운터 한다.


"1"키를 눌러 최상위 도메인 기준으로 카운터를 한다.
 

"2"키를 누르면 두번째 도메인까지 기준으로 카운터 한다.


"@"키를 눌러 SLD 및 Source IP기준으로 카운터를 한다.

  이상으로 dnstop에 대한 강좌를 마무리 합니다. dnstop은 DNS 서버의 쿼리를 분석하기에 아주 좋은 유틸리티입니다. 강좌의 설명에 있어 오타가 있거나, 내용이 다른 부분이 있으면 언제든지 service@linux.kr으로 신고 해 주시기 바랍니다. 오래전 부터 많이 사용해 왔지만, 아직 모르는 사람들을 위해 시간을 내어 봅니다. - doly

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,157 명
  • 현재 강좌수 :  36,515 개
  • 현재 접속자 :  274 명