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.