DSC 是一套 DNS Stats Collector,DNS 查詢統計工具。
- 它是一個分散式架構的設計
- master 叫作 presenter,它負責接收資料、分析、畫圖
- slaver 叫作 collector,可以很多台,就是所謂的 ns1、ns2 等的 nameserver
- 安裝 collector 在每台 ns 上面,透過 dcs 使用 pcap 去 sniffer 網路封包,分析後存成 XML 檔,再傳到 presenter 上呈現
有這些功能
- Query types
- Response codes
- Opcodes
- Source addressess or subnets
- Query name TLD
- EDNS parameters
- Known types of DNS “pollution”
- Message sizes
- IP transport
- TCP/UDP ports
有 官方說明文件 可以參考
(圖片來源 官方)
(圖片來源 官方)
以下是安裝操作設定說明
On Presenter 端
安裝 perl 相關 module
cpan -i CGI::Untaint cpan -i CGI cpan -i Digest::MD5 cpan -i File::Flock cpan -i File::Spec cpan -i File::Temp cpan -i Geography::Countries cpan -i Hash::Merge cpan -i IP::Country cpan -i MIME::Base64 cpan -i Math::Calc::Units cpan -i List::Util cpan -i Text::Template cpan -i URI::Escape cpan -i XML::Simple cpan -i Net::DNS::Resolver cpan -i File::NFSLock cpan -i File::Flock cpan -i Proc::PID::File
安裝 Ploticus,用它產生 plots and graphs
tarball http://ploticus.sourceforge.net or yum install ploticus
安裝 DSC
wget http://dns.measurement-factory.com/tools/dsc/download/dsc-201203250530.tar.gz cd dsc-201203250530 cd presenter make mkdir -p /usr/local/dsc make install
設定 Apache
# vi /etc/httpd/conf.d/dsc.conf ScriptAlias "/dsc/" "/usr/local/dsc/libexec/" <Directory /usr/local/dsc/libexec/> Options ExecCGI FollowSymLinks AllowOverride None AddHandler cgi-script .cgi .pl </Directory> Alias "/dsc" "/usr/local/dsc/share/html"
目錄結構,XML 檔存放地方,空間用量會很大
chgrp apache /usr/local/dsc/data/ chmod 2775 /usr/local/dsc/data/ # x-root 只是名稱,它會用於顯示的上層目錄 # nsX 也是名稱,ns1 主機 與 ns2 主機 mkdir -p /usr/local/dsc/data/x-root/ns1/incoming/ mkdir -p /usr/local/dsc/data/x-root/ns2/incoming/ chgrp apache /usr/local/dsc/data/x-root/ns1/ chmod 2775 /usr/local/dsc/data/x-root/ns1/incoming/ chgrp apache /usr/local/dsc/data/x-root/ns2/ chmod 2775 /usr/local/dsc/data/x-root/ns2/incoming/
log 記錄權限改一下
chgrp apache /usr/local/dsc/var/log/
瀏覽統計畫面時會產生圖檔,cache 建立在這裡,所以需要 apache 權限
chown apache /usr/local/dsc/cache/
排程
# 處理、解析 incoming 裡的 XML 檔,collector 傳過來的 * * * * * root /usr/local/dsc/libexec/refile-and-grok.sh # 定期移除舊的 XML 檔 find /usr/local/dsc/data/ | /usr/local/dsc/libexec/remove-xmls.pl 7
Collector 端
安裝 Perl 相關 module
cpan -i Proc::PID::File
安裝 collector
cd dsc-201203250530/colleror make make install
目錄結構,sniffer 資料後存放的地方
# ns1 自訂即可,但要跟 presenter 有相同名稱 # upload/archive 裡的東西將會傳送到 presenter,這邊也只是暫存,傳完會刪除 mkdir -p /usr/local/dsc/run/ns1/upload/archive
排程
# collector 的 bin/dsc 執行時,XML 檔會放在 run/ns1 裡 (dsc.conf 中會定義),需再執行 upload-grep.pl 就會放到 run/ns1/upload/archive/ 裡 (按日期) # 所以要排程 upload-prep.pl * * * * * root /usr/local/dsc/libexec/upload-prep.pl
bin/dsc 與 upload-prep.pl 是需要讀取 dsc.conf
cp /usr/local/dsc/etc/dsc.conf.sample /usr/local/dsc/etc/dsc.conf
編輯 /usr/local/dsc/etc/dsc.conf
local_address 1.1.1.1; run_dir "/usr/local/dsc/run/ns1"; interface eth0;
執行 dsc 去抓取封包、記錄成 XML
/usr/local/dsc/bin/dsc /usr/local/dsc/etc/dsc.conf
因為支援的參數有問題,所以要更換設定
vi /usr/local/dsc/libexec/upload-rsync.sh 將 --remove-source-files 換成 --remove-sent-files
排程傳輸 XML 至 presenter
# upload-rsync.sh 用 rsync 傳送資料,後面接 ns1,再接 upload 裡的 archive,最後是 presenter 的 data 路徑 * * * * * root /usr/local/dsc/libexec/upload-rsync.sh ns1 archive /usr/local/dsc/data/x-root/ns1
這樣子就會送到 presenter 的 data/x-root/ns1/incoming/2014-12-25 裡,然後 presenter 的排程 再執行 refile-and-grok.sh 就會利用 dsc-xml-extractor.pl 將 2014-12-25 裡的 XML 過濾處理掉,變成 20141225 與 done 兩個目錄 (與 incoming 同層)
presenter 端的 grapher
收集好資料,再來就畫圖了
cp /usr/local/dsc/etc/dsc-grapher.cfg.sample /usr/local/dsc/etc/dsc-grapher.cfg vi /usr/local/dsc/etc/dsc-grapher.cfg # 加入 # 樹狀結構,在 dsc-grapher.pl 瀏覽 server x-root ns1 ns2 valid_domains x-root all_tlds
瀏覽 http://2.2.2.2/dsc/cgi-bin/dsc-grapher.pl
其它參數
dsc-grapher.cfg 裡有提到 domain_list 要隨時更新(它有提供方式),但 fmt 指令有誤,要換成
dig @f.root-servers.net . axfr \ | awk '$3=="IN" && $4=="NS" {print $1}' \ | tr A-Z a-z \ | sed -e 's/\.$//' \ | grep . \ | sort \ | uniq > /tmp/fmt.txt fmt /tmp/fmt.txt | sed -e 's/^/domain_list all_tlds /'
再把結果整批替換過去
timezone Asia/Taipei # 預設是讀系統的時間,但如果要不同的話可以變更
PS : 畫出來的結果怎麼沒有像 它 這麼漂亮,是那裡出錯了???
留言
感謝您的文章,看來中文的僅此一篇。發現真的不好裝,請問用起來如何呢?
好不好用其次,它沒有很符合我需求。你可試試 dnstop 統計 dns 查詢,像 tcpdump + top 一樣的工具,即時查看狀態 ,也可以試試這個工具 https://github.com/gamelinux/passivedns 。 要不試試 讓 bind DNS 把 log 記錄分類 自己把 query.log 裡的東西 parse parse 一下。 歡迎討論 :)