前言
DNS 是什麼,可以參考 WIKI
ELK 是什麼,可以參考 市面上流行的 ELK 就是 ElasticSearch + Logstash + Kibana 索引 收集 圖表化
架設好 DNS 伺服器,它內鍵了 statistics 統計、與 log 記錄 ,記錄查詢的結果,以利事後查看
statistics 可以圖形化成這樣 ↓
但是 log 要怎麼作
在 /var/log/named/query.log 會有一堆 ↓ 這樣子的東西
12-Jun-2020 11:59:46.488 queries: info: client @0x7fe0201822b0 172.217.42.11#56189 (ssorc.tw): query: ssorc.tw IN AAAA -E(0)DC (1.1.1.1)
(但誰會去看啊~)
所以有 gamelinux/passivedns ,它直接抓 DNS 封包記錄在 /var/log/passivedns.log ,裡面也只是像是把上面的變成 ↓ (似乎也沒好到那裡去) (它裡面有工具寫到 MySQL)
#timestamp||dns-client ||dns-server||RR class||Query||Query Type||Answer||TTL||Count 1322849924.408856||10.1.1.1||8.8.8.8||IN||upload.youtube.com.||A||74.125.43.117||46587||5
再看 jpmens/stash53 , 它是 clone 了 gamelinux/passivedns ↑ 再稍作修改,有支援 ELK ,且 stash53 是把資料寫到 redis 裡,這就更好辦了 (也可以參考這篇 Server-agnostic logging of DNS queries/responses)
所以使用 stash53 看看
環境
續 市面上流行的 ELK 就是 ElasticSearch + Logstash + Kibana 索引 收集 圖表化
設定 stash53
必要元件
yum install -y epel-release yum install -y gcc-c++ make libpcap-devel ldns-devel hiredis-devel
編譯
git clone https://github.com/jpmens/stash53.git cd stash53 cd src make
執行 (記得啟用 redis)
./stash53 -i eth0 -l /dev/null -P 0 -O stash53 -e 127.0.0.1/6379
設定 logstash
vi /etc/logstash/conf.d/stash53.conf
input { redis { type => "dns" host => 'localhost' port => 6379 data_type => 'list' key => 'stash53' # 同上 -O } } filter { } output { elasticsearch { hosts => ["localhost:9200"] index => "stash53" } }
stash53 提供的 geoip 設定已不適用新版 logstash
查看 Kibana
這樣 elasticsearch index 就有了 stash53
一樣把 kibana 的 index 建起來,就可以在 discover 查看
discover 畫面 ↓
packetbeat 也可以達到
就是 Beats 家族的 packetbeat,專門抓網路封包
wget https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-7.7.1-x86_64.rpm yum localinstall -y packetbeat-7.7.1-x86_64.rpm
編輯 (protocols 只留 dns )
vi /etc/packetbeat/packetbeat.yml
packetbeat.protocols: - type: dns # Configure the ports where to listen for DNS traffic. You can disable # the DNS protocol by commenting out the list of ports. ports: [53] output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] # 資料直接丟給 elasticsearch
測試啟動
/usr/share/packetbeat/bin/packetbeat -environment systemd -c /etc/packetbeat/packetbeat.yml -path.home /usr/share/packetbeat -path.config /etc/packetbeat -path.data /var/lib/packetbeat -path.logs /var/log/packetbeat
其它
curl -X GET 'http://localhost:9200/packetbeat-*/_search?pretty'
啟用支援 GeoIP
抓封包流量,除了有來源 IP 外,也要知道它的地理位置是那
所以可以設置讓 kibana 可以有 GeoIP (參考 Enrich events with geoIP information)
到 kibana 的 Dev Tools 的 Console
貼上 ↓
PUT _ingest/pipeline/geoip-info { "description": "Add geoip info", "processors": [ { "geoip": { "field": "client.ip", "target_field": "client.geo", "ignore_missing": true } }, { "geoip": { "field": "source.ip", "target_field": "source.geo", "ignore_missing": true } }, { "geoip": { "field": "destination.ip", "target_field": "destination.geo", "ignore_missing": true } }, { "geoip": { "field": "server.ip", "target_field": "server.geo", "ignore_missing": true } }, { "geoip": { "field": "host.ip", "target_field": "host.geo", "ignore_missing": true } } ] }
然後點右上角有個小小的三角形 (Click to send request)
結果 (成功)
{ "acknowledged" : true }
還有 packetbeat 要加入 geoip-info
vi /etc/packetbeat/packetbeat.yml
output.elasticsearch: hosts: ["localhost:9200"] pipeline: geoip-info # <<< 要加入
回到 kibana 的 Discover 就可以看到有 geo 等相關 fields 可以用了
建立 Dashboard
要先到 Visualize 建立 Visualizations (讓資料要用什麼方式呈現)
就可以拉成 dashboard 了
後記
packetbeat 抓的資料比 stash53 資料量更大,所以要留意硬碟空間,還有操作 kibana 時也因資料量大會卡卡的 (所以 server 要用好一點)
也可以參考 官網 live demo
留言