monit auf einem ESXi-Host betreiben

und Statusmeldungen an M/Monit weiterleiten

Der Betrieb des monit-Daemons auf einem ESXi-Host mit Weiterleitung der Statusmeldungen an M/Monit ist leider alles andere als trivial.

Hier eine kleine Zusammenfassung der wichtigsten Schritte:

* * *

Inhaltsverzeichnis

Ein paar Details zum ESXi-Host, auf den sich die Anleitung bezieht
Die Installation von monit
  Problem 1: Webinterface von monit unter Port 2812 nicht erreichbar
  Problem 2: monit kann über SSL keine Verbindung zu M/Monit aufbauen
  Problem 3: Das SSL-Zertifikat kann nicht verifiziert werden
  Problem 4: Im Daemon-Modus kein SSL möglich, da kein Zugriff auf den Zufallszahlen-Generator

Ich möchte monit auf einem ESXi-Host betreiben, habe dabei aber Schwierigkeiten
Quellen und weiterführende Links

* * *

Ein paar Details zum ESXi-Host, auf den sich die Anleitung bezieht

Wichtiger Hinweis
Der ESXi-Host, auf den sich diese Anleitung bezieht, ist bereits veraltet (EOL). Ab Version 7.0 muss die Firewall auf anderem Wege bearbeitet werden. Weitere Informationen sind in der offiziellen Dokumentation zu finden.

uname -a

VMkernel ESX.local 6.7.0 #1 SMP Release build-14320388 Aug  5 2019 02:37:06 x86_64 x86_64 x86_64 ESXi

openssl -> version

OpenSSL 1.0.2r-fips  26 Feb 2019

monit --version

This is Monit version 5.33.0
Built with ssl, with ipv6, with compression, with pam and with large files
Copyright (C) 2001-2022 Tildeslash Ltd. All Rights Reserved.
* * *

Die Installation von monit

wget https://mmonit.com/monit/dist/binary/5.33.0/monit-5.33.0-linux-x64.tar.gz
tar xzvf monit-5.33.0-linux-x64.tar.gz
cp monit-5.33.0/bin/monit /usr/bin
cp monit-5.33.0/conf/monitrc ~/.monitrc
rm -r monit-5.33.*

Daraufhin brauchst du nur die Datei /.monitrc anpassen und den Daemon mit monit starten.

* * *

Problem 1: Webinterface von monit unter Port 2812 nicht erreichbar

Erstelle zuvor ein Backup der Konfigurationsdatei:

cp /etc/vmware/firewall/service.xml /etc/vmware/firewall/service.xml.bak

Passe die Berechtigungen der Konfigurationsdatei an, um sie bearbeiten zu dürfen:

chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml

Bearbeite die Konfigurationsdatei /etc/vmware/firewall/service.xml und füge folgenden Block am Ende ein:

Wichtig
Achte darauf, dass die <service id='0045'> fortlaufend ist und sich nicht mit einer bereits Bestehenden aus deiner Datei doppelt.

  <!-- monit 2812 inbound -->
  <service id='0045'>
    <id>monit</id>
    <rule id='0000'>
      <direction>inbound</direction>
      <protocol>tcp</protocol>
      <porttype>dst</porttype>
      <port>
        <begin>2812</begin>
        <end>2812</end>
      </port>
    </rule>
    <enabled>true</enabled>
    <required>false</required>
  </service>

Speichere die Datei und passe die Berechtigungen der Konfigurationsdatei erneut an:

chmod 444 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml

Wende daraufhin die Firewall-Regeln an:

esxcli network firewall refresh

Zur Kontrolle kannst du dir die Firewall-Regeln mit folgendem Befehl noch einmal ansehen:

esxcli network firewall ruleset list

Der Zugriff auf das monit-Webinterface unter Port 2812 sollte nun problemlos möglich sein.

* * *

Problem 2: monit kann über SSL keine Verbindung zu M/Monit aufbauen

Info: Cannot connect to [mmonit.domain.de]:443 -- Connection timed out
Trying next address record
Cannot connect to [mmonit.domain.de]:443 -- Connection timed out
M/Monit: cannot open a connection to https://[mmonit.domain.de]:443/collector

Mit dem folgenden Befehl kannst du prüfen, ob ESXi eine Verbindung zum Host herstellen darf (IP vorher ersetzen):

nc -z 1.2.3.4 443

Bekommst du keine Ausgabe, muss die Firewall angepasst werden.

Erstelle zuvor ein Backup der Konfigurationsdatei:

cp /etc/vmware/firewall/service.xml /etc/vmware/firewall/service.xml.bak

Passe die Berechtigungen der Konfigurationsdatei an, um sie bearbeiten zu dürfen:

chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml

Bearbeite die Konfigurationsdatei /etc/vmware/firewall/service.xml und füge folgenden Block am Ende ein:

