wiki/guides/PRTG/docker-monitoring.md

4.3 KiB

title description published date tags editor dateCreated
Monitoring von Docker mit PRTG einrichten true 2024-02-10T22:38:39.069Z markdown 2024-02-10T22:38:39.069Z

Monitoring von Docker mit PRTG einrichten

Monitoring von Docker mit PRTG

Um den Docker Daemon von außen erreichbar zu haben muss man noch einige Zertifikate erstellen und ihn von der Firwall aus erreichbar machen.

Die Zertifikate werden mit den Folgenden Befehl erstellt, beim Feld wo die PEM pass phrase eingeben werden muss kann ein beliebiges Passwort eingegeben werden, dies wird dann in den späteren Schritten wieder benötigt.

mkdir -p /opt/certs
cd /opt/certs
openssl genrsa -aes256 -out ca-key.pem 4096
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Danach erstellt man nun noch mit foldenen Befehlen die Server-Zertifikate für Docker:

openssl genrsa -out server-key.pem 4096

Hier bitte die Adresse der IP-Adresse (Interface) ergänzen von woher der Zugriff erfolgt.

HOST=10.161.24.10
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:$HOST,IP:10.161.24.10,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out cert.pem -extfile extfile-client.cnf
Certificate request self-signature ok
subject=CN = client
Enter pass phrase for ca-key.pem:

Konfigurationen am Docker Service anpassen

Wir müssen Docker noch sagen, das er nun auf ein andere Adresse hören soll, dafür passieren wir die Service Datei von Docker an. Wir stopen einmal den Docker-Daemon und editieren anschließend die Datei.

systemctl stop docker

mkdir -p /etc/systemd/system/docker.service.d/
nano -w /etc/systemd/system/docker.service.d/docker-daemon.conf

Der Inhalt sollte dann wiefolgt aussehen, der Docker Daemon hört nun auf alle Interfacen und IP-Adressen. Da wir aber die Adressen in den Zertifikaten beschränkt haben, sollten trotzdem fremde Systeme im Netzwerk keinen Zugriff bekommen können.

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --tlsverify=true --tlscacert=/opt/certs/ca.pem --tlscert=/opt/certs/cert.pem --tlskey=/opt/certs/key.pem --containerd=/run/containerd/containerd.sock

Danach müssen wir noch den Systemd Service reloaden und können Docker wieder starten mit:

systemctl daemon-reload
systemctl start docker

Anschließend ist dieses hier der Server Schlüssel:

cat key.pem
----BEGIN PRIVATE KEY-----
MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDiFvMRT/LP4+K+
...
-----END PRIVATE KEY-----

Und das ist das Zertifikart:

cat cert.pem
-----BEGIN CERTIFICATE-----
MIIFODCCAyCgAwIBAgIUKzDT5l92Xd89Ksnzh3xoQfzWSgUwDQYJKoZIhvcNAQEL
...
-----END CERTIFICATE-----

Firewall für Docker noch anpassen

sudo firewall-cmd --permanent --add-port=2376/tcp --zone=public
sudo firewall-cmd --reload

Quellen

https://kb.paessler.com/en/topic/67250-how-can-i-create-private-key-and-certificate-for-the-docker-sensor

https://kb.paessler.com/en/topic/283-how-can-i-use-a-trusted-ssl-certificate-with-the-prtg-web-interface

https://docs.docker.com/engine/security/protect-access/#create-a-ca-server-and-client-keys-with-openssl