So installierst du die Icinga 2 Überwachungssoftware unter Debian 12

Icinga 2 ist ein Open-Source-Überwachungssystem, das die Verfügbarkeit von Netzwerkressourcen überprüft, Nutzer über Ausfälle benachrichtigt und Leistungsdaten für die Berichterstattung generiert. Mit Icinga2 kannst du Netzwerkdienste (SMTP, POP3, HTTP, NNTP, ping), Host-Ressourcen (CPU-Auslastung, Festplattennutzung) und Netzwerkkomponenten (Switches, Router, Temperatur- und Feuchtigkeitssensoren) überwachen. Es kann mit Nagios-Plugins integriert werden.

In der folgenden Anleitung erfährst du, wie du Icinga2 auf einem Debian 12 Server installierst und ihn mit einem Client-Knoten verbindest. Anstelle des standardmäßigen Apache-Servers werden wir Nginx verwenden, um Icinga2 Web zu betreiben.

Voraussetzungen

  • Zwei Rechner mit Debian 12. Einer davon wird als Master-Server und der andere als Client für die Überwachung fungieren.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten auf beiden Servern.
  • Einen vollqualifizierten Domainnamen (FQDN) für den Master-Server, icinga.example.com, und den Client-Knoten, client.example.com.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo apt update && sudo apt upgrade
    
  • Ein paar Pakete, die dein System benötigt.
    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring ufw unzip -y
    

    Einige dieser Pakete sind möglicherweise bereits auf deinem System installiert.

Schritt 1 – Firewall auf dem Master-Server konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Debian wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.

Überprüfe, ob die Firewall läuft.

$ sudo ufw status

Du solltest die folgende Ausgabe erhalten.

Status: inactive

Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.

$ sudo ufw allow OpenSSH

Erlaube Port 5665, den der Icinga2-Client benötigt, um sich mit dem Server zu verbinden.

$ sudo ufw allow 5665

Erlaube auch HTTP- und HTTPS-Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Aktiviere die Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Überprüfe den Status der Firewall erneut.

$ sudo ufw status

Du solltest eine ähnliche Ausgabe sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
5665                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
5665 (v6)                  ALLOW       Anywhere (v6)

Schritt 2 – Installiere MariaDB Server

Debian 12 wird mit der neuesten Version von MariaDB ausgeliefert. Du kannst sie mit einem einzigen Befehl installieren.

$ sudo apt install mariadb-server

Überprüfe die Version von MySQL.

$ mysql --version
mysql  Ver 15.1 Distrib 10.11.4-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

Führe das MariaDB-Skript zur sicheren Installation aus.

$ sudo mariadb-secure-installation

Du wirst nach dem Root-Passwort gefragt. Drücke die Eingabetaste, denn wir haben kein Passwort dafür festgelegt.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):

Als nächstes wirst du gefragt, ob du zur Unix-Socket-Authentifizierungsmethode wechseln willst. Mit dem unix_socket Plugin kannst du deine Betriebssystem-Zugangsdaten verwenden, um dich mit dem MariaDB-Server zu verbinden. Da du bereits ein geschütztes Root-Konto hast, gibst du n ein, um fortzufahren.

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n

Als nächstes wirst du gefragt, ob du dein Root-Passwort ändern möchtest. Unter Debian 12 ist das Root-Passwort eng mit der automatischen Systemwartung verknüpft, daher solltest du es nicht ändern. Gib n ein, um fortzufahren.

 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n

Als nächstes werden dir einige Fragen gestellt, um die Sicherheit von MariaDB zu verbessern. Gib Y ein, um anonyme Benutzer zu entfernen, Remote-Root-Logins zu verbieten, die Testdatenbank zu entfernen und die Berechtigungstabellen neu zu laden.

 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Du kannst die MariaDB-Shell aufrufen, indem du sudo mysql oder sudo mariadb in die Befehlszeile eingibst.

Schritt 3 – MariaDB konfigurieren

Melde dich in der MariaDB-Shell an. Gib dein Root-Passwort ein, wenn du dazu aufgefordert wirst.

$ sudo mysql

Erstelle die Icinga-Datenbank.

MariaDB [(none)]> CREATE DATABASE icinga2;

