Vorwort

Diese Anleitung zeigt, wie man mit Hilfe von Elastic / ELK bei bestimmten Server-Ereignissen eine Benachrichtigung versenden kann.

Als Beispiel verwenden wir hier die SSH Logs. Aber durch kleine Änderungen der Konfiguration ist es auch möglich auf andere Log Ereignisse zu reagieren.

Falls es Ihnen nur um die SSH Logs geht, würde ich Ihnen eine einfachere Möglichkeit empfehlen: ssh-login-telegram-notification. Mittels einer vorhandenen Elastic Instanz ergeben sich deutlich mehr Möglichkeiten, die bei Ereignissen Benachrichtigungen auslösen.

Weitere mögliche Ereignisse:

  • Es findet ein DDoS Angriff statt. Der Angreifer wird geblockt.
  • Die Festplatte wird langsam voll. Es wird versucht die Festplatte von unnötigen Daten zu säubern.
  • Ein Backup wurde nicht vollständig durchgeführt. Der Administrator wird benachrichtigt.

Was wird benötigt?

Folgende Software sollte bereits vorhanden und eingerichtet sein:

  • Logstash
  • Elasticsearch
  • Kibana

Als Messenger werde ich das Braintower SMS Gateway verwenden, da hier rein zufällig eins herumsteht ;).

Ereignis-Quelle

Um SSH Ereignisse zu erhalten muss die Zeile, die mit auth,authpriv.* anfängt, bearbeitet werden. Wir ersetzen den Pfad /var/log/auth.log durch @@192.168.100.50:51400 .

Erklärung: mit @@ werden syslog Ereignisse per UDP an 192.168.100.50 mit den Port 51400 gesendet, Die Angaben können geändert werden, müssen dann aber auch im weiteren Verlauf der Anleitung angepasst werden.

Syslog Input

Jetzt wird ein Syslog Listener benötigt (wenn noch nicht vorhanden). Die Datei muss in Logstash Konfigurations-Verzeichnis erstellt werden. Das Konfigurations-Verzeichnis ist normalerweise /etc/logstash/conf.d/

Elasticsearch Output

Der Elasticsearch Output sollte so, oder ähnlich aussehen:

Zwischenergebnis

Die SSH Logs sollten jetzt in Kibana auftauchen:

SSH Login:

SSH Logout:

SSH Logs vorbereiten

Die Logs müssen aufsplittet und zugeordnet werden. Nach der Änderung sollten folgende Felder in Kibana auftauchen ssh.type, ssh.action, ssh.method, src.ip, src.port und user.

Elasticsearch Lookup

Um eine Logout Meldung der passenden Login Meldung zuzuordnen, verwenden wir den Port und die IP der Meldungen:
Login: Accepted publickey for root from 192.168.100.100 port 51896 ssh2: RSA SHA256:Geheim…
Logout: Disconnected from 192.168.100.100 port 51896

Elasticsearch Query erstellen:

Und der dazugehörige Logstash Filter:

Es müssten jetzt neue Felder in den Logout Meldungen auftauchen: ssh.login-timestamp, ssh.login-user, ssh-login-message. Dabei handelt es sich um Daten, die aus der Login Meldung stammen.

Verbindungsdauer

Um die Verbindungsdauer herauszufinden, müssen wir die Differenz zwischen dem Logout Zeitpunkt und Login Zeitpunkt berechnen:

In Kibana sollte ein neues Feld, mit der Dauer der Verbindung in Sekunden, auftauchen: ssh.duration.

GeoIP

Damit wir die IP auflösen können sind noch einige Einstellungen notwendig.
Der Typ GeoIP ist der Elasticsearch noch Unbekannt. Das ändern wir mit einem Plugin:

Es ist ein Neustart von Elasticsearch notwendig.

Der Typ von src.ip.location und dst.ip.location muss auf geo_point festgelegt werden.
In Kibana unter Dev Tools ist es möglich mit der Elasticsearch Datenbank zu kommunizieren. Das machen wir uns zunutze.

JSON in der Konsole eingeben und mit Klick auf den grünen Pfeil ausführen.
Rechts sollte jetzt folgende Ausgabe stehen:

Logstash Filter für GeoIP Auflösung erstellen und logstash neustarten:

SMS Gateway

Es wird ein Logstash Plugin benötigt um Scripte auszuführen:

Nach der Installation muss Logstash neu gestartet werden.

Bash Script erstellen und die Variablen USERNAME, PASSWORD & HOST anpassen.

 

Die Felder [output][smsgw][mode] und [output][smsgw][to] müssen angepasst werden:

[output][smsgw][mode] [output][smsgw][to] Beschreibung
group ID (empfohlen) oder Name einer Benutzergruppe Mit dieser Option können sie eine SMS an eine Benutzergruppe versenden.
Benutzergruppen werden über Konfiguration – Gruppen verwaltet.
Die Verwendung von Gruppen erfordert die Lizenzierung des Moduls Empfängergruppen.
number Telefonnummer des Empfängers Mit dieser Option können Sie eine SMS an eine einzelne Telefonnummer versenden. (Standard)
telgroup ID (empfohlen) oder Name einer Benutzergruppe Mit dieser Option können sie eine Nachricht mittels Automatik an eine Benutzergruppe versenden.
Automatik bedeutet es wird zunächst versucht die Nachricht per Telegram zu versenden, schlägt dies fehl wird eine SMS versandt.
Benutzergruppen werden über Konfiguration – Gruppen verwaltet.
Die Verwendung von Gruppen erfordert die Lizenzierung des Moduls Empfängergruppen.
telnumber Telefonnummer des Empfängers Mit dieser Option können Sie eine Nachricht mittels Automatik an eine einzelne Telefonnummer versenden.
Automatik bedeutet es wird zunächst versucht die Nachricht per Telegram zu versenden, schlägt dies fehl wird eine SMS versandt.
teluser ID (empfohlen) oder Name eines Kontakts aus dem Adressbuch Mit dieser Option können sie eine Nachricht mittels Automatik an einen Kontakt senden.
Automatik bedeutet es wird zunächst versucht die Nachricht per Telegram zu versenden, schlägt dies fehl wird eine SMS versandt.
Kontakte werden über Konfiguration – Adressbuch verwaltet.
user ID (empfohlen) oder Name eines Kontakts aus dem Adressbuch Mit dieser Option können sie eine SMS an einen Kontakt senden.
Kontakte werden über Konfiguration – Adressbuch verwaltet.
Tomasz Pordzik

Tomasz Pordzik

Auszubildender

Programmieren ist für diesen Code-Padawan die beste Gelegenheit seine vornehme Blässe zu kultivieren. Teilt sich seine Wohnung mit zwei Frettchen und seiner Freundin. Immer zu einem Small Talk über theoretische Physik aufgelegt. Trinkt seinen Kaffee schwarz und mit 5 kg Zucker. Für Braintower schreibt er über die Themen Monitoring und Reporting und die Weiterentwicklung des SMS Gateways.

Gefällt dir der Artikel? Bitte teile ihn!
Share on Facebook
Facebook
9Share on Google+
Google+
0Share on LinkedIn
Linkedin
Email this to someone
email
Tweet about this on Twitter
Twitter