6 Bezpieczne połączenie z frontendem

Przegląd

Ta sekcja zawiera kroki konfiguracji Zabbix oraz przykłady konfiguracji dla bezpiecznych połączeń TLS między frontend Zabbix a serwer Zabbix.

Konfiguracja

Domyślnie komunikacja między frontendem Zabbix a serwerem Zabbix jest niezaszyfrowana. Aby zwiększyć bezpieczeństwo, włącz TLS po obu stronach. Poniżej przedstawiono przykład najprostszego sposobu wykonania tej konfiguracji.

1. Wygeneruj certyfikaty i klucze.

Utwórz katalog roboczy:

sudo mkdir -p /etc/zabbix/ssl && cd /etc/zabbix/ssl

Utwórz certyfikat CA (dostosuj wartość MyZabbixCA do rzeczywistej nazwy pospolitej):

sudo openssl genrsa -out ca.key 4096
sudo openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=MyZabbixCA/"

Wygeneruj klucz prywatny i certyfikat dla serwera Zabbix (dostosuj wartość zabbix-server.example.com do rzeczywistej nazwy pospolitej):

sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr -subj "/CN=zabbix-server.example.com/"
sudo openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out server.crt

Wygeneruj klucz prywatny i certyfikat dla frontendu Zabbix (dostosuj wartość zabbix-frontend-node do rzeczywistej nazwy pospolitej):

sudo openssl genrsa -out frontend.key 2048
sudo openssl req -new -key frontend.key -out frontend.csr -subj "/CN=zabbix-frontend-node/"
sudo openssl x509 -req -days 365 -in frontend.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out frontend.crt

2. Ustaw odpowiednie uprawnienia.

Dla serwera Zabbix (dostosuj właściciela/grupę zgodnie z użytkownikiem demona serwera Zabbix w swojej dystrybucji):

sudo chown root:zabbix /etc/zabbix/ssl/server.{crt,key} /etc/zabbix/ssl/ca.crt
sudo chmod 640 /etc/zabbix/ssl/server.key
sudo chmod 644 /etc/zabbix/ssl/server.crt /etc/zabbix/ssl/ca.crt

Dla frontendu (dostosuj właściciela/grupę zgodnie z użytkownikiem serwera WWW w swojej dystrybucji):

sudo chown root:www-data /etc/zabbix/ssl/frontend.{crt,key}
sudo chmod 640 /etc/zabbix/ssl/frontend.key
sudo chmod 644 /etc/zabbix/ssl/frontend.crt

3. Skonfiguruj serwer Zabbix.

W pliku zabbix_server.conf dodaj:

TLSFrontendAccept=cert
TLSCertFile=/etc/zabbix/ssl/server.crt
TLSKeyFile=/etc/zabbix/ssl/server.key
TLSCAFile=/etc/zabbix/ssl/ca.crt
# Opcjonalnie:
# TLSFrontendCertIssuer=CN=MyZabbixCA
# TLSFrontendCertSubject=CN=zabbix-frontend-node

Następnie uruchom ponownie serwer:

sudo systemctl restart zabbix-server

4. Skonfiguruj frontend Zabbix.

Podczas instalacji interfejsu webowego włącz opcję Encrypt connections from Web interface (oraz, jeśli to konieczne, opcję Verify server certificate issuer and subject) i wypełnij pola TLS CA file, TLS key file, TLS certificate file (oraz, jeśli to konieczne, pola Server TLS certificate issuer i Server TLS certificate subject):

Parameter Description
TLS CA file Określ pełną ścieżkę do pliku certyfikatu urzędu certyfikacji (CA) używanego do weryfikacji certyfikatu serwera.
TLS key file Określ pełną ścieżkę do pliku klucza prywatnego klienta odpowiadającego certyfikatowi klienta.
TLS certificate file Określ pełną ścieżkę do pliku certyfikatu klienta, jeśli wymagane jest wzajemne uwierzytelnianie TLS.
Server TLS certificate issuer Określ wyróżniającą nazwę (DN) wystawcy, która ma zostać dopasowana do certyfikatu serwera.
Server TLS certificate subject Określ wyróżniającą nazwę (DN) podmiotu, która ma zostać dopasowana do certyfikatu serwera.

W istniejących instalacjach edytuj następujące pola w pliku zabbix.conf.php:

$ZBX_SERVER_TLS['ACTIVE'] = '1';
$ZBX_SERVER_TLS['CA_FILE'] = '/etc/zabbix/ssl/ca.crt';
$ZBX_SERVER_TLS['KEY_FILE'] = '/etc/zabbix/ssl/frontend.key';
$ZBX_SERVER_TLS['CERT_FILE'] = '/etc/zabbix/ssl/frontend.crt';
// Opcjonalnie:
// $ZBX_SERVER_TLS['CERTIFICATE_ISSUER']  = 'CN=MyZabbixCA';
// $ZBX_SERVER_TLS['CERTIFICATE_SUBJECT'] = 'CN=zabbix-server.example.com';

5. Zweryfikuj szyfrowanie, potwierdzając, że w frontendzie Zabbix ani w pliku dziennika serwera Zabbix nie ma komunikatów o błędach:

tail -f /var/log/zabbix/zabbix_server.log

Rozwiązywanie problemów

Nieprawidłowa lub niekompletna konfiguracja TLS może powodować błędy w frontendzie Zabbix lub wskazywać, że serwer Zabbix działa, ale połączenie nie zostało pomyślnie ustanowione:

Aby zidentyfikować dokładny problem z konfiguracją, ustaw poziom dziennika serwera Zabbix na 4, odtwórz błąd we frontendzie i sprawdź dziennik serwera Zabbix pod kątem odpowiedniego komunikatu o błędzie.