Erstelle das SQL-Benutzerkonto für Icinga2. Ändere die Datenbank und den Benutzernamen nicht, da sie bereits standardmäßig eingestellt sind. Wenn du sie ändern möchtest, musst du bei der Installation des MySQL-Treibers in Schritt 5 einige zusätzliche Schritte durchführen. Wenn du das Passwort eingibst, bekommst du eine Fehlermeldung und wirst dann zur Neukonfiguration aufgefordert, bei der du deinen eigenen Datenbanknamen und die Benutzer angeben kannst.

MariaDB [(none)]> CREATE USER 'icinga2'@'localhost' IDENTIFIED BY 'Your_password2';

Erteile dem Benutzer alle Rechte für die Datenbank.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2'@'localhost';

Da wir den Root-Benutzer nicht ändern, solltest du einen weiteren SQL-Benutzer für die Durchführung von Verwaltungsaufgaben anlegen, die eine Passwortauthentifizierung erfordern. Wähle ein sicheres Passwort für diesen Benutzer.

MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;

Lösche die Benutzerrechte.

MariaDB [(none)]> FLUSH PRIVILEGES;

Beende die Shell.

MariaDB [(none)]> exit

Schritt 4 – Installiere Icinga2 und die Überwachungsplugins auf dem Master-Server

Wir verwenden das offizielle Icinga2-Repository für die Installation. Lade den Icinga2 GPG-Schlüssel herunter und importiere ihn.

$ wget -O - https://packages.icinga.com/icinga.key | sudo gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg

Führe die folgenden Befehle aus, um die Informationen zum Icinga2-Repository zu erstellen und der APT-Quellenliste hinzuzufügen.

$ echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-`lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/debian icinga-`lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list

Aktualisiere die Liste der System-Repositories.

$ sudo apt update

Installiere Icinga2, Icingacli und die Überwachungsplugins.

$ sudo apt install icinga2 monitoring-plugins -y

Schritt 5 – Installiere den IDO MySQL-Treiber auf dem Master-Server

Damit Icinga2 funktionieren kann, braucht es eine Datenbank. Dazu müssen wir den IDO MySQL-Treiber installieren und die Datenbankverbindung einrichten. Führe den folgenden Befehl aus, um den MySQL-Treiber zu installieren.

$ sudo apt install -y icinga2-ido-mysql

Als nächstes wirst du gefragt, ob du die Funktion ido-mysql aktivieren möchtest. Wähle Ja, um fortzufahren.

Icinga IDO-MySQL-Funktion

Als Nächstes wirst du aufgefordert, den Treiber einzurichten und mit dem Dienstprogramm dbconfig-common eine Datenbank zu erstellen. Wähle Ja, um fortzufahren.

Datenbank für Icinga2 konfigurieren

Als nächstes wirst du nach dem MySQL-Passwort für die icinga2-Datenbank gefragt. Gib das in Schritt 3 konfigurierte Passwort ein, um fortzufahren.

Datenbank-Passwort für Icinga2 eingeben

Du wirst erneut aufgefordert, das Passwort zu bestätigen.

Icinga2 Passwort bestätigen

Du kannst die Details der Datenbank in der Datei /etc/icinga2/features-available/ido-mysql.conf überprüfen.

$ sudo cat /etc/icinga2/features-available/ido-mysql.conf
/**
 * The db_ido_mysql library implements IDO functionality
 * for MySQL.
 */

library "db_ido_mysql"

object IdoMysqlConnection "ido-mysql" {
  user = "icinga2",
  password = "Your_password2",
  host = "localhost",
  database = "icinga2"
}

Aktiviere die Funktion ido-mysql.

$ sudo icinga2 feature enable ido-mysql
Enabling feature ido-mysql. Make sure to restart Icinga 2 for these changes to take effect.

Starte den Icinga2-Dienst neu.

$ sudo systemctl restart icinga2

Überprüfe den Status des Dienstes.

$ sudo systemctl status icinga2
? icinga2.service - Icinga host/service/network monitoring system
     Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/icinga2.service.d
             ??limits.conf
     Active: active (running) since Mon 2024-01-08 07:35:29 UTC; 4s ago
    Process: 15404 ExecStartPre=/usr/lib/icinga2/prepare-dirs /etc/default/icinga2 (code=exited, status=0/SUCCESS)
   Main PID: 15411 (icinga2)
     Status: "Startup finished."
      Tasks: 14
     Memory: 13.6M
        CPU: 858ms
     CGroup: /system.slice/icinga2.service
             ??15411 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??15433 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??15438 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log

