Verschlüsselung mit vorab gemeinsam genutzten Schlüsseln

Übersicht

Jeder Pre-Shared Key (PSK) in Zabbix ist tatsächlich ein Paar aus:

  • nicht geheimem PSK-Identitätsstring,
  • geheimem PSK-Stringwert.

Der PSK-Identitätsstring ist ein nicht leerer UTF-8-String. Zum Beispiel: "PSK ID 001 Zabbix agentd". Es ist ein eindeutiger Name, mit dem dieser spezifische PSK von Zabbix-Komponenten referenziert wird. Geben Sie im PSK-Identitätsstring keine sensiblen Informationen an - er wird unverschlüsselt über das Netzwerk übertragen.

Der PSK-Wert ist ein schwer zu erratender String aus hexadezimalen Ziffern, zum Beispiel "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".

Größenbeschränkungen

Für die PSK-Identität und den PSK-Wert gibt es in Zabbix Größenbeschränkungen. In einigen Fällen kann eine Kryptobibliothek eine niedrigere Grenze haben:

Komponente Maximale Größe der PSK-Identität Minimale Größe des PSK-Werts Maximale Größe des PSK-Werts
Zabbix 128 UTF-8-Zeichen 128 Bit (16-Byte-PSK, eingegeben als 32 hexadezimale Ziffern) 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern)
GnuTLS 128 Byte (kann UTF-8-Zeichen enthalten) - 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern)
OpenSSL 1.0.x, 1.1.0 127 Byte (kann UTF-8-Zeichen enthalten) - 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern)
OpenSSL 1.1.1 127 Byte (kann UTF-8-Zeichen enthalten) - 512 Bit (64-Byte-PSK, eingegeben als 128 hexadezimale Ziffern)
OpenSSL 1.1.1a und höher 127 Byte (kann UTF-8-Zeichen enthalten) - 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern)

Das Zabbix Frontend ermöglicht die Konfiguration einer bis zu 128 Zeichen langen PSK-Identitätszeichenfolge und eines bis zu 2048 Bit langen PSK, unabhängig von den verwendeten Kryptobibliotheken.
Wenn einige Zabbix-Komponenten niedrigere Grenzen unterstützen, liegt es in der Verantwortung des Benutzers, die PSK-Identität und den PSK-Wert mit einer für diese Komponenten zulässigen Länge zu konfigurieren.
Das Überschreiten der Größenbeschränkungen führt zu Kommunikationsfehlern zwischen Zabbix-Komponenten.

Bevor der Zabbix Server eine Verbindung zum Agent über PSK herstellt, sucht der Server die für diesen Agent konfigurierten PSK-Identitäts- und PSK-Werte in der Datenbank (tatsächlich im Konfigurations-Cache). Nach dem Empfang einer Verbindung verwendet der Agent die PSK-Identität und den PSK-Wert aus seiner Konfigurationsdatei. Wenn beide Parteien dieselbe PSK-Identitätszeichenfolge und denselben PSK-Wert haben, kann die Verbindung erfolgreich hergestellt werden.

Jede PSK-Identität darf nur mit einem Wert verknüpft sein. Es liegt in der Verantwortung des Benutzers sicherzustellen, dass es keine zwei PSKs mit derselben Identitätszeichenfolge, aber unterschiedlichen Werten gibt. Andernfalls kann es zu unvorhersehbaren Fehlern oder Unterbrechungen der Kommunikation zwischen Zabbix-Komponenten kommen, die PSKs mit dieser PSK-Identitätszeichenfolge verwenden.

Generieren von PSK

Zum Beispiel kann ein 256-Bit-PSK (32 Bytes) mit den folgenden Befehlen generiert werden:

  • mit OpenSSL:
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
  • mit GnuTLS:
$ psktool -u psk_identity -p database.psk -s 32
Generating a random key for user 'psk_identity'
Key stored to database.psk

$ cat database.psk 
psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb

Beachten Sie, dass "psktool" oben eine Datenbankdatei mit einer PSK-Identität und der zugehörigen PSK erzeugt. Zabbix erwartet in der PSK-Datei jedoch nur eine PSK, daher sollten die Identitätszeichenfolge und der Doppelpunkt (':') aus der Datei entfernt werden.

Konfigurieren von PSK für die Kommunikation zwischen Server und Agent (Beispiel)

Schreiben Sie auf dem Agent-Host den PSK-Wert in eine Datei, zum Beispiel /home/zabbix/zabbix_agentd.psk. Die Datei muss den PSK in der ersten Textzeile enthalten, zum Beispiel:

1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

Legen Sie die Zugriffsrechte für die PSK-Datei fest – sie darf nur für den Zabbix-Benutzer lesbar sein.

Bearbeiten Sie die TLS-Parameter in der Agent-Konfigurationsdatei von Zabbix (zabbix_agentd.conf). Legen Sie zum Beispiel Folgendes fest:

TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001

Der Agent stellt eine Verbindung zum Server her (aktive Prüfungen) und akzeptiert vom Server und von zabbix_get nur Verbindungen, die PSK verwenden. Die PSK-Identität lautet „PSK 001“.

Starten Sie den Agent neu. Nun können Sie die Verbindung beispielsweise mit zabbix_get testen:

zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk

(Um Ausfallzeiten zu minimieren, lesen Sie, wie Sie den Verbindungstyp unter Verbindungsverschlüsselungsverwaltung ändern.)

Konfigurieren Sie die PSK-Verschlüsselung für diesen Agent im Zabbix Frontend:

  1. Gehen Sie zu: Datensammlung > Hosts.
  2. Wählen Sie den Host aus und klicken Sie auf die Registerkarte Verschlüsselung.
  3. Konfigurieren Sie die Details der PSK-Verschlüsselung.

Beispiel:

psk\_config.png

Alle Pflichtfelder sind mit einem roten Sternchen gekennzeichnet.

Wenn der Konfigurations-Cache mit der Datenbank synchronisiert wurde, verwenden neue Verbindungen PSK. Überprüfen Sie die Logdateien von Server und Agent auf Fehlermeldungen.

PSK für die Kommunikation zwischen Server und aktivem Proxy konfigurieren (Beispiel)

Schreiben Sie auf dem Proxy den PSK-Wert in eine Datei, zum Beispiel /home/zabbix/zabbix_proxy.psk. Die Datei muss in der ersten Textzeile den PSK enthalten, zum Beispiel:

e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

Legen Sie die Zugriffsrechte für die PSK-Datei fest - sie darf nur für den Zabbix-Benutzer lesbar sein.

Bearbeiten Sie die TLS-Parameter in der Proxy-Konfigurationsdatei von Zabbix (zabbix_proxy.conf). Legen Sie zum Beispiel Folgendes fest:

TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002

Der Proxy stellt über PSK eine Verbindung zum Server her. Die PSK-Identität lautet „PSK 002“.

(Informationen zum Minimieren von Ausfallzeiten finden Sie unter Verbindungsverschlüsselung verwalten.)

Konfigurieren Sie den PSK für diesen Proxy im Zabbix Frontend. Gehen Sie zu Administration > Proxies, wählen Sie den Proxy aus und öffnen Sie die Registerkarte Encryption. Aktivieren Sie unter „Connections from proxy“ die Option PSK. Fügen Sie in das Feld „PSK identity“ den Wert „PSK 002“ und in das Feld „PSK“ den Wert „e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9“ ein. Klicken Sie auf „Update“.

Starten Sie den Proxy neu. Er verwendet nun verschlüsselte Verbindungen auf PSK-Basis zum Server. Überprüfen Sie die Logdateien des Servers und des Proxys auf Fehlermeldungen.

Für einen passiven Proxy ist das Verfahren sehr ähnlich. Der einzige Unterschied besteht darin, dass Sie TLSAccept=psk in der Proxy-Konfigurationsdatei von Zabbix festlegen und im Zabbix Frontend unter Connections to proxy die Option PSK auswählen.

Fehlerbehebung bei PSK-Problemen

PSK enthält eine ungerade Anzahl von Hex-Ziffern

Proxy oder Agent startet nicht, Meldung im Proxy- oder Agent-Log:

ungültige PSK in Datei "/home/zabbix/zabbix_proxy.psk"
PSK-Identitätszeichenfolge länger als 128 Bytes wird an GnuTLS übergeben

Im TLS-Client-Log:

gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.

Im TLS-Server-Log:

gnutls_handshake() failed: -90 The SRP username supplied is illegal.
Zu langer PSK-Wert mit OpenSSL 1.1.1 verwendet

Im Log der verbindenden Seite:

...OpenSSL library (version OpenSSL 1.1.1  11 Sep 2018) initialized
...
...In zbx_tls_connect(): psk_identity:"PSK 1"
...zbx_psk_client_cb() requested PSK identity "PSK 1"
...End of zbx_tls_connect():FAIL error:'SSL_connect() set result code to SSL_ERROR_SSL: file ssl\statem\extensions_clnt.c line 801: error:14212044:SSL routines:tls_construct_ctos_early_data:internal error: TLS write fatal alert "internal error"'

Im Log der akzeptierenden Seite:

...Message from 123.123.123.123 is missing header. Message ignored.

Dieses Problem tritt typischerweise auf, wenn OpenSSL von 1.0.x oder 1.1.0 auf 1.1.1 aktualisiert wird und der PSK-Wert länger als 512 Bit ist (64-Byte-PSK, eingegeben als 128 hexadezimale Ziffern).

Siehe auch: Größenlimits für Werte