DSC 是一套 DNS Stats Collector,DNS 查詢統計工具。

  1. 它是一個分散式架構的設計
  2. master 叫作 presenter,它負責接收資料、分析、畫圖
  3. slaver 叫作 collector,可以很多台,就是所謂的 ns1、ns2 等的 nameserver
  4. 安裝 collector 在每台 ns 上面,透過 dcs 使用 pcap 去 sniffer 網路封包,分析後存成 XML 檔,再傳到 presenter 上呈現

有這些功能

  1. Query types
  2. Response codes
  3. Opcodes
  4. Source addressess or subnets
  5. Query name TLD
  6. EDNS parameters
  7. Known types of DNS “pollution”
  8. Message sizes
  9. IP transport
  10. TCP/UDP ports

有 官方說明文件 可以參考

DSC - DNS Stats Collector (圖片來源  官方)

DSC - DNS Stats Collector (圖片來源  官方)

以下是安裝操作設定說明

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 : 畫出來的結果怎麼沒有像 這麼漂亮,是那裡出錯了???

DSC - DNS Stats Collector

Related posts 相關文章
dnscrypt-proxy 讓 DNS 查詢加密
More...
DNS BIND 9.16.50 最後一個版本已釋出
More...
DNS BIND 9.16 版本將 EOL
More...
在 Windows 上面 Plesk Obsidian 18.0.60 後不再維護 BIND DNS
More...

作者

留言

感謝您的文章,看來中文的僅此一篇。發現真的不好裝,請問用起來如何呢?

    作者

    好不好用其次,它沒有很符合我需求。你可試試 dnstop 統計 dns 查詢,像 tcpdump + top 一樣的工具,即時查看狀態 ,也可以試試這個工具 https://github.com/gamelinux/passivedns 。 要不試試 讓 bind DNS 把 log 記錄分類 自己把 query.log 裡的東西 parse parse 一下。 歡迎討論 :)

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。