Schritt 6 – Icinga2 API konfigurieren

Um die Icinga2-Überwachung über HTTP zu verwalten und zu konfigurieren, musst du die Icinga2-API konfigurieren. Führe den folgenden Befehl aus, um die Icinga2-API zu aktivieren, TLS-Zertifikate für Icinga2 zu erzeugen und die Icinga2-Konfigurationen zu aktualisieren.

$ sudo icinga2 api setup

Du wirst eine ähnliche Ausgabe erhalten.

information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca//ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca//ca.crt'.
information/cli: Generating new CSR in '/var/lib/icinga2/certs//icinga.example.com.csr'.
information/base: Writing private key to '/var/lib/icinga2/certs//icinga.example.com.key'.
information/base: Writing certificate signing request to '/var/lib/icinga2/certs//icinga.example.com.csr'.
information/cli: Signing CSR with CA and writing certificate to '/var/lib/icinga2/certs//icinga.example.com.crt'.
information/pki: Writing certificate to file '/var/lib/icinga2/certs//icinga.example.com.crt'.
information/cli: Copying CA certificate to '/var/lib/icinga2/certs//ca.crt'.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Reading '/etc/icinga2/icinga2.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Updating 'NodeName' constant in '/etc/icinga2/constants.conf'.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating 'ZoneName' constant in '/etc/icinga2/constants.conf'.
information/cli: Backup file '/etc/icinga2/constants.conf.orig' already exists. Skipping backup.
Done.

Now restart your Icinga 2 daemon to finish the installation!

Der obige Befehl erstellt eine /etc/icinga2/conf.d/api-users.conf Datei mit dem Standardbenutzer root, der alle Berechtigungen für die Icinga2 API hat. Wir brauchen einen neuen Benutzer mit den für Icinga Web erforderlichen minimalen Berechtigungen.

Öffne die Datei api-users.conf zum Bearbeiten.

$ sudo nano /etc/icinga2/conf.d/api-users.conf

Füge den folgenden Code am Ende der Datei ein. Wähle ein starkes Passwort für die API.

/** api for icingaweb2 */
object ApiUser "icingaweb2" {
  password = "PassWordApiIcingaWeb2"
  permissions = [ "status/query", "actions/*", "objects/modify/*", "objects/query/*" ]
}

Notiere dir die Anmeldedaten, die später für den Zugriff auf die Website benötigt werden. Der Icinga2 API-Server lauscht standardmäßig auf Port 5665. Starte den Dienst neu, damit die Änderungen wirksam werden.

$ sudo systemctl restart icinga2

Der nächste Schritt ist die Installation der Icinga-Webschnittstelle. Sie ist für Apache vorkonfiguriert, aber wir werden den Nginx-Server verwenden. Daher müssen wir zuerst Nginx und die SSL-Zertifikate installieren.

Schritt 7 – Nginx installieren

Debian 12 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Importiere den Signierschlüssel von Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Füge das Repository für die Mainline-Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Aktualisiere die System-Repositories.

$ sudo apt update

Installiere Nginx.

$ sudo apt install nginx

Überprüfe die Installation. Auf Debian-Systemen funktioniert der folgende Befehl nur mit sudo.

$ sudo nginx -v
nginx version: nginx/1.25.3

Starte den Nginx-Server.

$ sudo systemctl start nginx

Überprüfe den Status des Dienstes.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-01-08 07:43:24 UTC; 4s ago
       Docs: https://nginx.org/en/docs/
    Process: 16330 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 16331 (nginx)
      Tasks: 3 (limit: 2299)
     Memory: 2.9M
        CPU: 16ms
     CGroup: /system.slice/nginx.service
             ??16331 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??16332 "nginx: worker process"
             ??16333 "nginx: worker process"

Jan 08 07:43:24 icinga systemd[1]: Starting nginx.service - nginx - high performance web server...
Jan 08 07:43:24 icinga systemd[1]: Started nginx.service - nginx - high performance web server.

Schritt 8 – SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Du kannst Certbot über das Repository von Debian installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Debian 12 ist Snapd noch nicht installiert. Installiere das Snapd-Paket.

