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.
Quellen und weiterführende Links:
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