Volatile Dienste


Einleitung

Nagios kann zwischen "normalen" und "volatilen" Diensten unterscheiden. Die is_volatile-Option in jeder Dienst-Definition erlaubt es anzugeben ob ein Dienst volatil ist oder nicht. Für die meisten User wird der Grossteil der überwachten Dienste nicht volatil, also "normal", sein. Trotzdem können volatile Dienste in einigen Fällen sehr sinnvoll sein.

Wofür sind volatile Dienst nützlich?

Volatile Dienste sind sinnvoll um...

Was ist so speziell an volatilen Diensten?

Volatile Dienste unterscheiden sich von "normalen" Diensten in drei Dingen. Jedes Mal wenn sie überprüft werden und sich in einem harten nicht-OK Status befinden, und die Überprüfung einen nicht-OK Status zurückgibt (also kein Status-Wechsel erfolgt ist) werden...

Eigentlich werden diese drei Aktionen nur ausgeführt, wenn sich der Dienst in einem nicht-OK-Status befindet und ein harter Status-Wechsel passiert ist. Mit anderen Worten, sie werden nur ausgeführt, wenn der Dienst das erste Mal in einen nicht-OK-Status wechselt. Resultieren künftige Überprüfungen auch in dem selben nicht-OK-Status aber sich der Status nicht geändert hat, werden keine Aktionen ausgeführt.

Die Macht von Zweien

Kombiniert man das Feature von volatilen Diensten und passiven Dienst-Überprüfungen, kann man einige sehr nützliche Dinge anstellen. Z.B. können SNMP-Traps, Sicherheits-Alarme, etc. von Nagios verarbeitet werden.

Wie wäre es mit einem Beispiel?
Nehmen wir an auf einem Server läuft das Programm PortSentry von Psionic Software's (es ist übrigens frei erhältlich), um Port Scans auf dieser Maschine zu erkennen und automatisch potentielle Eindringle abzuschirmen. Möchte man nun diese Port Scans von Nagios behandeln lassen, sollte man das folgende tun...

In Nagios:

In PortSentry:

Schreibt man in dem /usr/local/nagios/libexec/eventhandlers-Verzeichnis ein Shell-Skript mit dem Namen submit_check_result. Der Inhalt des Skripts sollte ungefähr wie folgt aussehen:

	#!/bin/sh

	# schreibe einen Befehl in die Nagios Befehlsdatei um
	# die Verarbeitung der Überprüfungs-Ergebnisse zu erzwingen

	echocmd="/bin/echo"

	CommandFile="/usr/local/nagios/var/rw/nagios.cmd"

	# ziehe die aktuelle Zeit in Sekunden seit UNIX epoch
	datetime=`date +%s`

	# erstelle die Befehlszeile für die Befehlsdatei
	cmdline="[$datetime] PROCESS_SERVICE_CHECK_RESULT;$1;$2;$3;$4"

	# füge die Befehlszeile am Ende der Befehlsdatei hinzu
	`$echocmd $cmdline >> $CommandFile`

Wird PortSentry allerdings unter dem User root ausgeführt, muss man einige Zusätze in das Skript einfügen um den Besitzer und die Zugriffsrechte für die Befehlsdatei so zurückzusetzen, dass Nagios und die CGIs die Datei lesen und verändern können. Genaueres über die Zugriffsrechte/Eigentümer der Befehlsdatei findet man hier.

Was passiert nun, wenn PortSentry einen Port Scan auf der Maschine entdeckt?