$ sudo apt install snapd

Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Verwende den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link zum Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfe, ob Certbot richtig funktioniert.

$ certbot --version
certbot 2.8.0

Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d icinga.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/icinga.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfe den Certbot-Erneuerungszeitplanungsdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT          LAST                        PASSED  UNIT                         ACTIVATES
-----------------------------------------------------------------------------------------------------------------------------------------
Mon 2024-01-08 09:47:46 UTC 1h 56min left Sun 2024-01-07 09:47:46 UTC 22h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2024-01-08 13:35:00 UTC 5h 43min left -                           -       snap.certbot.renew.timer     snap.certbot.renew.service
Tue 2024-01-09 00:00:00 UTC 16h left      Mon 2024-01-08 00:00:01 UTC 7h ago  dpkg-db-backup.timer         dpkg-db-backup.service

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 9 – Nginx und PHP konfigurieren

Da Icinga für Apache konfiguriert ist, wird das PHP-FPM-Paket standardmäßig nicht installiert. Außerdem brauchst du das PHP Imagick-Modul, wenn du die Diagramme als PDF exportieren willst. Führe den folgenden Befehl aus, um PHP-FPM und die PHP Imagick-Bibliothek zu installieren.

$ sudo apt install php-fpm php-imagick

PHP-FPM konfigurieren

Öffne die Datei /etc/php/8.2/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Wir müssen den Unix-Benutzer/die Unix-Gruppe der PHP-Prozesse auf nginx setzen. Finde die Zeilen user=www-data und group=www-data in der Datei und ändere sie in nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

Finde die Zeilen listen.owner = www-data und listen.group = www-data in der Datei und ändere sie in nginx.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den PHP-FPM-Dienst neu.

$ sudo systemctl restart php8.2-fpm

Nginx konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/icinga.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/icinga.conf

Füge den folgenden Code in die Datei ein.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  icinga.example.com;

    access_log  /var/log/nginx/icinga.access.log;
    error_log   /var/log/nginx/icinga.error.log;

    # SSL
    ssl_certificate      /etc/letsencrypt/live/icinga.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/icinga.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/icinga.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location ~ ^/index\.php(.*)$ {
        # fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Depends On The PHP Version
        fastcgi_index index.php;
        # try_files $uri =404;
        # fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/share/icingaweb2/public/index.php;
        fastcgi_param ICINGAWEB_CONFIGDIR /etc/icingaweb2;
        fastcgi_param REMOTE_USER $remote_user;
    }

    location ~ ^/(.*)? {
        alias /usr/share/icingaweb2/public;
        index index.php;
        rewrite ^/$ /dashboard;
        try_files $1 $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        return 404;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  icinga.example.com;
    return 301   https://$host$request_uri;
}

Beachte, dass das Stammverzeichnis, das in der Nginx-Konfiguration verwendet werden soll, /usr/share/icingaweb2/public ist.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du danach gefragt wirst.

Öffne die Datei /etc/nginx/nginx.conf zum Bearbeiten.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size 64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte den Nginx-Dienst neu.

$ sudo systemctl restart nginx

Schritt 10 – Web-Setup vorbereiten

Bevor wir auf Icinga Web zugreifen können, müssen wir es zusammen mit dem Kommandozeilentool installieren.

$ sudo apt install icingaweb2 icingacli

Füge den Nginx-Benutzer zur Gruppe icingaweb2 hinzu.

$ sudo usermod -aG icingaweb2 nginx

Setze die Berechtigungen für das Icingaweb-Verzeichnis auf die Gruppe icingaweb2.

$ sudo icingacli setup config directory --group icingaweb2
Successfully created configuration directory /etc/icingaweb2

Wenn du Icinga Web verwendest, musst du dich mit einem Token authentifizieren. Erstelle das Token mit dem folgenden Befehl.

$ sudo icingacli setup token create
The newly generated setup token is: 56951f01f9f77a68

Notiere dir den Token, denn du wirst ihn später brauchen. Du kannst ihn später jederzeit mit dem folgenden Befehl abrufen.

$ sudo icingacli setup token show
The current setup token is: 56951f01f9f77a68

Im nächsten Schritt musst du eine Datenbank und einen Datenbankbenutzer anlegen. Melde dich in der MariaDB-Shell an.

$ sudo mysql

Erstelle die Icinga Web-Datenbank.

