DrZl0

Logstash - Suricata DNS and fast.log

Sep 15th, 2020 (edited)
929
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. input {
  2.     file {
  3.         path => [ "/mnt/logs/ids/dns.log" ]
  4.         sincedb_path => "/dev/null"
  5.         start_position => "beginning" #Поменять на end#
  6.         tags => ["dns"]
  7.     }
  8.     file {
  9.         path => [ "/mnt/logs/ids/fast.log" ]
  10.         sincedb_path => "/dev/null"
  11.         start_position => "beginning" #Поменять на end#
  12.         tags => ["ids"]
  13.     }
  14. }
  15.  
  16. filter {
  17.     if "dns" in [tags] {
  18.         if "Query" in [message] and "AAAA" not in [message] {
  19.             grok {
  20.                 match => {
  21.                     "message" => "%{GREEDYDATA:timestamp}  ?\[?\*?\*?\] %{WORD:dns.message.type} %{WORD} %{WORD} ?\[?\*?\*?\] %{HOSTNAME:dns.request} ?\[?\*?\*?\] %{WORD:dns.record.type} ?\[?\*?\*?\] %{IP:dns.client.ip}:%{NUMBER:dns.client.port} %{GREEDYDATA} %{IP:dns.server.ip}:%{NUMBER:dns.server.port}"
  22.                 }
  23.             }
  24.             if "_grokparsefailure" in [tags] {
  25.                 drop { }
  26.             }
  27.         }
  28.         if "Query" in [message] and "AAAA" in [message] {
  29.             grok {
  30.                 match => {
  31.                     "message" => "%{GREEDYDATA:timestamp}  ?\[?\*?\*?\] %{WORD:dns.message.type} %{WORD} %{WORD} ?\[?\*?\*?\] %{DATA:dns.request} ?\[?\*?\*?\] %{WORD:dns.record.type} ?\[?\*?\*?\] %{IP:dns.client.ip}:%{NUMBER:dns.client.port} %{GREEDYDATA} %{IP:dns.server.ip}:%{NUMBER:dns.server.port}"
  32.                 }
  33.             }
  34.             if "_grokparsefailure" in [tags] {
  35.                 drop { }
  36.             }
  37.         }
  38.         else if "Response" in [message] and "AAAA" not in [message] and "CNAME" not in [message] {
  39.             grok {
  40.                 match => {
  41.                     "message" => "%{GREEDYDATA:timestamp}  ?\[?\*?\*?\] %{WORD:dns.message.type} %{WORD} %{WORD} ?\[?\*?\*?\] %{DATA:dns.request} ?\[?\*?\*?\] %{WORD:dns.record.type} ?\[?\*?\*?\] %{WORD} %{NUMBER:dns.ttl} ?\[?\*?\*?\] %{DATA:dns.reply.ip} ?\[?\*?\*?\] %{IP:dns.server.ip}:%{NUMBER:dns.server.port} %{GREEDYDATA} %{IP:dns.client.ip}:%{NUMBER:dns.client.port}"
  42.                 }
  43.                 add_tag => ["ip.v4"]          
  44.             }
  45.             geoip {
  46.                 source => "dns.reply.ip"
  47.             }
  48.             if "_grokparsefailure" in [tags] {
  49.                 drop { }
  50.             }
  51.         }
  52.         else if "Response" in [message] and "AAAA" in [message] and "CNAME" not in [message] {
  53.             grok {
  54.                 match => {
  55.                     "message" => "%{GREEDYDATA:timestamp}  ?\[?\*?\*?\] %{WORD:dns.message.type} %{WORD} %{WORD} ?\[?\*?\*?\] %{DATA:dns.request} ?\[?\*?\*?\] %{WORD:dns.record.type} ?\[?\*?\*?\] %{WORD} %{NUMBER:dns.ttl} ?\[?\*?\*?\] %{DATA:dns.reply.ip} ?\[?\*?\*?\] %{IP:dns.server.ip}:%{NUMBER:dns.server.port} %{GREEDYDATA} %{IP:dns.client.ip}:%{NUMBER:dns.client.port}"
  56.                 }
  57.                 add_tag => ["ip.v6"]
  58.             }
  59.             if "_grokparsefailure" in [tags] {
  60.                 drop {}
  61.             }
  62.         }
  63.         else if "Response" in [message] and "AAAA" not in [message] and "CNAME" in [message] {
  64.             grok {
  65.                 match => {
  66.                     "message" => "%{GREEDYDATA:timestamp}  ?\[?\*?\*?\] %{WORD:dns.message.type} %{WORD} %{WORD} ?\[?\*?\*?\] %{HOSTNAME:dns.cname.response} ?\[?\*?\*?\] %{WORD:dns.record.type} ?\[?\*?\*?\] %{WORD} %{NUMBER:dns.ttl} ?\[?\*?\*?\] %{HOSTNAME:dns.name.orig} ?\[?\*?\*?\] %{IP:dns.server.ip}:%{NUMBER:dns.server.port} %{GREEDYDATA} %{IP:dns.client.ip}:%{NUMBER:dns.client.port}"
  67.                 }
  68.             }
  69.             if "_grokparsefailure" in [tags] {
  70.                 drop {}
  71.             }
  72.         }
  73.         date {
  74.             match => ["timestamp", "MM/dd/yyyy-HH:mm:ss.SSSSSS"]
  75.             timezone => "America/Toronto"
  76.             target => ["@timestamp"]
  77.         }
  78.     }
  79.     else if "ids" in [tags] {
  80.         grok {
  81.             match => {
  82.                 "message" => "%{GREEDYDATA:timestamp}   ?\[?\*?\*?\] ?\[%{INT}:%{INT}:%{INT}?\] %{WORD} %{WORD} %{GREEDYDATA:ids.signature}  ?\[?\*?\*?\] ?\[%{WORD}: %{GREEDYDATA:ids.classification}?\] ?\[%{WORD}: %{INT:ids.severity}?\] ?\{%{WORD:ids.protocol}?\} %{IP:ids.source.ip}:%{INT:ids.source.port} -> %{IP:ids.destination.ip}:%{INT:ids.destination.port}"
  83.             }
  84.         }
  85.         if "_grokparsefailure" in [tags] {
  86.             drop {}
  87.         }
  88.     }
  89.     geoip {
  90.         source => "ids.source.ip"
  91.     }
  92.    
  93.     geoip {
  94.         source => "ids.destination.ip"
  95.     }
  96.     date {
  97.         match => ["timestamp", "MM/dd/yyyy-HH:mm:ss.SSSSSS "]
  98.         timezone => "America/Toronto"
  99.         target => ["@timestamp"]
  100.     }
  101. }
  102. output {
  103.     elasticsearch {
  104.         hosts => ['127.0.0.1:9200']
  105.     }
  106. }
RAW Paste Data