From 01a21f6c17b71d1f427c83256f31833f0d0301b4 Mon Sep 17 00:00:00 2001 From: 9S <strrrn@gmail.com> Date: Fri, 22 Feb 2019 10:08:12 +0100 Subject: [PATCH] Add files via upload --- logstash/conf.d/20-dns-syslog.conf | 177 +++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 logstash/conf.d/20-dns-syslog.conf diff --git a/logstash/conf.d/20-dns-syslog.conf b/logstash/conf.d/20-dns-syslog.conf new file mode 100644 index 0000000..372e64c --- /dev/null +++ b/logstash/conf.d/20-dns-syslog.conf @@ -0,0 +1,177 @@ +input { + beats { + port => 5141 + type => "logs" + tags => ["pihole","5141"] + } +} + +filter { + if "pihole" in [tags]{ + grok { + patterns_dir => ["/etc/logstash/patterns/"] + match => { + "message" => [ + +# request - query type + "^%{DNSMASQPREFIX} query\[%{WORD:query_type}\] %{FQDN:domain_request} from %{IP:request_from}$", + # reponse domain to ip + "^%{DNSMASQPREFIX} reply %{FQDN:domain_request} is %{IP:ip_response}$", + # response domain is NXDOMAIN + "^%{DNSMASQPREFIX} reply %{FQDN:domain_request} is NXDOMAIN$", + # response config domain is NXDOMAIN + "^%{DNSMASQPREFIX} config %{FQDN:domain_request} is NXDOMAIN$", + # response config domain is no-DATA + "^%{DNSMASQPREFIX} config %{FQDN:domain_request} is NODATA-IPv[4,6]$", + # reponse domain to ip cname + "^%{DNSMASQPREFIX} reply %{FQDN:domain_request} is \<CNAME\>$", + # respone ip to domain + "^%{DNSMASQPREFIX} reply %{IP:ip_request} is %{FQDN:domain_response}$", + # piholed + "^%{DNSMASQPREFIX} \/etc\/pihole\/gravity\.list %{FQDN:blocked_domain} is %{IP:pihole}$", + # piholed local + "^%{DNSMASQPREFIX} \/etc\/pihole\/local\.list %{FQDN:blocked_domain} is %{IP:pihole}$", + # blacklist + "^%{DNSMASQPREFIX} \/etc\/pihole\/black\.list %{FQDN:blocked_domain} is %{IP:pihole}$", + # reverse response etc hosts ip to domain + "^%{DNSMASQPREFIX} \/etc\/hosts %{IP:ip_request} is %{FQDN:domain_response}$", + # reverse response etc hosts domain to ip + "^%{DNSMASQPREFIX} \/etc\/hosts %{FQDN:domain_request} is %{IP:ip_response}$", + # forward dns to + "^%{DNSMASQPREFIX} forwarded %{FQDN:domain_request} to %{IP:dns_forward_to}$", + # cached domain to ip + "^%{DNSMASQPREFIX} cached %{FQDN:domain_request} is %{IP:ip_response}$", + # cached ip to domain + "^%{DNSMASQPREFIX} cached %{IP:ip_request} is %{FQDN:domain_response}$", + # cached domain to ip cname + "^%{DNSMASQPREFIX} cached %{FQDN:domain_request} is \<CNAME\>$", + # cached domain is NXDOMAIN + "^%{DNSMASQPREFIX} cached %{FQDN:domain_request} is NXDOMAIN$", + # cached domain is no-DATA + "^%{DNSMASQPREFIX} cached %{FQDN:domain_request} is NODATA-IPv[4,6]$", + # domain is no-DATA + "^%{DNSMASQPREFIX} reply %{FQDN:domain_request} is NODATA-IPv[4,6]$", + # SRV + "^%{DNSMASQPREFIX} query\[%{WORD:query_type}\] %{HOSTNAMEPTR:request} from %{IP:request_from}$", + # SRV forwarded + "^%{DNSMASQPREFIX} forwarded %{HOSTNAMEPTR:request} to %{IP:dns_forward_to}$" + + ] + } +} + +# to do cached and cached reverse + + + if [request_from] { + mutate { + add_tag => [ "request and query type" ] + } + } + else if [ip_response] { + mutate { + add_tag => [ "response domain to ip" ] + } + } + else if [message] =~ "CNAME" and [message] =~ "reply" { + mutate { + add_tag => [ "response domain to ip CNAME" ] + } + } + else if [domain_response] and [message] =~ "reply" { + mutate { + add_tag => [ "response ip to domain" ] + } + } + else if [blocked_domain] { + mutate { + add_tag => [ "piholed" ] + } + } + else if [message] =~ "\/etc\/hosts" { + mutate { + add_tag => [ "reverse hostsfile" ] + } + } + else if [dns_forward_to] { + mutate { + add_tag => [ "dns forward" ] + } + } + else if [ip_request] and [message] =~ "cached" { + mutate { + add_tag => [ "cached ip to domain" ] + } + } + else if [domain_request] and [message] =~ "cached" { + mutate { + add_tag => [ "cached domain to ip" ] + } + } + else if [message] =~ "cached" and [message] =~ "CNAME" { + mutate { + add_tag => [ "cached domain to ip cname" ] + } + } + else if [message] =~ "cached" and [message] =~ "NXDOMAIN" { + mutate { + add_tag => [ "cached NXDOMAIN" ] + } + } + else if [NODATA-IPv4] { + mutate { + add_tag => [ "NODATA" ] + } + } + else if [NODATA-IPv6] { + mutate { + add_tag => [ "NODATA" ] + } + } + +# geoip { +# source => "ip_request" target => "ip_response" +# } +# dns { +# add_field => { "source_host" => "source_fqdn" } nameserver => [ "localhost" ] reverse => [ "source_fqdn" ] action => "replace" add_tag => [ "dns_lookup" ] +# } + + mutate { + add_field => { + "[source_fqdn]" => "%{source_host}" + } + } + + dns { + reverse => ["source_fqdn"] + action => "replace" + nameserver => ["localhost"] + hit_cache_size => 4096 + hit_cache_ttl => 900 + failed_cache_size => 512 + failed_cache_ttl => 900 + } + + + } +} + +# else if "_grokparsefailure" in [tags] { +# drop { } +# } + +output { +# stdout { codec => rubydebug } + + if "pihole" in [tags]{ +#stdout { codec => rubydebug } +# if [host] == "192.168.254.241" or [host] == "192.168.254.240" { + elasticsearch { + hosts => ["192.168.254.248:9200"] + user => "elastic" + password => "Service.1" + manage_template => false + index => "logstash-syslog-dns-%{+YYYY.MM}" + } + } +} \ No newline at end of file -- GitLab