MariaDB [(none)]> CREATE DATABASE icingaweb2;

Erstelle das SQL-Benutzerkonto für Icinga Web.

MariaDB [(none)]> CREATE USER 'icingaweb2'@'localhost' IDENTIFIED BY 'Your_password3';

Erteile dem Benutzer alle Rechte für die Datenbank.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON icingaweb2.* TO 'icingaweb2'@'localhost';

Lösche die Benutzerrechte.

MariaDB [(none)]> FLUSH PRIVILEGES;

Beende die Shell.

MariaDB [(none)]> exit

Starte Nginx und PHP-FPM neu, um die Berechtigungsänderungen zu übernehmen.

$ sudo systemctl restart nginx php8.2-fpm

Schritt 11 – IcingaWeb einrichten

Öffne die URL https://icinga.example.com/setup in deinem Browser und du wirst den folgenden Bildschirm sehen.

Icinga Web Setup Seite

Gib das im vorherigen Schritt generierte Token ein und klicke auf die Schaltfläche Weiter, um fortzufahren.

Icinga Module einrichten

Auf dem nächsten Bildschirm wählst du die Module aus, die du installieren möchtest, und klickst auf Weiter, um fortzufahren. Das Modul Überwachung ist standardmäßig für dich ausgewählt. Auf der nächsten Seite werden dir die Anforderungen angezeigt und ob sie erfüllt sind. Vergewissere dich, dass alle Anforderungen grün markiert sind.

Icinga Requirements Seite

Klicke auf Weiter, um auf die nächste Seite zu gelangen und die Authentifizierungsart auszuwählen.

Icinga-Authentifizierungstyp

Die Authentifizierungsart ist standardmäßig auf Datenbank eingestellt. Klicke auf Weiter, um fortzufahren. Auf der nächsten Seite wirst du aufgefordert, die Datenbankanmeldedaten einzugeben.

Icinga Web Datenbank Anmeldeinformationen

Gib die in Schritt 10 erstellten Datenbank-Anmeldedaten ein. Klicke auf die Schaltfläche Konfiguration bestätigen, um die Anmeldedaten zu überprüfen. Nach der Überprüfung klickst du auf Weiter, um fortzufahren. Als Nächstes wirst du aufgefordert, das Authentifizierungs-Backend zu benennen.

Icinga Authentifizierung Backend

Belasse den Standardwert und klicke auf Weiter, um fortzufahren. Auf der nächsten Seite wirst du aufgefordert, ein Administratorkonto zu erstellen.

Icinga Administrator Details

Gib die Anmeldedaten für dein neues Administratorkonto ein und klicke auf Weiter, um fortzufahren. Als Nächstes wird die Seite Anwendungskonfiguration angezeigt.

Icinga-Anwendungskonfiguration

Das Kontrollkästchen Strenge Inhaltssicherheitsrichtlinie aktivieren ist nicht markiert. Aktiviere sie und lasse alle anderen Standardwerte unverändert. Klicke auf Weiter, um fortzufahren. Auf der letzten Seite wirst du aufgefordert, die Konfiguration zu überprüfen.

Icinga Überprüfung Konfiguration

Du kannst zurückgehen und alle Einstellungen ändern. Wenn du zufrieden bist, klicke auf Weiter, um fortzufahren.

Icinga Web 2 Konfigurationsmodul Willkommen

Klicke auf Weiter, um mit der Konfiguration des Überwachungsmoduls fortzufahren. Als nächstes wirst du nach den Zugangsdaten für die Icinga-Datenbank gefragt.

Icinga Datenbank Anmeldeinformationen

Gib die Zugangsdaten für die Datenbank in Schritt 3 ein und klicke auf Konfiguration bestätigen, um die Verbindung zu überprüfen. Nach der Überprüfung klickst du auf Weiter, um fortzufahren. Als Nächstes wirst du aufgefordert, die API-Details einzugeben.

Icinga API Details

Gib die in Schritt 6 erstellten API-Anmeldedaten ein, 127.0.0.1 als Host, und klicke auf Konfiguration validieren, um die Verbindung zu überprüfen. Klicke auf Weiter, um fortzufahren. Als nächstes wirst du aufgefordert, geschützte benutzerdefinierte Variablen für die Überwachungssicherheit auszuwählen.

