2 Używanie kluczy współdzielonych z wyprzedzeniem
Przegląd
Każdy klucz pre-shared key (PSK) w Zabbix jest w rzeczywistości parą składającą się z:
- jawnego ciągu identyfikatora PSK,
- tajnej wartości ciągu PSK.
Ciąg identyfikatora PSK jest niepustym ciągiem UTF-8. Na przykład „PSK ID 001 Zabbix agentd”. Jest to unikalna nazwa, za pomocą której ten konkretny PSK jest identyfikowany przez komponenty Zabbix. Nie umieszczaj poufnych informacji w ciągu identyfikatora PSK — jest on przesyłany przez sieć bez szyfrowania.
Wartość PSK to trudny do odgadnięcia ciąg cyfr szesnastkowych, na przykład „e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9”.
Ograniczenia rozmiaru
W Zabbix obowiązują ograniczenia rozmiaru dla tożsamości i wartości PSK; w niektórych przypadkach biblioteka kryptograficzna może mieć niższy limit:
| Komponent | Maksymalny rozmiar tożsamości PSK | Minimalny rozmiar wartości PSK | Maksymalny rozmiar wartości PSK |
|---|---|---|---|
| Zabbix | 128 znaków UTF-8 | 128 bitów (16-bajtowy PSK, wprowadzany jako 32 cyfry szesnastkowe) | 2048 bitów (256-bajtowy PSK, wprowadzany jako 512 cyfr szesnastkowych) |
| GnuTLS | 128 bajtów (może zawierać znaki UTF-8) | - | 2048 bitów (256-bajtowy PSK, wprowadzany jako 512 cyfr szesnastkowych) |
| OpenSSL 1.0.x, 1.1.0 | 127 bajtów (może zawierać znaki UTF-8) | - | 2048 bitów (256-bajtowy PSK, wprowadzany jako 512 cyfr szesnastkowych) |
| OpenSSL 1.1.1 | 127 bajtów (może zawierać znaki UTF-8) | - | 512 bitów (64-bajtowy PSK, wprowadzany jako 128 cyfr szesnastkowych) |
| OpenSSL 1.1.1a i nowsze | 127 bajtów (może zawierać znaki UTF-8) | - | 2048 bitów (256-bajtowy PSK, wprowadzany jako 512 cyfr szesnastkowych) |
Zabbix frontend umożliwia skonfigurowanie
ciągu tożsamości PSK o długości do 128 znaków oraz PSK o długości 2048 bitów, niezależnie
od używanych bibliotek kryptograficznych.
Jeśli niektóre komponenty Zabbix obsługują niższe limity, obowiązkiem użytkownika
jest skonfigurowanie tożsamości i wartości PSK o długości dozwolonej
dla tych komponentów.
Przekroczenie limitów długości skutkuje błędami komunikacji między komponentami Zabbix.
Zanim serwer Zabbix połączy się z agent przy użyciu PSK, serwer wyszukuje w bazie danych tożsamość PSK i wartość PSK skonfigurowane dla tego agent (w rzeczywistości w pamięci podręcznej konfiguracji). Po odebraniu połączenia agent używa tożsamości PSK i wartości PSK ze swojego pliku konfiguracyjnego. Jeśli obie strony mają ten sam ciąg tożsamości PSK i tę samą wartość PSK, połączenie może się powieść.
Każda tożsamość PSK musi być powiązana tylko z jedną wartością. Obowiązkiem użytkownika jest upewnienie się, że nie istnieją dwa PSK z tym samym ciągiem tożsamości, ale różnymi wartościami. Niedopełnienie tego może prowadzić do nieprzewidywalnych błędów lub zakłóceń komunikacji między komponentami Zabbix używającymi PSK z tym ciągiem tożsamości PSK.
Generowanie PSK
Na przykład 256-bitowy (32 bajty) PSK można wygenerować za pomocą następujących poleceń:
- przy użyciu OpenSSL:
<!-- -->
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
- przy użyciu 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
Należy pamiętać, że powyższe polecenie „psktool” generuje plik bazy danych zawierający tożsamość PSK oraz skojarzony z nią PSK. Zabbix oczekuje w pliku PSK wyłącznie samego PSK, dlatego z pliku należy usunąć ciąg tożsamości oraz dwukropek (':').
Konfigurowanie PSK do komunikacji serwer-agent (przykład)
Na hoście agenta zapisz wartość PSK do pliku, na przykład
/home/zabbix/zabbix_agentd.psk. Plik musi zawierać PSK w pierwszym
ciągu tekstowym, na przykład:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
Ustaw prawa dostępu do pliku PSK — musi on być czytelny tylko dla użytkownika Zabbix.
Edytuj parametry TLS w pliku konfiguracyjnym agenta zabbix_agentd.conf,
na przykład ustaw:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
agent będzie łączył się z serwerem (aktywne testy) i akceptował od serwera
oraz zabbix_get tylko połączenia używające PSK. Tożsamość PSK będzie miała wartość „PSK
001”.
Uruchom ponownie agent. Teraz możesz przetestować połączenie za pomocą zabbix_get,
na przykład:
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
(Aby zminimalizować przestój, zobacz, jak zmienić typ połączenia w zarządzaniu szyfrowaniem połączeń).
Skonfiguruj szyfrowanie PSK dla tego agenta w Zabbix frontend:
- Przejdź do: Data collection → Hosts
- Wybierz host i kliknij kartę Encryption
Przykład:

Wszystkie wymagane pola wejściowe są oznaczone czerwoną gwiazdką.
Gdy pamięć podręczna konfiguracji zostanie zsynchronizowana z bazą danych, nowe połączenia będą używać PSK. Sprawdź pliki dziennika serwera i agenta pod kątem komunikatów o błędach.
Konfigurowanie PSK dla komunikacji serwer - aktywny proxy (przykład)
Na proxy zapisz wartość PSK do pliku, na przykład
/home/zabbix/zabbix_proxy.psk. Plik musi zawierać PSK w pierwszym
wierszu tekstu, na przykład:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Ustaw prawa dostępu do pliku PSK - musi on być czytelny tylko dla użytkownika Zabbix.
Edytuj parametry TLS w pliku konfiguracyjnym proxy zabbix_proxy.conf, na
przykład ustaw:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
Proxy będzie łączyć się z serwerem przy użyciu PSK. Tożsamość PSK będzie miała wartość "PSK 002".
(Aby zminimalizować przestój, zobacz jak zmienić typ połączenia w zarządzaniu szyfrowaniem połączeń).
Skonfiguruj PSK dla tego proxy w Zabbix frontend. Przejdź do
Administration→Proxies, wybierz proxy, przejdź do zakładki "Encryption". W
polu "Connections from proxy" zaznacz PSK. Wklej do pola "PSK identity"
wartość "PSK 002", a
do pola "PSK" wartość
"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Kliknij "Update".
Uruchom ponownie proxy. Zacznie on używać połączeń szyfrowanych opartych na PSK z serwerem. Sprawdź pliki dziennika serwera i proxy pod kątem komunikatów o błędach.
W przypadku pasywnego proxy procedura jest bardzo podobna. Jedyna różnica -
ustaw TLSAccept=psk w pliku konfiguracyjnym proxy i ustaw "Connections to
proxy" w Zabbix frontend na PSK.