Entfernte CheckMK-Agents überwachen (ssh/tls)

CheckMK-Agents sinf auf Pull ausgelegt, sprich der CheckMK-Server baut eine Verbindung zum Client auf und fragt die Daten ab. Dies geschieht unter Linux traditionell per xinetd oder ssh.

Das Verfahren funktioniert aber nicht, wenn der Agent nicht im Intranet hängt und keine SSH-Verbindung hergestellt werden kann/soll. (oftmals. aus Security-Gründen).

check_mk_remote

Hierfür wurde die Community-Erweiterung „check_mk_remote“ entwickelt, welche den Agent-Output in eine Datei umleitet und diese per scp auf den CheckMK Server überträgt. Die Auswertung erfolgt dann durch einen Host-spezifischen Datasource.

https://github.com/FlorianHeigl/nagios/tree/master/check_mk/check_mk_remote

Für das Verfahren von check_mk_remote ist eine passwortlose Authentifizierung, sowie ein öffentlich zugängiger SSH-Server erforderlich. Beides kann sicher betrieben werden, jedoch ist der Konfigurationsaufwand nicht zu unterschätzen und sicherheitstechnisch bedenklich, vor allem weil es 100 Kleinigkeiten zu bedenken gibt.

check_mk_push

Als Alternative habe ich eine Methode entwickelt, um den Agent-Output per https statt ssh zu übertragen.
Das Prinzip ist identisch, nur der Übertragungsweg ein ganz anderer.

Vorteile gegenüber check_mk_remote

  1. Keine aufwendige SSH-Konfiguration.
  2. keine spezielle Firewall-Freischaltung (es wird nur Port 443 benötigt, ssh ist oftmals gesperrt)
  3. Firmeninterner Web-Proxy kann benutzt werden (inkl. Authentifizierung)

Sonstige Features (beide Methoden)

  1. User-Authentifizierung
  2. verschlüsselte Übertragung (TLS/SSH)
  3. Host Status (down bei ausbleibender Übertragung)
  4. Volle checkMK-Plugin/local checks Unterstützung
  5. Sicherstellen der Übertragung
  6. extrem flexibel

Vorraussetzung:

  1. Ein öffentlich erreichbarer Webserver, dieser muss nicht der OMD sein, in diesem Fall ist ein Cronjob notwendig, welcher die Daten per scp auf den OMD kopiert. Siehe „Abschottung durch DMZ“
  2. Ein SSL-Zertifikat (optional, aber definitiv empfehlenswert, kann selbst erstellt sein.)
  3. (Apache-)User für Authentifizierung, kann über OMD-Authentifizierung erfolgen

Bestandteile

check_mk_push besteht aus 2 Bestandteilen (im Gegensatz zu check_mk_remote)

  1. dem Client-Script cmk_send_agentdata.sh, welches die Agent-Daten verschlüsselt und an CheckMK überträgt.
  2. dem php-Script mk_agentdata.php, welches Serverseitig die Daten entgegen nimmt und in eine Host-Status-Datei schreibt. (cmkresult.$HOSTNAME$)

Technisch gesehen wird der Agentoutput für die Übertragung per Base64 codiert (nicht verschlüsselt!), anschließend wird per curl eine TLS-Verbindung zum Remote-Webserver aufgebaut und die Daten werden per HTML-POST an das PHP-Script übergeben. Dieses dekodiert die Daten und schreibt sie in eine Host-spezifische Status-Datei. Das PHP-Script prüft den Schreibvorgang und liefert einen Returnstring zur Clientseitigen Auswertung.

Konfiguration von CheckMK

Die Auswertung seitens CheckMK ist in beiden Verfahren identisch.

Datasource Program

Als „Datasource Program“ wird  „Individual program call instead of agent access“ für den/die Hosts deklariert. Über die spezielle Commandline kann man eine Regel für Hosts machen (und zB. über Order/Hoststags spezifizieren)

Hierbei ist darauf zu achten, dass der Host so heißt wie die Datei!
Der Hostname der cmkresult.* Datei wird hierbei Clientseitig definiert und mit an das PHP-Script übertragen.

Hoststatus

Um den Hoststatus aktuell zu halten wird weiterhin ein „Host Check Command“ angelegt. Dieser gilt wiederum für alle entsprechend getagte Hosts…