Poniższe przypadki opisują typowe błędy i ich możliwe przyczyny.

Adres IP frontend nie jest dozwolony

Dziennik serwera Zabbix zawiera błąd podobny do:

54283:20260819:105926.400 frontend connection from "127.0.0.1" is not allowed by FrontendAllowedIP

Połączenie jest odrzucane po uzgodnieniu TCP, ponieważ adres IP frontend nie jest autoryzowany.

Dodaj adres IP frontend do parametru FrontendAllowedIP w pliku zabbix_server.conf i uruchom ponownie serwer Zabbix.

Połączenie niezaszyfrowane jest niedozwolone

Dziennik serwera Zabbix zawiera błąd podobny do następującego:

56884:20260819:111154.285 frontend connection of type "unencrypted" is not allowed by TLSFrontendAccept

Serwer Zabbix jest skonfigurowany tak, aby akceptować wyłącznie połączenia TLS, na przykład za pomocą TLSFrontendAccept=cert, ale frontend próbuje połączyć się bez szyfrowania.

Włącz szyfrowanie frontendu i skonfiguruj wymagane pliki TLS w zabbix.conf.php, zgodnie z opisem w kroku 4 sekcji Konfiguracja.

Frontend próbuje użyć TLS, podczas gdy serwer oczekuje połączenia nieszyfrowanego

W dzienniku serwera Zabbix znajduje się błąd podobny do poniższego:

61091:20260819:115916.019 End of zbx_tls_accept():FAIL error:'TLS handshake set result code to 1: file ../ssl/record/rec_layer_s3.c line 317 func ssl3_read_n: error:0A000126:SSL routines::unexpected eof while reading: TLS write fatal alert "decode error"'

Dokładny komunikat o błędzie zależy od wersji OpenSSL.

Serwer Zabbix jest skonfigurowany tak, aby akceptować wyłącznie połączenia nieszyfrowane, na przykład za pomocą ustawienia TLSFrontendAccept=unencrypted, podczas gdy frontend próbuje nawiązać połączenie TLS.

Skonfiguruj serwer Zabbix tak, aby akceptował połączenia TLS, ustawiając TLSFrontendAccept=cert oraz definiując TLSCertFile i TLSKeyFile w pliku zabbix_server.conf. Alternatywnie wyłącz szyfrowanie frontendu w pliku zabbix.conf.php.

Certyfikat frontend nie jest zaufany

W dzienniku serwera Zabbix znajduje się błąd podobny do następującego:

62248:20260819:124203.812 End of zbx_tls_accept():FAIL error:'self-signed certificate: TLS handshake set result code to 1: file ../ssl/statem/statem_srvr.c line 3522 func tls_process_client_certificate: error:0A000086:SSL routines::certificate verify failed: TLS write fatal alert "unknown CA"'

Frontend przedstawił certyfikat, ale serwer Zabbix nie ufa urzędowi certyfikacji (CA), który go podpisał.

Ten sam problem może również pojawić się w informacjach systemowych frontendu jako:

fread(): SSL operation failed with code 1. OpenSSL Error messages:

error:0A000418:SSL routines::tlsv1 alert unknown ca [zabbix.php:17 → require_once() → ZBase->run() → ZBase->processRequest() → CController->run() → Widgets\SystemInfo\Actions\WidgetView->doAction() → CSystemInfoHelper::getData() → CSystemInfoHelper::getServerStatus() → CZabbixServer->getStatus() → CZabbixServer->request() → fread() → CConfigFile->{closure:/user/share/conf/zabbix.conf.php:89}() in conf/zabbix.conf.php:95]

Frontend może również wyświetlać komunikat „Otrzymano nieprawidłową odpowiedź z serwera Zabbix „localhost””.

Sprawdź, czy certyfikat frontendu został podpisany przez urząd certyfikacji określony przez TLSCAFile w pliku zabbix_server.conf.

Plik klucza TLS jest nieczytelny

frontend może wyświetlać komunikat „Plik klucza TLS: plik jest nieczytelny”.

Może również wyświetlać komunikat „Nie można połączyć się z serwerem Zabbix z powodu ustawień TLS. Niektóre funkcje są niedostępne”.

Użytkownik serwera WWW nie ma wystarczających uprawnień do odczytu co najmniej jednego pliku certyfikatu, klucza lub urzędu certyfikacji skonfigurowanego w zabbix.conf.php. Może się tak zdarzyć, gdy pliki certyfikatów są przechowywane w katalogu z ograniczonym dostępem, takim jak /root/ lub katalog domowy użytkownika.

Przenieś pliki certyfikatów do katalogu dostępnego dla serwera WWW i ustaw odpowiednie uprawnienia zgodnie z opisem w kroku 2 sekcji Konfiguracja.

Pliki TLS są nieprawidłowe lub uszkodzone

Frontend może wyświetlać komunikat „Nie można połączyć się z serwerem Zabbix z powodu ustawień TLS. Niektóre funkcje są niedostępne.”.

Może się tak zdarzyć, gdy skonfigurowane pliki certyfikatu lub klucza istnieją i są dostępne do odczytu, ale ich zawartość jest pusta, uszkodzona lub w inny sposób nieprawidłowa. W takim przypadku frontend nie nawiązuje połączenia z serwerem Zabbix, a w dzienniku serwera Zabbix nie pojawia się żadna odpowiadająca temu próba połączenia.

Sprawdź, czy pliki certyfikatu i klucza zawierają prawidłowe dane w odpowiednim formacie oraz czy klucz prywatny odpowiada certyfikatowi.