Logastash Filebeat Suricata pfSense Kibana

Ich habe eine pfSense laufen und möchte natürlich gerne wissen was so alles passiert. Da ist mir direkt Suricata bzw. Snort in en Kopf bekommen. Snort ist leider nicht ganz so performant wie Suricata. Unterscheiden sich wohl nur darin das Suricata Multi-Threaded ist und Snort nicht.
Also gut habe ich mir für Suricata entschieden. Da ich nun auch sehen möchte was alles in meinem Netzwerk passiert bzw. geblockt wird habe ich mich entschieden meine lieblings Software Kibana zu nutzen.

Installation von Suricata auf der pfSense

Die installation und Konfiguration ist denkbar einfach.
Nachdem wir in der pfSense Suricata installiert haben und die ersten Rules erstellt haben ist der rest ganz einfach.

Zuerst aktivieren wir das Suricata direkt im JSON format loggen soll. Das ist genau das was wir brauchen.

Suricata

Jetzt müssen wir natürlich noch den Filebeat installieren der uns dann auch die Logs schickt damit wir diese auch verarbeiten könnten.
Da Elastic keine offiziell keine Version für BSD* supported bauen wir uns diese einfach auf den Nightly Builds 😉

Lasst uns nun zuerst den Hash des letzten Releases aus dem Repo herausfinden:

curl -XGET https://api.github.com/repos/elastic/beats/git/refs/heads/master

Hier sollten wir dann nun folgenden Output bekommen:

{
  "ref": "refs/heads/master",
  "url": "https://api.github.com/repos/elastic/beats/git/refs/heads/master",
  "object": {
    "sha": "b9eba6ea246544102af0b4275c905af3c14181a5",
    "type": "commit",
    "url": "https://api.github.com/repos/elastic/beats/git/commits/b9eba6ea246544102af0b4275c905af3c14181a5"
  }
}

In diesem Fall wäre das aktuelle Release mit dem HASH b9eba6ea246544102af0b4275c905af3c14181a5 zu finden.
Jetzt einfach hier nach dem Hash suchen und das BSD-AMD64 Binary runter laden und direkt an die richtige Stelle kopieren 😉

cd ~
fetch https://beats-nightlies.s3.amazonaws.com/jenkins/filebeat/609-b9eba6ea246544102af0b4275c905af3c14181a5/filebeat-freebsd-amd64

mkdir /etc/filebeat  
mv ~/filebeat-freebsd-amd64 /etc/filebeat/  
chmod +x /etc/filebeat/filebeat

Wir erstellen uns nun eine Filebeat Konfiguration in /etc/filebeat/filebeat.yml

filebeat:  
  prospectors:
    -
      paths:
        - /var/log/suricata/*/eve.json 
      input_type: log
      document_type: SuricataIDPS 
output:  
  logstash:
    hosts: ["192.0.2.15:5044"]

So, auf der pfSense haben wir nun alles erledigt. Jetzt müssen wir nur noch Filebeat starten. Ich habe dazu das Paket shellcmd installiert und habe den command /etc/filebeat/filebeat eingefügt und rebootet. Filebeat wird dann beim booten automatisch gestartet.

Jetzt konfigurieren wir Logstash

Ich gehe davon aus das ihr Logstash schon installiert habt. Um das ganze noch hübsch zu gestellten habe ich noch GEOIP installiert.

cd /etc/logstash  
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz  
gzip -d GeoLiteCity.dat.gz  

Jetzt noch schnell eine Konfiguration für den Import anlegen damit wir auch alle Daten in unserer Elasticsearch Datenbank haben:

input {  
  beats {
    port => 5044
    codec => json
  }
}

filter {  
  if [type] == "SuricataIDPS" {
    date {
      match => [ "timestamp", "ISO8601" ]
    }
    ruby {
      code => "if event['event_type'] == 'fileinfo'; event['fileinfo']['type']=event['fileinfo']['magic'].to_s.split(',')[0]; end;"
    }
  }

  if [src_ip]  {
    geoip {
      source => "src_ip"
      target => "geoip"
      #database => "/etc/logstash/GeoLiteCity.dat"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
      convert => [ "[geoip][coordinates]", "float" ]
    }
    if ![geoip.ip] {
      if [dest_ip]  {
        geoip {
          source => "dest_ip"
          target => "geoip"
          #database => "/etc/logstash/GeoLiteCity.dat"
          add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
          add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
        }
        mutate {
          convert => [ "[geoip][coordinates]", "float" ]
        }
      }
    }
  }
}

output {  
  elasticsearch {
    host => localhost
  }
}

Jetzt gibt es im Kibana auch schon etwas zu sehen!

Und das war es schon. Jetzt solltet ihr in eurem Dashboard schon eine ganze menge Einträge sehen.

Screenshot 2016-06-18 11.55.10

Leave a Reply

  

  

  

5 × 3 =