Checkmk Monitoring mit Let’s Encrypt SSL

System-Monitoring mit Checkmk

Checkmk – Die IT-Monitoring Software setzt neue Standards für effektives IT-Monitoring. Einfaches Aufsetzen, beste Skalierbarkeit und ein hoher Funktionsumfang begeistern immer mehr Anwender. Der Clou aber sind die über mehr als 1800 mitgelieferten Check-Plugins, die sich vollautomatisch konfigurieren.

Unter https://checkmk.de/videos.html wird sehr ausführlich und eindrucksvoll in Videos dargestellt, welche Möglichkeiten des Checkk-Monitorings bestehen. Ich zeige Ihnen in dieser Anleitung, wie Sie Checkmk auf einem Ubuntu Server 20.04.x installieren, einen ersten Host im Monitoring erstellen und diesen Host (Server) hinsichtlich seines System-Status und der eingesetzten Nextcloud-Version überwachen.

Wechseln Sie in den privilegierten Benutzermodus und laden sich die Checkmk-Software herunter:

sudo -s
wget https://checkmk.de/support/1.6.0p13/check-mk-raw-1.6.0p13_0.focal_amd64.deb

Um das Paket installieren zu können nutzen wir gdebi: aktualisieren Sie den Server und installieren die gdebi-Software direkt aus dem Ubuntu-Repository:

apt update && apt upgrade && apt install -y gdebi-core

Nach der Aktualisierung und Vorbereitung des Systems können wir mittels

gdebi check-mk-raw-*.deb

die Monitoringsoftware Checkmk direkt installieren und im Anschluß die Version mittels

omd version

überprüfen. Um Checkmk verschlüsselt, also mittels ssl verwenden zu können, fügen wir das Repository „universe“ hinzu:

apt update
apt install -y software-properties-common
add-apt-repository universe
apt update

und installieren die certbot Software, um die Let’s Encrypt Zertifikate requestieren zu können:

sudo apt install certbot python3-certbot-apache

Zudem erstellen wir das Verzeichnis für die Zertifikate und einen Diffie-Hellman-Schlüsselaustausch, um die Sicherheit des Monitoring-Systems zu erhöhen:

mkdir -p /etc/apache2/ssl
openssl dhparam -out /etc/apache2/ssl/dhp-4096.pem 4096

Konfigurieren Sie den Webserver Apache2 für Ihre Domäne – passen Sie unbedingt die Werte für „ihre.domain.de“ und „ihre.email.de“ an:

nano /etc/apache2/sites-available/000-default.conf
ServerName ihre.domain.de
ServerAlias ihre.domain.de
ServerAdmin ihre@email.de

Testen Sie die Konfiguration und starten dann den Webserver Apache2 neu

apache2ctl configtest && systemctl restart apache2

Ordern Sie jetzt die SSL-Zertifikate für Ihre Domäne von Let’s Encrypt mittels certbot:

certbot --apache

Wählen Sie Ihre Domäne (1) und dann den redirect (2) im certbot-Dialog aus:

Öffnen Sie die SSL-Konfiguration von Apache2 und tragen sowohl den „dhp-4096.pem“, als auch den RequestHeader im <VirtualHost> Block unter den „SSL Certificate“-Einträgen ein:

nano /etc/apache2/sites-available/000-default-le-ssl.conf
SSLOpenSSLConfCmd DHParameters "/etc/apache2/ssl/dhp-4096.pem"
RequestHeader set X-Forwarded-Proto "https"

Sichern Sie nun noch den Apapche2 Webserver etwas ab:

a2dismod status && nano /etc/apache2/conf-available/security.conf
ServerTokens Prod
ServerSignature Off
TraceEnabled Off

Tragen Sie noch Ihren Servernamen in die Apache2-Konfigurationsdatei (/etc/apache2/apache2.conf)

nano /etc/apache2/apache2.conf

ein, indem Sie die nachfolgende Zeile in die erste Zeile der Konfiguration kopieren. Bitte ersetzen Sie ihre.domain.de mit Ihrer „echten“ Domain!

ServerName ihre.domain.de

Aktivieren Sie die Apapche2 HEADER-Module, überprüfen dann die Konfiguration und starten zuletzt den Webserver neu:

a2enmod ssl headers && apache2ctl configtest && systemctl restart apache2

Um Checkmk nun im Web nutzen zu können muss eine Instanz (bspw. „IT_SERVICES„) instanziiert werden:

omd create it_services

Starten Sie die neue Checkmk-Site (it_services) und rufen diese dann im Web auf:

omd start it_services

Bevor Sie sich anmelden ändern Sie noch das in der Konsole angezeigte Standardpasswort. Dazu wechseln Sie mit „su – it_services“ die Session und führen dann den Passwortbefehl aus:

su - it_services
htpasswd -m ~/etc/htpasswd cmkadmin

