前言

DNS 是什麼,可以參考 WIKI

ELK 是什麼,可以參考 市面上流行的 ELK 就是 ElasticSearch + Logstash + Kibana 索引 收集 圖表化

架設好 DNS 伺服器,它內鍵了 statistics 統計、與 log 記錄 ,記錄查詢的結果,以利事後查看

statistics 可以圖形化成這樣 ↓

ELK-Elasticsearch-Logstash-Kibana-ELK-Elasticsearch-Logstash-Kibana-rrdtool ELK-Elasticsearch-Logstash-Kibana-ELK-Elasticsearch-Logstash-Kibana-rrdtool

但是 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 查看

ELK-Elasticsearch-Logstash-Kibana

discover 畫面 ↓

ELK-Elasticsearch-Logstash-Kibana-stash53

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 可以用了

ELK-Elasticsearch-Logstash-Kibana-packetbeat

建立 Dashboard

要先到 Visualize 建立 Visualizations (讓資料要用什麼方式呈現)

ELK-Elasticsearch-Logstash-Kibana-ELK-Elasticsearch-Logstash-Kibana-Visualize

就可以拉成 dashboard 了

ELK-Elasticsearch-Logstash-Kibana-ELK-Elasticsearch-Logstash-Kibana-dashboard

ELK-Elasticsearch-Logstash-Kibana-ELK-Elasticsearch-Logstash-Kibana-dashboard

後記

packetbeat 抓的資料比 stash53 資料量更大,所以要留意硬碟空間,還有操作 kibana 時也因資料量大會卡卡的 (所以 server 要用好一點)

也可以參考 官網 live demo

最後修改日期: 2020 年 06 月 14 日

作者

留言

撰寫回覆或留言

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