Icinga Überwachung Sicherheit

Belasse die Standardwerte und klicke auf Weiter, um fortzufahren. Als Nächstes wirst du aufgefordert, die Überwachungskonfiguration zu überprüfen. Du kannst zurückgehen und sie ändern, wenn du möchtest.

Überprüfung der Icinga Monitoring Konfiguration

Wenn du zufrieden bist, klicke auf Fertig stellen, um die Installation abzuschließen.

Icinga-Installation fertiggestellt

Nach erfolgreichem Abschluss klickst du auf die Schaltfläche Anmeldung bei Icinga Web 2, um die Anmeldeseite zu öffnen (https://icinga.example.com).

Icinga Web Login Seite

Gib deine Administrator-Kontodaten ein und klicke auf die Schaltfläche Anmelden, um das Icinga Web Dashboard zu öffnen.

Icinga Web Dashboard

Besuche die Seite Übersicht >> Dienste, um den Status des Master Servers zu überprüfen, ähnlich wie im Folgenden dargestellt.

Icinga Web Services Seite

Schritt 12 – Master-Server initialisieren

Der nächste Schritt ist die Initialisierung des Masterservers als Masterknoten. Der Masterknoten fungiert als Hauptcontroller für den Monitoring Stack. Führe den folgenden Befehl aus, um den Initialisierungsprozess zu starten.

$ sudo icinga2 node wizard

Du wirst gefragt, ob es sich um eine Agenteneinrichtung handelt. Gib n ein, um den Master Node einzurichten.

Welcome to the Icinga 2 Setup Wizard!

We will guide you through all required configuration details.

Please specify if this is an agent/satellite setup ('n' installs a master setup) [Y/n]: n

Als Nächstes wirst du nach dem gemeinsamen Namen oder dem Domänennamen gefragt. Drücke die Eingabetaste, um den Standardwert auszuwählen, der angezeigt wird, wenn er der richtige ist. Andernfalls gibst du die Domäne ein und drückst die Eingabetaste.

Please specify the common name (CN) [icinga.example.com]:
Reconfiguring Icinga...
Checking for existing certificates for common name 'icinga.example.com'...
Certificate '/var/lib/icinga2/certs//icinga.example.com.crt' for CN 'icinga.example.com' already existing. Skipping certificate generation.
Generating master configuration for Icinga 2.
'api' feature already enabled.

Als nächstes gibst du den Namen der Masterzone ein und drückst die Eingabetaste, um fortzufahren. In unserem Fall ist es derselbe wie der Domänenname des Servers.

Master zone name [master]: icinga.example.com

Als nächstes wirst du gefragt, ob du weitere globale Zonen hinzufügen möchtest. Drücke n, um das Hinzufügen zu überspringen, und drücke die Eingabetaste, um fortzufahren.

Default global zones: global-templates director-global
Do you want to specify additional global zones? [y/N]: n

Im nächsten Schritt belässt du den API-Bind-Host und -Port als Standard und drückst die Eingabetaste, um fortzufahren.

Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:

Als Nächstes drückst du auf Y, um die Konfiguration im Verzeichnis /etc/icinga2/conf.d/ zu deaktivieren, da wir später die Konfiguration der Icinga2-Zonen verwenden werden.

Do you want to disable the inclusion of the conf.d directory [Y/n]: Y
Disabling the inclusion of the conf.d directory...
Checking if the api-users.conf file exists...

Done.

Now restart your Icinga 2 daemon to finish the installation!

Starte den Dienst neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart icinga2

Und zu guter Letzt führst du den folgenden Befehl aus, um ein Ticket für den Client-Server zu erstellen. Verwende den Domänennamen des Clients als Argument.

$ sudo icinga2 pki ticket --cn 'client.example.com'
c81f2a3b86534f34160ed8b776906e5452d8d09c

Notiere dir das Ticket für die spätere Verwendung.

Schritt 13 – Initialisierung des Icinga2-Agenten auf dem Client-Server

Melde dich auf dem Client-Server an und installiere Icinga2 und die Überwachungsplugins. Führe dazu die folgenden Befehle aus.

$ wget -O - https://packages.icinga.com/icinga.key | sudo gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-`lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/debian icinga-`lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ sudo apt update
$ sudo apt install icinga2 monitoring-plugins -y

Überprüfe, ob der Icinga-Dienst aktiviert ist und läuft.

$ sudo systemctl status icinga2
? icinga2.service - Icinga host/service/network monitoring system
     Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/icinga2.service.d
             ??limits.conf
     Active: active (running) since Mon 2024-01-08 12:52:53 UTC; 35s ago
   Main PID: 19530 (icinga2)
     Status: "Startup finished."
      Tasks: 12
     Memory: 13.4M
        CPU: 216ms
     CGroup: /system.slice/icinga2.service
             ??19530 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??19573 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??19578 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log

Starte den Icinga Node Wizard, um den Agenten auf dem Client-Server zu initialisieren.

$ sudo icinga2 node wizard

Du wirst gefragt, ob es sich um eine Agenteneinrichtung handelt. Gib Y ein, um den Agenten einzurichten.

Welcome to the Icinga 2 Setup Wizard!

We will guide you through all required configuration details.

Please specify if this is an agent/satellite setup ('n' installs a master setup) [Y/n]: Y

Als Nächstes wirst du aufgefordert, den gemeinsamen Namen anzugeben. Belasse den Standardwert und drücke die Eingabetaste, um fortzufahren.

Starting the Agent/Satellite setup routine...

Please specify the common name (CN) [client.example.com]:

Als Nächstes gibst du den übergeordneten Endpunkt als icinga.example.com an und gibst Y ein, um vom Client aus eine Verbindung zum übergeordneten Knoten herzustellen.

Please specify the parent endpoint(s) (master or satellite) where this node should connect to:
Master/Satellite Common Name (CN from your master/satellite node): icinga.example.com

Do you want to establish a connection to the parent node from this node? [Y/n]: Y

Als Nächstes gibst du die IP-Adresse des Master-Servers ein und belässt den Port-Wert auf dem Standardwert.

Please specify the master/satellite connection information:
Master/Satellite endpoint host (IP address or FQDN): 199.247.31.184
Master/Satellite endpoint port [5665]:

Gib N ein, um das Hinzufügen weiterer Master-Endpunkte abzulehnen.

Add more master/satellite endpoints? [y/N]: N

Als nächstes werden dir die Zertifikatsinformationen für den Master-Server angezeigt. Drücke Y, um die Informationen zu bestätigen und fortzufahren.

Parent certificate information:

 Version:             3
 Subject:             CN = icinga.example.com
 Issuer:              CN = Icinga CA
 Valid From:          Jan  8 07:36:55 2024 GMT
 Valid Until:         Feb  8 07:36:55 2025 GMT
 Serial:              3a:e5:5e:e6:d5:5e:cc:1d:89:be:18:0b:10:cb:7d:54:8f:82:b1:5e

 Signature Algorithm: sha256WithRSAEncryption
 Subject Alt Names:   icinga.example.com
 Fingerprint:         DB 62 0D 2D AF 73 02 F2 86 92 5E A8 50 CD 0F 4F F2 D6 9E 86 AE F6 F9 E4 D7 F2 F2 60 78 1B 92 E5

Is this information correct? [y/N]: Y

Als Nächstes gibst du das im vorherigen Schritt erstellte Anforderungsticket ein.

Please specify the request ticket generated on your Icinga 2 master (optional).
 (Hint: # icinga2 pki ticket --cn 'client.example.com'): c81f2a3b86534f34160ed8b776906e5452d8d09c

Belasse den API-Bind-Host und den Port als Standard und drücke die Eingabetaste, um fortzufahren.

Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:

Als Nächstes gibst du zweimal Y ein, um die Konfiguration und die Befehle des Master-Knotens zu akzeptieren.

Accept config from parent node? [y/N]: Y
Accept commands from parent node? [y/N]: Y

Drücke die Eingabetaste, um den Standardnamen der lokalen Zone zu akzeptieren, der der Name der Client-Domäne ist. Gib den Master-Domänennamen als übergeordneten Zonennamen ein, um fortzufahren.

Reconfiguring Icinga...
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.

Local zone name [client.example.com]:
Parent zone name [master]: icinga.example.com

Drücke N, um das Hinzufügen weiterer globaler Zonen zu überspringen.

Default global zones: global-templates director-global
Do you want to specify additional global zones? [y/N]: N

Drücke Y, um das Deaktivieren der Konfigurationen aus dem Verzeichnis /etc/icinga2/conf.d/ zu überspringen.

Do you want to disable the inclusion of the conf.d directory [Y/n]: Y
Disabling the inclusion of the conf.d directory...

Done.

Now restart your Icinga 2 daemon to finish the installation!

Starte den Icinga-Dienst neu, um die Konfigurationsänderungen zu übernehmen.

$ sudo systemctl restart icinga2

Schritt 14 – Erstellen der Zonenkonfiguration auf dem Master-Server

Logge dich wieder auf dem Server ein und erstelle ein neues Verzeichnis als Standardzone.

$ sudo mkdir -p /etc/icinga2/zones.d/icinga.example.com/

Als nächstes erstellst du eine Konfigurationsdatei in dem neu erstellten Verzeichnis und öffnest sie zur Bearbeitung.

$ sudo nano /etc/icinga2/zones.d/icinga.example.com/client.example.com.conf

Füge den folgenden Code in die Datei ein. Die IP-Adresse im Code sollte mit der öffentlichen IP-Adresse des Clients übereinstimmen.

// Endpoints
object Endpoint "client.example.com" {
}
// Zones
object Zone "client.example.com" {
    endpoints = [ "client.example.com" ]
    parent = "icinga.example.com"
}
// Host Objects
object Host "client.example.com" {
    check_command = "hostalive"
    address = "95.179.138.148"
    vars.client_endpoint = name
}

Speichere die Datei, indem du die Tastenkombination Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erstelle und öffne die Datei services zur Bearbeitung.

$ sudo nano /etc/icinga2/zones.d/icinga.example.com/services.conf

Füge den folgenden Code in die Datei ein.

// Ping
 apply Service "Ping" {
 check_command = "ping4"
 assign where host.address // check executed on master
 }
 // System Load
 apply Service "System Load" {
 check_command = "load"
 command_endpoint = host.vars.client_endpoint // Check executed on client01
 assign where host.vars.client_endpoint
 }
 // SSH Service
 apply Service "SSH Service" {
 check_command = "ssh"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
 }
 // Icinga 2 Service
 apply Service "Icinga2 Service" {
 check_command = "icinga"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
 }

Führe den folgenden Befehl aus, um die Konfiguration zu überprüfen.

$ sudo icinga2 daemon -C

Du wirst eine ähnliche Ausgabe erhalten.

[2024-01-08 13:01:26 +0000] information/cli: Icinga application loader (version: r2.14.1-1)
[2024-01-08 13:01:26 +0000] information/cli: Loading configuration file(s).
[2024-01-08 13:01:26 +0000] information/ConfigItem: Committing config item(s).
[2024-01-08 13:01:26 +0000] information/ApiListener: My API identity: icinga.example.com
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 IcingaApplication.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 Host.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 FileLogger.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 IdoMysqlConnection.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 4 Zones.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 CheckerComponent.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 2 Endpoints.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 2 ApiUsers.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 ApiListener.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 NotificationComponent.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 246 CheckCommands.
[2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 4 Services.
[2024-01-08 13:01:26 +0000] information/ScriptGlobal: Dumping variables to file '/var/cache/icinga2/icinga2.vars'
[2024-01-08 13:01:27 +0000] information/cli: Finished validating the configuration file(s).

Starte den Icinga-Dienst neu, um die Konfigurationsänderungen zu übernehmen.

$ sudo systemctl restart icinga2

Schritt 15 – Überprüfe im Icinga Dashboard

Öffne das Icinga2 Web Dashboard, um die Informationen über die Client-Maschinen zu überprüfen. Wähle Übersicht >> Hosts aus dem linken Menü und du wirst den folgenden Bildschirm sehen.

Icinga Web Dashboard Hosts Seite

Es kann einige Zeit dauern, bis der Client-Status als UP angezeigt wird. Klicke auf den Client, um mehr Details über ihn zu erfahren. Wähle Übersicht >> Dienste und du siehst die folgenden Statusinformationen über den Client.

Icinga Client Services Details

Dies bestätigt, dass der Client die Statistiken korrekt an den Icinga-Masterserver sendet.

Fazit

Damit ist unsere Anleitung zur Installation der Icinga Monitoring Software auf einem Debian 12 Server und der Konfiguration zur Überwachung eines Client-Rechners mit demselben Betriebssystem abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …