Monitoring von Hosts hinter einer Firewall mit Hilfe von Icinga2 und TLS

 

Wer seine Systeme mithilfe eines Monitoring-Servers überwacht, kennt das Problem: Möchte man Dienste hinter NAT bzw. hinter einer Firewall überwachen, ist ein einfacher Check nicht mehr ausreichend. Diese Dienste sind nicht direkt aus dem Internet erreichbar. Deshalb baut man sich meist eine Brücke per SSH, NRPE oder Ähnlichem.

Mit Icinga2 wird dieses Szenario erheblich vereinfacht. Denn es bringt eine Möglichkeit mit, entfernte Instanzen abzufragen und die Ergebnisse der entfernt ausgeführten Checks lokal zu überwachen.

Icinga2 nutzt ein spezielles TCP-Protokoll für die Kommunikation zwischen allen Instanzen. Dies können Cluster-, Load-Balancing- oder einfache Master-Client Setups sein. Die Verbindung erfolgt TLS-gesichert mit Austausch von SSL-Zertifikaten und unterstützt IPv4 sowie IPv6.

Hier soll es um das Master-Client Setup gehen. Damit sind eine beliebige Anzahl Clients und ein Master gemeint. Während die Clients nur lokal konfigurierte Checks ausführen, holt der Master die Ergebnisse der einzelnen Instanzen per TLS-gesicherter Verbindung ab und veröffentlicht sie im eigenen Backend.


Anwendungsfall: Master fragt Checks des Clients ab

Mehrere hinter einer Firewall befindliche Server sollen überwacht werden. Diese sind also nicht direkt vom Monitoring-Server aus erreichbar. Die Firewall selbst hat allerdings Komplettzugriff auf diese Server. Dort wird Icinga2 installiert und es werden lokale Checks eingerichtet. Danach wird diese Instanz (Client) mit dem Monitoring-Server (Master) verbunden um dort die Checks einzuliefern bzw. abholen zu lassen.

 

Firewall-Konfiguration auf Seite des Masters

Als Erstes muss sichergestellt werden, dass der Master über Port 5665 TCP erreichbar ist. Die Kommunikation ist bidirektional, daher kann die Verbindung von beiden Servern hergestellt werden. Für die einfache Methode (CSR-Autosigning) empfehlen wir allerdings temporär die direkte Freischaltung von Port 5665 auf dem Master. Dies kann selbstverständlich nach der Installation wieder rückgängig gemacht werden.

Hier muss noch das jeweilige Interface ersetzt werden. Falls sich der Master ebenfalls hinter einer Firewall befindet, muss temporär eine NAT-Regel (inkl. FORWARD) eingefügt werden.

Auch hier bitte nicht vergessen, die in <> gesetzten Werte entsprechend anzupassen.

 

Setup des Masters

Auf dem Master wird eine SSL-CA, ein signiertes Zertifikat und ein lokaler Endpunkt mit Zonen-Objekt benötigt. Außerdem muss das API-Feature aktiviert werden. Dazu wird von Icinga2 ein Wizard mitgeliefert, welcher mit icinga2 node wizard gestartet werden kann.
Bitte unbedingt darauf achten, bei der ersten Frage ‘n’ (für Master) auszuwählen.

Der Wizard generiert außerdem einen sogenannten Ticketsalt und die Konstante NodeName in der Datei /etc/icinga2/constants.conf wird gesetzt. Beides wird für die Installation der Client-Instanzen verwendet. Also sollte man sich vergewissern, dass beides erstellt wurde:

Außerdem wurde auch eine Zone-Config generiert:

Anschließend muss Icinga2 per systemctl restart icinga2 neu gestartet werden. Bei älteren Debian-Versionen (<=7) funktioniert das mit service icinga2 restart bzw. /etc/init.d/icinga2 restart.

 

Setup des Clients

Bevor es mit der Konfiguration des Clients weiter geht, muss dort Icinga2 installiert werden.
Hier einmal beispielhaft die Installation unter Debian8/Jessie:

Für Hilfestellungen zur Installation von Icinga2 möchten wir gern auf die Offizielle Dokumentation verweisen.

Auf dem Client muss ein vom Master signiertes Zertifikat und ein lokaler Endpunkt mit Zonen-Objekt erstellt werden. Außerdem muss das API-Feature aktiviert werden. Dies kann wieder mit dem Wizard passieren.

Wenn die Firewall des Masters wie oben beschrieben konfiguriert wurde (Port 5665 direkt erreichbar), kann jetzt CSR-Autosigning verwendet werden. Das erspart das manuelle Erstellen und Signieren von Zertifikaten. Der Wizard meldet sich, falls das nicht möglich ist.

Folgende Optionen werden abgefragt:

– CN (Common Name), entspricht FQDN
– lokaler Zonen-Name, entspricht FQDN
– Master Endpunkt-Name, in ‘zones.conf’ des Masters zu finden
– Verbindungsdaten: IP, Port(5665)

Bevor der Wizard gestartet wird, muss auf dem Master ein Ticket erstellt werden:

Danach kann der Wizard erneut mit icinga2 node wizard gestartet werden.
Dieses Mal wählen wir ‘Y’ für Client.

Folgende Aufgaben erledigt der Wizard automatisch:

– Generierung eines neuen Zertifikates
– Speichern des Master-Zertifikates und Anfrage eines unterschriebenen Zertifikates vom Master
– Erstellen einer lokalen Zone und Endpunkt basierend auf FQDN des Clients
– Deaktivieren der Notifications des Clients (diese generiert der Master)

Jetzt sollte die Config wieder verifiziert werden:

Anschließend noch Icinga2 neu starten.

Nachdem man auf dem Client seine Checks konfiguriert hat, muss auf dem Master nach Client-Services gesucht werden. Der Client führt zwar schon selbständig Checks durch, allerdings weiß der Master noch nicht, welche davon er überwachen soll. Mit icinga2 node list bekommt man eine Liste mit Client-Services (bekannt durch den Sync über Port 5665). Die benötigte Config für den Master kann mit icinga2 node update-config generiert werden. Diese wird dann in /etc/icinga2/repository.d/ abgelegt.

Nach jedem Config-Update muss ein systemctl reload icinga2 ausgeführt werden. Sobald sich Änderungen an der Config des Clients ergeben, muss erneut ein icinga2 node update-config ausgeführt werden.

 

Ausblick

Das Synchronisationsprotokoll von Icinga2 verwendet TLS unter Nutzung von OpenSSL und basiert damit auf anerkannten offenen Standards. Außerdem sind dadurch Sicherheitsupdates einfach und schnell möglich. Icinga2 benötigt kaum System-Ressourcen, ist einfach zu warten und skalierbar. Durch die eigene Verschlüsselung lässt sich auch eine Art Mesh-Netzwerk in größeren Umgebungen aufbauen.

Icinga2 ist quelloffen und wird derzeit stark weiterentwickelt. Wir unterstützen Sie gern bei Ihren Planungen oder zum Einsatz von Icinga2 als Monitoring-System.

Remote-Monitoring mit Icinga2