Im Anschluss daran können Sie sich als cmkadmin und dem zuvor geänderten Passwort sicher am Monitoring-System anmelden:

https://<ihre-domäne.de>/it_services

Richten Sie noch das automatische Erneuern der SSL-Zertifikate mittels cron-job ein:

crontab -e

Fügen Sie die nachfolgende Zeile der crontab-Datei hinzu, um bspw. immer Sonntags um 02:05 Uhr die Zertifikate zu erneuern und im Fall einer Erneuerung auch den Webserver neu starten zu lassen:

5 2 * * 6 /usr/bin/certbot renew --renew-hook 'service apache2 restart'

Wechseln Sie nun auf Ihren Host, also den zu überwachenden Nextcloud-Server und laden den Checkmk-Agent herunter:

wget https://<ihre.domain.de>/it_services/check_mk/agents/check-mk-agent_1.6.0p13-1_all.deb

und installieren das Paket mittels gdebi auf dem Nextcloud-Server:

sudo -s
apt install -y gdebi-core python
gdebi check-mk-agent_*.deb

Erstellen Sie nun den Nextcloud-Check im Verzeichnis „/usr/lib/check_mk_agent/plugins/“ und passen ggf. die Variable „$baseDir“ an, sofern Nextcloud nicht unter „/var/www/nextcloud“ installiert wurde:

nano /usr/lib/check_mk_agent/plugins/check_nextcloud_update.php
#! /usr/bin/env php
<?php
$baseDir = "/var/www/nextcloud";
function getNewVersion($baseDir)
{
    require $baseDir . "/config/config.php";
    $pdo = new PDO(sprintf("mysql:host=%s;dbname=%s", $CONFIG["dbhost"], $CONFIG["dbname"]), $CONFIG["dbuser"], $CONFIG["dbpassword"]);
    $query = $pdo->query("
        SELECT `configvalue`
        FROM `oc_appconfig`
        WHERE `appid` = 'core' AND `configkey` = 'lastupdateResult'
    ");
    if (!$query->rowCount()) {
        return null;
    }
    $json = json_decode($query->fetchObject()->configvalue, true);
    if ($json === null) {
        return null;
    }
    if (!is_array($json)) {
        return null;
    }
    if (empty($json)) {
        return true;
    }
    if (!isset($json["version"])) {
        return null;
    }
    if (!is_string($json["version"])) {
        return null;
    }
    return $json["version"];
}
function getCurrentVersion($baseDir)
{
    require $baseDir . "/version.php";
    return implode(".", $OC_Version);
}
function output($state, $message)
{
    printf("%d Nextcloud_Version - %s\n", $state, $message);
}
$newVersion = getNewVersion($baseDir);
$currentVersion = getCurrentVersion($baseDir);
if ($newVersion === null) {
    output(1, "Unable to read new version");
} elseif (!is_string($currentVersion)) {
    output(1, "Unable to read current version");
} elseif ($newVersion === true or $newVersion === $currentVersion) {
    output(0, sprintf("No update available (installed version: %s)", $currentVersion));
} else {
    output(1, sprintf("An update to version %s is available (installed version: %s)", $newVersion, $currentVersion));
}

Der Check muss nun noch als ausführbar markiert werden:

chmod +x /usr/lib/check_mk_agent/plugins/check_nextcloud_update.php

Nach einem Scan bzgl. neuer Services in Checkmk für den Nextcloud-Server (Host) werden verschiedene Systemchecks sowie dieser Nextcloud-Check angezeigt. Nach der Übernahme und Aktivierung der Services wird Ihr Nextcloud-Server mittels Checkmk bereits überwacht.

Achten Sie darauf, dass Ihre Hosts den TCP-Port 6556 benötigen, um mit dem Checkmk-Server zu kommunizieren. Viel Spaß und viel Erfolg mit Checkmk. Über eine Spende würden Sich meine Zwillinge, meine Frau und ich sehr freuen!

© Carsten Rieger IT-Services

Carsten Rieger

Carsten Rieger ist ein angestellter Senior IT-Systemengineer und zudem auch als Kleinunternehmer (Freelancer) aktiv. Er arbeitet seit mehr als 15 Jahren im Linux- und Microsoftumfeld, ist ein Open Source Enthusiast und hoch motiviert, Linux Installationen und Troubleshooting durchzuführen. Dabei arbeitet er vorrangig mit Debian und Ubuntu Linux, Nginx und Apache Webservern, MariaDB/MySQL/PostgreSQL, PHP, Cloud Infrastrukturen (bspw. Nextcloud) und auch vielen anderen Open Source Projekten (bspw. Roundcube). Zudem engagiert er sich ehrenamtlich für die Dr. Michael & Angela Jacobi Stiftung - und das schon seit mehr als 7 Jahren.