Erweiterte Log-Auswertung mit graylog

graylog-dashboardWatchGuard bietet einen sehr leistungsstarken Logging- und Reporting-Server: den WatchGuard Dimension Server. Allerdings möchte man manchmal die Auswertungen noch etwas spezifischer zusammenbauen. Nachdem WatchGuard die Möglichkeit bietet, die Logs zusätzlich auf einen Syslog-Server zu schreiben, lag es nahe, dort anzusetzen. Auf der Suche nach einem Syslog-Server mit hübschen Auswertungen bin ich über graylog gestolpert. Graylog basiert auf einem Linux-Elasticsearch-Stack mit einem hübschen und leistungsfähigen Web-Frontend. Die Installation ist denkbar einfach, da es das ganze Paket vorkonfiguriert für alle möglichen Umgebungen gibt, beispielsweise EC2, OpenStack, Docker, als Chef, Puppet, Ansible, Vagrant-Script, natürlich als RPMs/DEBs und tarball, oder eben auch als OVA-Template (für das ich mich entschieden habe). Ich habe also eine VM aus dem Template installiert. Die Hardware-Anforderungen für den Start sind übersichtlich: 4 GB RAM und 20 GB HDD. (letzteres ist natürlich den eigenen Bedürfnissen anpassbar).

Zunächst einmal ein mögliches Ergebnis der Auswertungen: Ich habe auf der Firewall eine Policy eingerichtet, die Zugriffsversuche auf einige Zielports (z.B. 22, 23, 3389, 8443) monitort und anschließend die IP-Adressen auf die automatische temporäre Blocklist der WatchGuard setzt. Wer versucht, per SSH oder Telnet zuzugreifen und nicht aus den erlaubten IP-Ranges kommt, ist vermutlich böse und kann daher 20min geblockt werden. Allerdings möchte ich hierzu auch eine Auswertung haben. Ebenso ist eine Auswertung über Proxies und Applications möglich:

graylog-blocked-sites

 

Installation des graylog-Servers

auf die Installation des graylog-Servers als OVA-Template gehe ich nicht weiter ein. Man sollte allerdings bedenken, daß der Server bitte HINTER der Firewall im Trusted Network stehen sollte, bei erhöhten Security-Bedürfnissen gerne auch in einer DMZ mit gezielten Policies – der Server hat so einige Ports per default offen – eine MongoDB für config-Storage, den Elasticsearch Stack, etc. Zudem ist das Auswerte-Frontend in der Default-Installation auf Port 80 unverschlüsselt. (das kann und sollte man im Produktiven Einsatz definitiv auf https umstellen).

Zu beachten sind auch die Datenschutzbestimmungen für den Zugriff auf den Logserver und das Logging personenbezogener Daten – im Gegensatz zur WatchGuard Dimension gibt es hier nicht die Möglichkeit einer Anonymisierung.

Konfiguration des graylog-Servers

zunächst muß der Syslog-Server als Input auf dem graylog-Server aktiviert sein. Unter System => Inputs kann nötigenfalls der appliance-syslog-udp Input aktiviert werden. Anschließend wird in der WatchGuard unter Setup => Logging das Logging an den graylog-Server (syslog) aktiviert.

graylog-syslog-udp

Definition der Extraktoren

Nachdem nun die Log-Nachrichten auf dem graylog-Server ankommen, können diese ausgewertet werden – allerdings müssen die Log-Nachrichten noch geparst werden, um vernünftige Schlagwörter zu erhalten. Hierzu bietet graylog die Möglichkeit, die bei Elastiksearch üblichen Methoden: JSON-Parser, GROK-Parser etc. Unter System => GROK patterns werden nun zusätzliche Patterns eingerichtet:

WatchGuardFirewall

firewall: %{NOTSPACE:UNWANTED} %{NOTSPACE:FWAction} %{NOTSPACE:src_interface} %{NOTSPACE:dst_interface} %{NOTSPACE:pckt_len} %{NOTSPACE:protocol} %{NOTSPACE:UNWANTED} %{NOTSPACE:ttl} %{IPV4:src_ip} %{IPV4:dst_ip} %{BASE10NUM:src_port} %{BASE10NUM:dst_port}

WatchGuardBlocking

firewall: msg_id="3001-1001" Temporarily blocking host %{IPV4:src_ip}

graylog-grok-patterns

graylog-manage-extractors

Die nun definierten GROK patterns müssen noch als Extraktoren aktiviert werden, hierzu gibt es den Button Manage Extractors unter System => Inputs beim jeweiligen Input, also hier dem appliance-syslog-udp Input Stream.

 

 

Die Extraktoren werden über den Klick auf Add extractor => Get Started , Load Message hinzugefügt: Man wählt unter message mit Select extractor Type den Typ Grok pattern und stellt als Pattern mit %{PATTERN-NAME} die oben verwendeten Patterns ein, also beispielsweise %{WatchGuardBlocking}. Als letztes erstellt man den Extractor vom Typ Copy Input mit dem verfügbaren vordefiniertem Konverter Key = Value Pairs To Fields. Über Sort extracors muß ggf. die Reihenfolge korrigiert werden, der Key=Value Extractor muß als letzter Parser über den Stream laufen.

graylog-extractors

Durch diese Extraktoren erhalte ich die entsprechend Felder zur Auswertung im graylog. beispielsweise src_ip, dest_ip, src_port, dest_port, oder auch die von der WatchGuard ab Version 11.12 gelieferte geo_src=”…” Information. Da diese bereits als key=value geliefert wird, wird sie vom key=value Extractor gefunden; die anderen Keys müssen von den Grok-Extraktoren gefunden werden.

Erstellen der Graphen

unter Search kann man nun im Log suchen – die Such-Queries werden dabei wie für Elastiksearch definiert: eine Suche nach dem entsprechenden Policy-Namen (hier Ports4Blocking) geht beispielsweise so:

message:*Ports4Blocking*

Über Quick values kann man nun den Graph erstellen und mit Add to dashboard auf ein Dashboard schieben.

graylog-search-to-graph

Fazit und Ausblick

Graylog ist ein sehr leistungsfähiger Syslog-Reporting-Server. Allerdings sollten die Gesamtkosten des Systems nicht unterschätzt werden: obwohl die Software Open Source ist, muß man doch mit einer erheblichen Einarbeitungszeit rechnen, bis man sich in die Gedankenwelt von Elasticsearch, Input-Streams, GROK-Filter, etc. eingearbeitet hat. Der Zeitaufwand für das obige Setup, einarbeiten in graylog und diesen Artikel dürfte grob bei einem Manntag gelegen haben – und ich hatte bereits vorher einmal Erfahrung mit einem ELK (Elastiksearch + Kibana) Stack gesammelt.

Weitere Optionen von graylog (vermutlich eine unvollständige Liste), auf die ich hier (vorerst) nicht tiefer eingehe:

  • weitere Konfigruation der Dashboards
  • Benutzerverwaltung
  • Redundanz und Erhöhung der Such-Performance durch aufbauen eines Elasticsearch Multi-Node-Clusters
  • Multi-Value-Graphen
  • Umstellung von graylog auf https
  • Absicherung des graylog-Servers (wie oben erwähnt: bitte nur in der DMZ oder im Trusted Network verwenden)

Links und Referenzen

Ein Kommentar zu “Erweiterte Log-Auswertung mit graylog”

Leave a Reply

Your email address will not be published. Required fields are marked *