Wichtig
Achte darauf, dass die <service id='0046'> fortlaufend ist und sich nicht mit einer bereits Bestehenden aus deiner Datei doppelt.

  <!-- mmonit 443 outbound -->
  <service id='0046'>
      <id>mmonit</id>
      <rule id='0000'>
          <direction>outbound</direction>
          <protocol>tcp</protocol>
          <port type='dst'>443</port>
      </rule>
      <enabled>true</enabled>
      <required>false</required>
  </service>

Speichere die Datei und passe die Berechtigungen der Konfigurationsdatei erneut an:

chmod 444 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml

Um nur den Zugriff auf eine bestimmte IP-Adresse (die des M/Monit-Hosts), statt auf alle IP-Adressen mit Port 443 zuzulassen (IP vorher ersetzen) gib folgende Befehle ein:

esxcli network firewall ruleset set --allowed-all false -r mmonit
esxcli network firewall ruleset allowedip add --ruleset-id mmonit --ip-address 1.2.3.4
esxcli network firewall ruleset allowedip list

Wende daraufhin die Firewall-Regeln an:

esxcli network firewall refresh

Zur Kontrolle kannst du dir die Firewall-Regeln mit folgendem Befehl noch einmal ansehen:

esxcli network firewall ruleset list

Mit dem folgenden Befehl kannst du erneut prüfen, ob ESXi eine Verbindung zum Host herstellen darf (IP vorher ersetzen):

nc -z 1.2.3.4 443

Wenn alles geklappt hat, lautet die Ausgabe:

Connection to 1.2.3.4 443 port [tcp/https] succeeded!
* * *

Problem 3: Das SSL-Zertifikat kann nicht verifiziert werden

error    : M/Monit: cannot open a connection to https://[mmonit.domain.de]:443/collector
error    : Cannot connect to [mmonit.domain.de]:443 -- SSL server certificate verification error: unable to get local issuer certificate

Grund dafür sind die veralteten CAs, die bei der alten Version von OpenSSL mitgeliefert werden.

Abhilfe schaffst du, indem du dir eine CA-Datei (z.B. von curl) herunterlädst und mittels scp auf den Host kopierst.

Alternativ kannst du sie auch per wget direkt auf den Host herunterladen, allerdings kann es sein, dass du zuvor die Firewall mit dem folgenden Befehl deaktivieren, die Datei dann herunterladen und die Firewall anschließend wieder aktivieren musst:

esxcli network firewall set --enabled false
wget https://...
esxcli network firewall set --enabled true

Jetzt noch die monit-Konfiguration unter /.monitrc anpassen (Dokumentation) und den Parameter cacertificatefile ergänzen (an das Komma vor dem vorherigen Parameter denken):

set ssl {                                                     
    verify     : enable, # verify SSL certificates (disabled by default but STRONGLY RECOMMENDED)
    selfsigned : reject,   # allow self signed SSL certificates (reject by default)
    cacertificatefile : "/cacert-2023-01-10.pem"
}

Nach einem Neustart des monit-Daemons mit monit reload sollte die Verbindung zu M/Monit klappen.

* * *

Problem 4: Im Daemon-Modus kein SSL möglich, da kein Zugriff auf den Zufallszahlen-Generator

In der Praxis hat sich herausgestellt, dass bei monit im Daemon-Modus (also wenn dieser mit monit statt mit monit -I gestartet wurde) folgender Fehler auftritt:

error    : SSL: client context initialization failed -- error:2406E06E:random number generator:RAND_DRBG_reseed:error retrieving entropy

Um diesen Fehler zu umgehen, muss man monit mit nohup /bin/monit -I im interaktiven Modus starten. Durch die Verwendung von nohup werden alle Ausgaben in /nohup.out geschrieben und man kann die SSH-Session daraufhin beenden, während der monit-Prozess dennoch weiterläuft.

Allerdings hat sich rausgestellt, dass dieser Workaround nur für einen beschränkten Zeitraum gilt. Das kann also allenfalls als "temporary workaround" gesehen werden – betriebssicher ist es nicht.

* * *

Ich möchte monit auf einem ESXi-Host betreiben, habe dabei aber Schwierigkeiten

Ich unterstütze dich gerne beim Betrieb von monit auf einem ESXi-Host.
Schreib mir hierzu einfach über Kontakt, per Telegram oder unten in die Kommentare eine Nachricht.

* * *
* * *
Christian Süßenguth Christian Süßenguth @sweetgood

Hi, ich bin Christian und Inhaber der Firma SWEETGOOD. Mit dem andersGOOD Blog möchte ich auch dich für datensichere IT-Lösungen begeistern. So bringst du dein Unternehmen voran, ohne großen Konzernen deine wertvollen Daten zu liefern. Probiers mal anders!


Kommentarbereich

Die Kommentare sind für dich noch deaktiviert, da du dem Setzen von Cookies bisher nicht zugestimmt hast.
Klicke oben rechts auf "Ja, klar!" und lade die Seite neu, um die Kommentare anzuzeigen.

Seite neu laden

👾 Magst du Kekse?

Ich würde gerne Cookies setzen

Ist das OK für dich?