Ich empfehle einen zeitlichen Buffer, wenn eine Übertragung ausbleibt muss der Server nicht zwangsweise down sein! Das Internet ist erfahrungsgemäß relativ anfällig für temporäre Störungen …

Alternativ kann man auch einen Service pro Host anlegen und diesen überwachen, hierfür ist jedoch eine Host-Check-Command-Regel pro Host notwendig (Stand OMD 1.2.8b12), sowie ein manueller Service (kein manual Check“!).

Wobei DUMMYHOST immer dem entsprechendem Host angepasst werden muss… $HOSTNAME$ funktioniert hier leider nicht!

ACHTUNG! Hoststatus ist UP oder DOWN! Host-Status Warning gibt es nicht… Service-Status Warning bedeutet hier Host-Status UP.

User für Remote-Agent (optional)

Wenn der OMD-Server aus dem Internet heraus erreichbar ist (siehe „Abschottung durch DMZ“) ist ein Benutzer zur Authentifizierung erforderlich.

Hierfür kann ein CheckMK-User mit Authentication „machine account“ und Passwort erstellt werden. Der Zugriff klappt in einer Standart-OMD Installation auch ohne Rollen, wenn das PHP-Script im Standartpfad liegt.

Abschottung durch DMZ

Wenn der OMD-Server nicht aus dem Internet heraus erreichbar sein soll, kann man das PHP-Script auf einen Webserver in der DMZ betreiben und die Daten von dort abrufen. Hierfür kann zB. ein automatischer Cronjob auf dem OMD eingerichtet werden, welcher die Status-Dateien per SCP abholt.

screenshot-area-2016-05-03-083325

Betrieb ohne DMZ

screenshot-area-2016-05-03-084049

Betrieb mit DMZ

Crontab für DMZ-Webserver

Falls der Webserver in der DMZ stehen soll, hier ein Beispiel für einen Cronjob.

–remove-source-files ist wichtig, da die Hostdateien sonst IMMER aktuell sind!

Notwendige Dateien

cmkserver.cfg (Agent)

Die Konfigurations-Datei cmkserver.cfg liegt standardmäßig unter /etc/check_mk/ und beinhaltet URL, Benutzername & Passwort. Bitte keine Apostrophs benutzen!

cmk_send_agentdata.sh (Agent)

Das Übertragungssript cmk_send_agentdata.sh wird standardmäßig unter /usr/local/bin/ abgelegt.

  • Der Aufruf erfolgt per crontab.
  • Zu Testzwecken kann der Parameter „–debug“ mit angegeben werden.
  • Das Script liefert einen boolschen Returncode.

mk_agentdata.php (OMD)

Das serverseitige Script nimmt die Daten entgegen und schreibt diese in lokale Host-Status-Dateien.
Standart-Pfad Script:                      $OMDROOT/var/www/
Standart-Pfad Host-Status-Dateien: $OMDROOT/var/tmp/

Kommentar schreiben

3 Kommentare.

  1. Hi Neeloj,

    vielen Dank für deine Rückmeldung (privat dokumentiere ich offenbar besser wie beruflich 🙄 )

    Zu deinen Fragen:
    1. Muss ich manuell den Host auf Check_MK server erstellen?
    -> ja, der Host muss manuell angelegt werden, sollte ich in der Dokumentation ergänzen…

    2. Was wenn ich als Agent Windows hab und nicht Linux?
    -> bei Windows bin ich leider raus, Powershell sollte das wohl auch können,
    aber keine Ahnung wie

    • Vielen Dank Erdo für deine Antwort.

      Also besser kann man nicht erklären 😀

      Super dann kümmere ich mich um die beide Punkte, ich mag Windows auch nicht aber naja :mrgreen:

      Danke schön noch mal

  2. Vielen Dank für die ausführliche Erklärung 🙂

    Eine von den besten den ich je gesehen habe :-).

    Ich habe 2 fragen bitte:

    1. Muss ich manuell den Host auf Check_MK server erstellen?
    2. Was wenn ich als Agent Windows hab und nicht Linux?

Kommentar schreiben


Hinweis - Du kannst dies benutzenHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

<\/body>